草植え再び
次期C++(つまりC++0x)の仕様も固まってきたし、そろそろインタプリタ作らね?って感じで数日前からGrassのインタプリタを実装してました。
非常にけいおす(語源:Chaos)な感じでデバッグも大変だった。
lambda expressionが入ってくると、gdbが若干どこさしてるかわからなくなってくるので、そのうち対応してくれることを祈って...
ってかバイナリに落ちるとlambdaはファンクタなので、キャプチャしたthisの先を見ることができないorz
> p this とかやるとファンクタの中身が出るだけ...
あと、キャプチャ(多分参照のみ)したコンテナの中をみようとすると非常に悲しくなる。
std::stackをキャプチャして5要素いれてからlambdaの中に跳んでstackを改めて見ると要素数が数千とか表示されてる。多分キャプチャしたポインタとかが適度に変換されるんだろう。VMのページテーブルみたいに。
コンパイラだけでなくデバッガの更新も待ち遠しい。
あ、ソースは長い()し、汚いので少しまとまったらリンクとか貼りますので少々お待ちを。(待つ人がどれぐらいいるか疑問だが)
カリー化したときにできるだけ実行して遅延評価とかしたいな。
あと言語の性質上、データ(スタック上のlambda)は変更されないので1度実行したらその結果をキャッシュとかしたいな。早くなるし。
ただ、プリミティブのinとoutみたいなHaskellで言うところのモナドみたいなやつはキャッシュできないからどうしたものか。