機能性中間体の欠点


16

JavaScriptに似た言語のオプティマイザーを作成しているため、中間コード表現を選択する必要があります。最近の明らか/典型的な選択は、静的単一割り当て(SSA)です。

ただし、CのModern Compiler Implementationは、機能的な中間形式についても説明します。これは基本的に、中間表現の純粋な機能を実現することを意味します(ローカル変数のみについては純粋で、ヒープデータはCPSではなく、変更可能であり、単純なletブロックおよびテールコールのみです)。推論しやすいという点でいくつかの利点があります。

おそらくそれは簡単ではないか、誰もがすでにそのような表現を使用しているので、私の質問は、機能的な中間形式がSSAと比較してどのような不利な点ですか?


3
この中間形式に対してどのような分析を行いますか?SSAは、デッドコードの除去、定数の伝播、部分的な特殊化などに最適です。この種のものがメニューにない場合は、SSAをスキップして、よりリラックスした表現を使用して、より簡単な分析パスを作成できます。ただし、SSAフォームの生成は非常に簡単な作業であり、SSAをCPSに(およびその逆に)簡単に変換できるため、利点が2倍になります。
SKロジック

ええ、私はフルモンティを目指していますが、入力言語と出力形式(最初はC ++)はどちらも必須の言語です。
rwallace

SSAフォームの生成は非常に簡単な作業であり、SSAをCPSに簡単に変換できます。また、CPSをSSAに変換することもでき、これにより利点が倍増します。
レオンアレクシス枢機

回答:


1

SSAは、デッドコードの除去、定数の伝播、部分的な特殊化などに最適です。この種のものがメニューにない場合は、SSAをスキップして、よりリラックスした表現を使用して簡単な分析パスを作成できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.