unix、linuxはC言語で書かれている、と聞いたのですが、不思議なことがあります。
そもそもC言語を書くためにはviとか必要ですしコンパイルするにもccとかgccとか必要ですよね?
viとかccとかを使うには、また、unixが必要な気がします。どうやってunixを作ることができたのでしょうか?
ニワトリと卵みたいですごく不思議なのですが・・
linuxのところで http://virus.okwave.jp/kotaeru.php3?q=2246024 のような質問をしているうちに不思議に思ってきました。
最初に搭載するプロセッサに合ったアセンブラやそれよりも低級言語でC言語のコンパイラをまず書きます。それからOSを構築していったものと考えられます。私も10年ぐらい前にUnixを使った頃あなたと同じような疑問を持ちましたが、良く分かっている人間からそういう答えをもらいました。確かこのようなことをいったのを聞いたことがあります。
また、現在の例を考えてもらえばわかるのですが、例えばあるコード(ゲーム機など)のソフトなどを開発するためにはWindows上で開発しますよね?
Source code -> Target machine code
compile
ある機械にあったコンパイラを作りそれでシステムを構築するわけです。つまり違うOSでターゲットとなるマシンにあったコンパイラを書き OSやそのAPIを書きアプリケーションを書いていく感じです。どちらも似たような答えですが、いずれかのうちの一つでしょう。他のOSでコンパイラを書き構築したかマシン語をベースにそのマシーンで開発していったかのいずれかと思います。
Cコンパイラーをアセンブラー(又は機械語)で書いたと考えれば判りやすいでしょう。 そのCコンパイラーを使ってUNIXを書くのです。 実際には程度の低いコンパイラーを先に作ってこれを使ってCコンパイラーを作り そのCコンパイラーを使ってUNIXを書く方法もあります。
後者の方法はコンパイラー・コンパイラーと呼ばれる技術分野です。 文字通りコンパイラーを作るためのコンパイラーです。
余談ですが吊り橋にロープを渡す場合、まず細いワイヤーをヘリで渡し 段々太いワイヤーに取り替えて最後にロープを渡すのに似ています。