web-dev-qa-db-ja.com

C#コンパイラはどの言語で書かれていますか?

http://referencesource.Microsoft.com/ でソースコードを確認しましたが、すべてのソースコードはC#で記述されています。

また、新しいC#コンパイラプラットフォームのソースコード( Roslyn )を調べましたが、これもC#で記述されています。そんなことがあるものか? C#言語コンパイラはC#で作成されていますか?または、明らかな何かを見逃していますか? C#コンパイラがC#で記述されている場合、どのように機能しますか?

143
CriketerOnSO

元のC#コンパイラはC#ではなく、CおよびC++で記述されていました。新しいRoslynコンパイラはC#で作成されましたが、最初は古いコンパイラでコンパイルされました。新しいコンパイラが完了すると、独自のソースコードをコンパイルできました。これは bootstrapping と呼ばれます。

218
Thomas Levesque

コンパイラはユーティリティプログラムです-プログラミング言語のテキストをマシンコードに変換します。プログラミング言語がたまたまコンパイラであるソフトウェアを記述している場合.....

コンパイラは、他のアーキテクチャ用のマシンコードも生成できます。たとえば、Apple Intelベースのサーバーのラックを使用してiOSをコンパイルします。コンパイラは、生成するARMコードを実行する必要はなく、ディスクに書き込むだけです。

コンパイラ2.0は、コンパイラ1.0で処理できる言語で作成する必要がありますが、最適化などの新しい機能を備えたコンパイラ2.0を作成できます。その後、コンパイラ2.0を使用してソースコードを再コンパイルし、より良いバージョンを作成できます。繰り返しますが、コンパイラーは、それ自体の別のバージョンを作成していることを知りません。

時間の霧にさかのぼって戻ると、コンパイラーがないレベルに到達します。これは、高レベル言語の最初の反復です。次に、鉛筆とオペコードの本を取り出して、アセンブリの最初の本を書く必要があります。最初のアセンブラはどのように作成しましたか?おそらくパンチされた紙テープに直接コードを入力するか、フロントパネルのスイッチを切り替えます。

32
paul

コンパイラは、他のプログラムと同様の単なるプログラムです。魔法や特別なことは何もありません。入力を受け取り、出力を生成します。この特定のケースでは、入力はたまたまC#であり、出力はたまたまCILですが、それは入力が一連の納税申告であり、出力がレポートであることに変わりはありません。

15
Jörg W Mittag