■
何書いてたか忘れてしまったので全然違う話。Haskellと型。なんだけど、時間が無いので超省略気味で。
Haskellっつーと、遅延評価とモナドが注目されがちなんだけど、classとinstanceで型をつくるシステムも結構面白いような気がした。
なにが面白いか?さっき調べはじめたばっかりなので、わかりません。
classがJavaでいうインターフェースで、instanceが型をつくるという、えーと、だから、なんだ。
どうして、「Javaでいうインターフェース」っつーと、陳腐な感じがするんだろうか。僕の脳内で変な変換が起こってるからに違いない。そういうのはいけない。
あと、Javaのインターフェースは確か実行時に検索してたはずなんだけど、Haskellのもそうなってんだろうか。だとしたら、実行時の負担ってどのくらいになるんだろうか。
関数テーブルを渡してるっていうのはどうなの?
class Hoge n where nanika :: n -> n nanika2 :: n -> n nanika2 = nanika data Foo = Noo instance Hoge Foo where nanika x = x
こういうのがあったとして、Hogeを受けとる関数は、実際は
Hoge_Ops[] = { Hoge_nanika, Hoge_nanika2 }; nanika_func( Hoge_Obj *obj, Hoge_Ops *ops ) { ops[0]( obj ); }
こんなふうになってたら、オブジェクトごとに、VTableを持たなくていいし、多重継承しても実行時検索は起きない。さらに、関数インライン化の恩恵を受けられる、ような気がしないでもない。
とか、考えて、ghcの吐いたコードを見てみたんだけど、さっぱり読めなかった。
ああっ違う、そういう結論にしたかったんじゃないんだけど。関数型言語の機能をCのような、「GC無し、ランタイムライブラリ無し」な言語に持ってくるとどうなるかっていうのを考えるのは暇つぶしに良い、というような話にしたかったんだ。そこらへんは、汲みとってあげてください。
時間が無いです。明日こそは4時起きして作業します。多分無理だけど。