コンパイラが言語Yで設計されている言語Xがあるとします。ここで、言語Yのコンパイラはアセンブリ言語で設計されています。さて、Xで書かれたコードを実行するには、命令は言語Yの助けを借りてコンパイルされます。つまり、Xの命令はYのコンパイラとして機能するYへの入力として表示されます。 Xのためのコンパイルされたコードです。しかし、Yに提示される命令は、アセンブリ言語によってもコンパイルされなければなりません。アセンブリ言語でコンパイラを設計するよりも、他の言語のコンパイラを使用してコンパイラを設計する方がよいでしょうか?
Xの命令をコンパイルするために、ここでYの命令をコンパイルする必要があります。なぜこれも必要ですか?
アセンブリコードを使用してXの命令を直接コンパイルすると、上記の場合よりも簡単になりますか?どんな意義の
あなたは明らかにそれを自由にすることができます.. – harold
'' '' '' '' '' '' '' '' ''は言語を使って設計しています。あなたはアセンブラで自明ではないプログラムを書くことを試みたことがありますか?答えは他のタイプのプログラムと同じです:それは簡単で、速く、エラーが起こりにくいからです。 – MikeMB
コンパイラのバックエンドは、コンパイラを作成する上で最も重要かつ高価な部分です。コードジェネレータは実行可能ですが、良いオプティマイザは非常に重要な投資であり、パフォーマンスにとって重要です。そして、あなたがサポートしなければならないすべてのアーキテクチャーに対して何度も何度も何度もやり直すことになります。誰かの勤勉さを活かすことははるかに賢明なことです。 LLVMは1000ポンドのゴリラで、JVMと.NETも簡単に使えます。今や普遍的に利用可能なJavaScriptジッタは、ますます多くの用途に利用されています。 –