web-dev-qa-db-ja.com

最初のCコンパイラはどのように書かれましたか?

最初のCコンパイラがC自体で書かれているのは本当ですか?次に、どのように実行およびコンパイルされましたか?または、このコンパイラはアセンブリ言語で書かれていましたか?

48
Jaskaran S.P

これは、C言語の歴史の Dennis Ritchieの記事 でかなりよく説明されています。

彼がそこに書いたものの要約だけを与えて、彼の記事をより詳細に使ってください。 CはBCPL言語で始まり、ケントムソンはGeneral Electrics 635のメインフレームで実行されるコンパイラにアクセスできました。 Thomsonはこの言語に不満を持っていたため、BCPLを使用してB言語用のコンパイラを作成しました。

彼らはBを使用してPDP-7ミニコンピューターでプログラムを作成しましたが、それらのほとんどはおもちゃのプログラムにすぎませんでしたが、マシンのハードウェア機能は非常に制限されていました。 Thomsonがとった重要なステップの1つは、BコンパイラをB自体に書き直すことでした。一般的なブートストラップ手順。

このコンパイラは、NB(New B)と呼ばれる短命の中間ステップを介して、Cに似たものを開始するために徐々に調整されました。PDP-11ミニコンピューターは、言語とコンパイラを改善します。

74
Hans Passant

最初のCコンパイラはCで書かれていませんでした。通常、コンパイラを書くときは、アセンブリ言語または別のプログラミング言語を使用します。最初のコンパイル後、コンパイラはネイティブ言語で書き換えられるのが一般的です。

Cで書かれてから母国語で書き直されたプログラミング言語がたくさんあります:Java例えばAda ...

19

primevalC に関するDennis Ritchieのメモを読むと、Cが鶏肉と卵のように、前駆言語から進化したことを示しています独自のコンパイラと共にブートストラップを介して。種分化のタイムスケールは、Gallus gallus domesticusよりも迅速でした。

進化の混乱の中で捕らえられたコンパイラのソースコードさえ見ることができます。メモは、テープバックアップから復元された2つのスナップショットにリンクしています。このコードには githubに配置されています これらのスナップショットは、K&R構文の数年前の中間化石を構成しています。テープの1つに関するデニスの説明は、ブートストラップされる構造体のフリーズフレームであることを示しています。

「prestruct-c」は、構造自体を使用するように変更を開始する直前のコンパイラのコピーです。

言い換えると、コンパイラはsupport structsに拡張されていましたが、まだse structsではありませんでした。テープバックアップを作成する良い機会です...

4
egyik