コンパイラのA正規化とK正規化の違いは何ですか?


7

管理標準形式は、各中間命令に名前が付いているプログラム中間表現です。GHCOCamlで使用されます。

K正規化形式は、各命令が1つの割り当てと演算で構成される中間表現です。MLKit、Min-Caml、およびGoCamlで使用されます。

A正規化K 正規化の両方に、継続を伴うlet式の生成が含まれます。

A正規化とK正規化は、まったく同じ変換のようです。それらが異なる名前に値するようなそれらの違いは何ですか?

回答:


2

私のsearch-fooが私を導いた限り; K-正規形が触発され、A正規形、しかしで使用するための計装ストレージモード解析機能プログラム用メモリマングメントディレクティブを推定するために使用される静的プログラム分析です。

この用語は、L。Birkedal、M。Tofte、およびM. Vejlstrupの 出版物に由来するよう です。領域推定から領域表現推定を介したフォンノイマンマシンまで。

書き込み時に公表缶のコピーはから取得することがL.Birkedalの下教員ウェブページの出版物


2
用語の起源は興味深いですが、これがどのように違いを説明するかは直接わかりません。2つの正規化手順の違いは何ですか?(存在する場合)
離散トカゲ

1
論文(cs.cmu.edu/afs/cs/user/birkedal/pub/rri-popl96.ps.gz)によると、K正規形は各中間式を変数にバインドしますが、letバインディングを線形化しませんそうすることは地域推論を妨げるからです。
真に厳密でない

1
私の現在の理解ではlet-bindingsの線形化はANFの定義の一部ではないため、これが違いであるかどうかはわかりません。もう1つの可能性のある言及は、用語を入力する必要があることですが、これが文書で与えられた型システムに関してのみ言及である場合も、私には明確ではありません。
soren-n
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.