3

インタープリター以外のコンパイラーは、入力を変換するだけで実行する必要はありません。それ自体のパフォーマンスは、インタープリターの場合ほど問題になることはありません。したがって、インタープリターを作成することはありません。たとえば、Ruby や PHP では遅すぎるためです。

しかし、コンパイラはどうですか?

スクリプト言語でコンパイラを作成する場合、おそらく迅速な開発を特徴とするものでさえ、ソース コードと初期開発時間を半分に削減できる可能性があります。少なくとも私はそう思います。

確かに: スクリプト言語とは、通常、少なくともプログラマーにとって、プログラミングをより速く、より簡単に、より楽しくする典型的な機能を備えたインタープリター言語を意味します。例: PHP、Ruby、Python、JavaScript の可能性もありますが、コンパイラの選択としては奇妙かもしれません。

  • コンパイラは通常何で書かれていますか? C、C++、またはアセンブラーのような低レベルのもので応答すると思いますが、なぜですか?

  • スクリプト言語で書かれたコンパイラはありますか?

  • コンパイラの記述に低レベルまたは高レベルのプログラミング言語を使用することの (欠点) 利点は何ですか?

4

7 に答える 7

7

ほとんどのコンパイラは、対象となるプログラミング言語 (ブートストラップ) で記述されています。

もちろん多くの例外があります。

于 2010-03-30T09:34:12.827 に答える
1

ほとんどのコンパイラは、C または C++ で記述されています。今日でも、コンパイラのパフォーマンスは重要です。900 ファイルのプロジェクトをコンパイルする必要がある場合、2 分かかるか 20 分かかるかは大きな違いです。

一部のコンパイラはスクリプト言語で記述されています (1 つの例として思い浮かぶのは Pajamas - Python で記述された Python から Javascript へのコンパイラ) ですが、工業用強度のコンパイラの大部分は C および C++ で記述されています。

于 2010-03-30T09:32:44.810 に答える
0

コンパイルは、コンピューター上で、またはJoel Spolskyが言うように、計算量が最も多いことの1つです。

コンパイルされた言語でコードを書くことは、庭のさまざまな家庭用コンピューターではまだすぐに実行できない最後のことの1つです。

したがって、コンパイラをできるだけ高速にして、CおよびC++を自然に選択する必要はありません。

于 2010-03-30T09:37:39.147 に答える
0

コンパイラを効率的に実装するための特殊なプログラミング言語があります。例:

http://www.meta-alternative.net/mbase.html

また、Irony、JetBrains MPS、その他。

関数型言語は一般にこの分野で非常に効率的です。特に代数的データ型の言語、カリー化に一致するパターン、たとえばHaskell、ML(F#、OCaml)、Nemerle、Scala。

于 2010-03-30T10:04:51.703 に答える
0

SUN / Oracle JVM の javac コンパイラは Java で書かれています。編集時にバックグラウンドでコンパイルするために Eclipse IDE 内で使用される Java のコンパイラーと同様です。多くの関数型言語のコンパイラは、通常、関数型言語がコンパイラの作成に非常に適しているため、その言語で記述されることがよくあります。制限付き言語 (GLSL/OpenCL などの GPU プログラミングなど) のコンパイラは、GPU で実行可能な言語では記述されません。

基本的な問題の 1 つは、特定のコンパイラによってコンパイルされた言語が、コンパイラの実装に適した言語ではない可能性があることです。FORTRAN で FORTRAN 用のコンパイラを書いている人を私は知りません。

本質的に、コンパイラの実装言語は、関連する言語の適合性と、開発時間、必要な実行時パフォーマンス、ツールの可用性、および開発者の習熟度からの他の多くの基準に応じて、そのコンパイラへの入力言語である場合とそうでない場合があります。

于 2010-10-02T15:46:16.110 に答える
0

それらのほとんどは、かなり高級な言語 (C/C++) で書かれています。ただし、最新のハードウェアでは、マネージ言語 (C#/Java)、関数型言語 (Haskell)、さらにはマネージ関数型言語 (Nemerle) でコンパイラーを記述してもまったく問題ありません。

関数型言語は、パターン マッチングと呼ばれる手法の恩恵を受けます。これにより、解析ツリー/AST の処理がはるかに簡単になります。

実際の compiler-fu は、特定の言語で言語用のコンパイラを作成することです (ブートストラップと呼ばれるプロセス)。

于 2010-03-30T09:34:16.993 に答える
0

pypyと呼ばれる Python 用のネイティブ Python コンパイラがあります。

于 2010-03-30T10:00:26.450 に答える