私はプログラミングの詳細を学ぼうとしており、現在コンパイラについて学んでいます。私はニワトリが先か卵が先かという状況に陥りました。コードまたはプログラムを実行するにはコンパイラーが必要であり、コンパイラー自体がプログラムである場合、コンパイラーを作成するためにどの言語が使用されますか?
前もって感謝します
私はプログラミングの詳細を学ぼうとしており、現在コンパイラについて学んでいます。私はニワトリが先か卵が先かという状況に陥りました。コードまたはプログラムを実行するにはコンパイラーが必要であり、コンパイラー自体がプログラムである場合、コンパイラーを作成するためにどの言語が使用されますか?
前もって感謝します
最初のコンパイラはアセンブリで構築されましたが、その後、アセンブリ コンパイラを使用して、別の言語で他のコンパイラをコンパイルできるようになりました。アセンブリコンパイラが書かれた後にCコンパイラがCで書かれたと言及したCプログラミング言語を漠然と覚えています。そのため、現在、コンパイラは任意の言語で記述できます。これらのコンパイラを機械命令に変換するコンパイラがあるからです。結局、すべてがメモリなので、すべてがバイナリになります。
CPU は、マシン コードと呼ばれるものを実行します。マシンコード (またはアセンブリ) にはさまざまなバリエーションがあり、命令セット (言語) は CPU アーキテクチャによって異なります。
もちろん、まったく新しい命令セット用に作成されたプログラムは、アセンブリで直接作成する必要があります。これは、コンパイラの場合も同様です。各命令セットの最初のコンパイラは、アセンブリで作成する必要があります。その命令セット用の動作するコンパイラがあれば、コンパイラを C またはアセンブリ コンパイラがサポートする言語で書き直すことができます。
GNU Compiler Collection (GCC) は、これまでで最も使用されているコンパイラの 1 つであり、C++ で記述されています。
要するに、新しい命令セット用の最初のコンパイラはアセンブリで書かれています。
編集: あなたの質問により、新しい言語用のコンパイラを実装する方法に興味を持ちました。これは、ブートストラップと呼ばれるプロセスを介して行われることが判明しました。私自身はまだ完全には理解していませんが、一般的な考え方は、言語自体で新しい言語のコンパイラを作成することです。私はそれが少し奇妙であることを知っています。これに関して、かなりお得な情報を見つけました。
ところで、本当に素敵な質問をありがとう。