2008-08-31から1日間の記事一覧

ローカル関数

なんとかローカル関数を実装した。 無理矢理っぽくてあんまり納得いかないけど。 自由変数を本物の引数の前に並べるような lambda-liftingしただけなので、 関数が定義されたスコープを抜けたらコール不能になる。 (引数として使う自由変数の存在が保証でき…

変換

うーむなんだか関数型中間表現変換 入れた方がいいような気がしてきた ASTからダイレクトにLLVMに持ってくのは この辺が限界のような気もする クロージャのエスケープ解析とか入れたい でもSSA作る手順が関数型中間表現作る手順に似ていて 同じことするだけ…

自由変数の収集

自由変数の収集はたいしたことなかった 以前OCamlでやったときは結構めんどくさかったような気がするが あれはOCamlの練習も兼ねてたので 破壊的操作をしないという掟を己に課していたせいだな C++でやったら 10行くらいの追加ですんだ (その分ソースが不自…

うーん

問題の依存関係的に分割ができねー 気合い入れて全部同時に実装するしかない

と思いきや

意外と簡単に直った気がするが よくわからん テストコードいっぱい書くしかないな

あっ

型推論の実装が中途半端だったの忘れてた つっても現状関数が型省略を許してないし、 変数の初期化以外の代入文もないから 推論するところほとんどないな あっ うーん 変数の型推論のアルゴリズムが間違ってる 結構面倒だな 関数型IRみたいな構造になってれ…

さて次はどうしよう

無名関数の前に ローカル関数かな〜 LLVMの仕様だとlambda liftingすることになると思うので とりあえず自由変数の検出かしら。 というか何するにしても 自由変数の検出は必要か。 じゃあそれにしよう。

デザイン予定

leafのデザインは以下のような雰囲気で 進めていく予定です。 強い型付け c系の字面 デザインの美しさと使いやすさがコンフリクトしたときは使いやすさをとる。 perl/ruby的なスタンス あくまで道具。 強い型も「自分に必要な道具だから」つける。 関数型言…

今の文法

ちなみに現在の文法はこんな感じです。 なんだかんだで結構大きくなりつつありますね。 エラートラップ用の文法も含まれているので、実質的には もうちょっと小さいですが。 バグって変な動作をするたびに「caperのせいかな?」と疑って ビクビクしながら使…

分岐

phiとかいうの使えばよかったのね 書き換えよう