JavaScriptに似た言語のオプティマイザーを作成しているため、中間コード表現を選択する必要があります。最近の明らか/典型的な選択は、静的単一割り当て(SSA)です。
ただし、CのModern Compiler Implementationは、機能的な中間形式についても説明します。これは基本的に、中間表現の純粋な機能を実現することを意味します(ローカル変数のみについては純粋で、ヒープデータはCPSではなく、変更可能であり、単純なlet
ブロックおよびテールコールのみです)。推論しやすいという点でいくつかの利点があります。
おそらくそれは簡単ではないか、誰もがすでにそのような表現を使用しているので、私の質問は、機能的な中間形式がSSAと比較してどのような不利な点ですか?
3
この中間形式に対してどのような分析を行いますか?SSAは、デッドコードの除去、定数の伝播、部分的な特殊化などに最適です。この種のものがメニューにない場合は、SSAをスキップして、よりリラックスした表現を使用して、より簡単な分析パスを作成できます。ただし、SSAフォームの生成は非常に簡単な作業であり、SSAをCPSに(およびその逆に)簡単に変換できるため、利点が2倍になります。
—
SKロジック
ええ、私はフルモンティを目指していますが、入力言語と出力形式(最初はC ++)はどちらも必須の言語です。
—
rwallace
SSAフォームの生成は非常に簡単な作業であり、SSAをCPSに簡単に変換できます。また、CPSをSSAに変換することもでき、これにより利点が倍増します。
—
レオンアレクシス枢機