最近OSがプログラムコードで書かれており、コンパイルすることで機械語に直してることを知りました。疑問なのですが、コンパイラもおそらくコードで書かれていると思うのですが、コンパイラをコンパイルするのは誰なんですか?って考えると無限に続いていくと思うのですが、どこかで手動で機械語を使ってコンパイラを作らないと行けないと思ったんですが、どうなんでしょう

1件の回答

回答を書く

1106653

2026-03-10 04:20

+ フォロー

ここは余談なので、本筋は下に書いてあります。

メモリとcpu含むコンピューターは、配線とトランジスタというものでできています。トランジスタには2種類あり、ゲートというものに電気を通すと、回路がつながるというトランジスタであるnmos。ゲートに電気を通すと回路が閉じるというpmosというトランジスタです。このnmosとpmosの組み合わせでコンピューターは作られています。ほとんどのトランジスタのゲートには、ほかのトランジスタからの出力がつながっているのですが、いくつか操作可能なゲートがあります。そのゲートにキーボードやマウスをつなげたりするのですが、機械語という0と1で構成されたプログラミング言語が、そのゲートを開け閉めすることができます(実際はマイクロコードとかにさらに変換したりしますが、機械語が直接コンピューターが理解できるものというもので問題ありません)。



要するに、機械語というものがコンピューターが直接理解できる我々でいう日本語のようなものということです。

本題に入ります。OSを作るのにつかわれるC言語やRustやアセンブリなどはコンパイル型言語といって、コンパイルしてから実行します。

イメージでいえば、人間には難解な機械語を作るための道具です。

OSを作る際、C言語やRustでコードを書きますが、それを売ったり配信したりするときは、すでに機械語にコンパイルしてから配信します。

ではコンパイルするコードは何で書かれているかというと、機械語です。

人間で例えるなら英語から我々の理解できる日本語に翻訳する方法を、日本語で命令されるのです。



ちなみに、さらに余談なのですが。世界最初のアセンブリで、難解な機械語を書きやすくするための道具として作られました。コンパイルする方法は狂気なのですがエンジニアが機械語を直接書きました。その後cのコンパイラは、アセンブリ言語で書かれました、もちろんアセンブリもただの道具なのでコンパイルして機械語にしました。つまりc言語のコンパイラも機械語で書かれています。その後go言語とかもc言語で開発されたと思うのですが、もちろんc言語を機械語で書かれたコンパイラで機械語にしてからgo言語のコンパイルを行っています。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有