2017-09-30 16 views
0

コンパイラが言語Yで設計されている言語Xがあるとします。ここで、言語Yのコンパイラはアセンブリ言語で設計されています。さて、Xで書かれたコードを実行するには、命令は言語Yの助けを借りてコンパイルされます。つまり、Xの命令はYのコンパイラとして機能するYへの入力として表示されます。 Xのためのコンパイルされたコードです。しかし、Yに提示される命令は、アセンブリ言語によってもコンパイルされなければなりません。アセンブリ言語でコンパイラを設計するよりも、他の言語のコンパイラを使用してコンパイラを設計する方がよいでしょうか?

Xの命令をコンパイルするために、ここでYの命令をコンパイルする必要があります。なぜこれも必要ですか?

アセンブリコードを使用してXの命令を直接コンパイルすると、上記の場合よりも簡単になりますか?どんな意義の

+1

あなたは明らかにそれを自由にすることができます.. – harold

+2

'' '' '' '' '' '' '' '' ''は言語を使って設計しています。あなたはアセンブラで自明ではないプログラムを書くことを試みたことがありますか?答えは他のタイプのプログラムと同じです:それは簡単で、速く、エラーが起こりにくいからです。 – MikeMB

+0

コンパイラのバックエンドは、コンパイラを作成する上で最も重要かつ高価な部分です。コードジェネレータは実行可能ですが、良いオプティマイザは非常に重要な投資であり、パフォーマンスにとって重要です。そして、あなたがサポートしなければならないすべてのアーキテクチャーに対して何度も何度も何度もやり直すことになります。誰かの勤勉さを活かすことははるかに賢明なことです。 LLVMは1000ポンドのゴリラで、JVMと.NETも簡単に使えます。今や普遍的に利用可能なJavaScriptジッタは、ますます多くの用途に利用されています。 –

答えて

3

何もアセンブリ内簡単にではありません。アセンブリは機械コードを生成するために最終的にコンパイルされなければならない別の構文です。

言語に戻る 'X':あなたが望む結果に依存します。言語自体がブートストラップされるのでしょうか?そうであれば、それは徐々に行われ、中間または初期コンパイルは任意の適切な言語で行うことができる。最終的には、あなたが仕事を引き継ぐように中間言語を段階的に廃止します。 ブートストラップおよび/またはセルフホスティングの計画は、変更を管理するのに最小限の労力しか必要とせず、最も柔軟でポータブルな言語であることが最も一般的です。

関連する問題