定数畳み込み(constFold.ml)

 

関数をインライン展開すると、たとえばlet x = 3 in let y = 7 in x + yにおけるx + yのように、すでに値がわかっている変数についての計算がよく出てきます。これを実際に計算して、コンパイル時に「10」のような定数に置き換えてしまう最適化処理が定数畳み込みです。MinCamlでは関数ConstFold.gにて実装されています。

 

ConstFold.gは、変数の名前から値への写像envと、式eとを受け取り、定数畳み込みを行って返します。たとえばx + yという式を受け取ったら、xyの値が整数定数かどうか調べ、もしそうだったら直ちに計算して結果を返します。逆にlet x = e in ...という変数定義を見つけたら、xからeへの対応をenvに追加します。整数だけでなく、浮動小数や組についても同じです。

 

次へ進む