mincamlを読む


最適化周りを読んでました。
どうも、全体像を1つの流れとして把握できてないようなので、ほとんど暗記問題だなとおもう今日この頃です。

mincamlの最適化周りは

すべてk正規化した後に、α変換されたものを扱います。

まず行うのはβ簡約次に、ネストしたletの簡約、で次にinline展開、定数の畳み込み、不要定義削除をしています。
1つ1つの最適化はシンプルです。これが関数型言語であるからシンプルなのか、そうでないのかは
わかりませんけど、とにかく、ここらへんの流れをしっかり頭に叩き込んでいるところです。

字句解析
構文解析
型推論
k正規化
α変換
最適化
 β簡約
 ネストしたletの簡約
 inline展開
 定数の畳み込み
 不要定義削除
クロージャ変換
仮想アセンブラに変換
13bit即値最適化
レジスタ割り付け
アセンブラ出力

というのが全体の流れ。で、データは以下のように変化します。

文字列→トークン列→構文木→k正規化されたデータ→クロージャ変換されたデータ→仮想アセンブラアセンブラ文字列


k正規化されたデータは構文木アセンブラに近付けた形で3番地コードに近いのかな?
ただ、関数内関数等は残った状態。
クロージャ変換で関数内関数がなくなります。
で、仮想アセンブラで無限レジスタアセンブラになって、レジスタ割り付けをすることで、
無限でなくなってアセンブラが吐き出されるってかんじです。
k正規系α変換β簡約という名前がカッコいいんだけど覚えづらく仲良くなるのに時間がかかっています。


ここまで、何も見ないで書けるようになってきたのが収穫かなと。
間違いもあるかもしれないけど、着々と頭に入ってきています。


これらが頭に入ったら、次はタイガーブックやドラゴンブックとの用語の違いを把握していく予定です。