Min Caml コンパイラ その3
引き続き、コンパイラの社内研究会開催。
ざっくりと概要は読み終わった。
K 正規化とα変換で SSA と同等なことが達成ているのではないかと。A 正規化はインラインが楽。でもインラインしないなら、結局 K 正規化しないといけなさそう。
HLS ではクロージャ変換いらねーんじゃね?かと。関数を引数に渡したときにクロージャー変換が必要なのは謎。関数を引数に渡したときは結局テンプレート的なこと=多相にしないといけなさそう。
コンパイラを作る流れは一通り読めた。普通のコンパイラの作り方という結論。型推論以外は。
あと、型推論はうまく今のコンパイラの外側でやれないか?と。つまりオンオフができるように(直交的に)できないか検討したい。とりあえず試しにやってみることになった。なんちゃって型推定。
型推定をざっくりいうと、int と float (だけとすると)の世界を分けましょう。ということで、全部を全部、推定できないから、さいしょに * と *. といった型の決まった演算を足掛かりに推定していきましょうということらしい。なので、言語として最初からその思想があるかどうかがポイントで、その思想がない言語に後から導入するのは厳しそうな感じ。
F# を調べると *. みたいなのがなさそうだったのでどうしているのか不思議。
その他
qiita.com
これを読むと、私もコンパイラになれそうな気がしてきた。アイキャッチ画像があって、そういう時代の流れなんだなぁ、、、と思った。
compiler-errors-for-humans
「エラー発生時に「もしかして?」を表示してくれる。」らしいぞ。
これで、型変換を含めたコンパイラへの足掛かりは出来た(つもり)。