最初のコンパイラはどのように書かれたのですか?


166

鶏と卵とブートストラップについて聞いた。少し質問があります。

何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?

アセンブリはバイナリ命令にコンパイルまたは変換されていますか?

...彼らがコンパイラをバイナリで書いたとは信じがたい。



@nawfal、それは新しいプログラミング言語と最初のコンパイラの違いなので、違います-重複ではありません

@PauliSudarshanTerho違いは何ですか?質問の精神は同じです。プログラミング言語を書くことはできません。その問題は、最初のコンパイラーについて話しています。
nawfal

あなたの霊的想像力の中で?実際には、そのリンクの最初のコンパイラについては何も言及されていません。また、新しい言語を書く人にゼロから始めるようにアドバイスするべきではありません。もしそうなら、なぜ新しい言語を書くことが重要であるなら、最初のコンパイラがどのように書かれるかについての答えを隠したいのはなぜですか?

私から学ぶ-これは重複している:stackoverflow.com/questions/4772768/...

回答:


133

アセンブリ命令は、(一般的には)オペコードへの直接マッピングです。これは、プロセッサが直接解釈できるマシンコードの(マルチ)バイト値です。一致するアセンブリ命令とそれらをリストし、物事のメモリアドレス/オフセットを手動で決定するテーブル(たとえば、この6039マイクロプロセッサ用のもの)からプログラムを検索することにより、オペコードでプログラムを直接作成することはかなり可能です。ジャンプのように。

最初のプログラムは、まさにこの方法で行われました-手書きのオペコード。

ただし、ほとんどの場合、アセンブラを使用してこれらのオペコード検索を自動的に実行するアセンブリコードを「コンパイル」する方が簡単です。また、名前付きジャンプラベルなどのアドレス/オフセットの計算にも役立ちます。

最初のアセンブラは手動で作成されました。これらのアセンブラは、より複雑なアセンブラをアセンブルするために使用でき、さらに、高水準言語用に書かれたコンパイラをアセンブルするために使用できます。次の一連のツールの作成を簡略化するためにツールを繰り返し作成するこのプロセスは、(David Rabinowitzの回答で言及されているように)ブートストラップと呼ばれます。


18
私の最初のコンピューターはZ80ベースのマシンで、そのROMモニターでオペレーティングシステム(CP / M)の基本を起動するためにブートストラップローダーを手動で組み立てて、残りのオペレーティングシステムを作業システムに組み立てることができました。 、ディスクベースのブートストラップローダーを完備。楽しい時間。そう、そう、あなたはうまく手で組み立てることができます。それは遅くて苦痛でエラーが発生しやすい(それが私たちが自動化した理由です)が、それは可能です。
ちょうど私の正しい意見

最初のリンクが壊れています。
ルーク

手で書かれました。どうやって?カードの配線またはパンチング?16進数のキーパッドがあったと思います。


36

卵は長い間鶏に先行していました。ほとんどの「鶏と卵」の問題に対する答えは同じです。進化です。一部の人々は生物の進化を信じることにも問題がありますが、信じられないことは議論ではありません(グーグルの議論と無知)。

あなたの質問に直接答えるために:最初のコンパイラは(人間によって)アセンブリ言語で書かれました-アセンブラと呼ばれるプログラムは、アセンブリ言語をバイナリに変換します。アセンブリ言語は、数値ではなくオペコード名を使用したり、アドレスを記号で表現したりする機械語の単なる記号形式であるため、これはコンパイルよりもはるかに単純なプロセスです。その後のコンパイラの多くは、アセンブリ言語でも作成されました。しかし、最初のCコンパイラは、で書かれた修飾されたBコンパイラたB。最初のBコンパイラはTMGで作成されました。Bコンパイラをコンパイルするために使用されたTMGコンパイラは、PDP-7アセンブリ言語で記述されていました。


24

ウォズ氏は彼の公開講演の1つで、彼が始めたとき、彼にはコンパイラーを買う余裕がなかったので、紙に手書きでバイナリーにコンパイルしたと言った。もっとワイルドなものを見たい場合は、Bill GatesとPaul AllenがAltair 8800のBASICを書いた条件について読んでください

「コンピューターをバイナリーで書くこと」について-プログラマーから一歩下がって、初期のコンピューターが何であったかを考えてください。高レベルのものはまだ存在していませんでした。それがすべてだったので、低レベルのすべてを考えました。マシンコードを介して操作する基本的なロジックと演算を実行できるハードウェアがあり(これはコンパイルされたアセンブリです-アンバーは、この部分を手作業で実行するのが難しい理由を説明しています)、このハードウェアで特定の数学的な機能を実行する必要がありました。存在しないオペレーティングシステムについて心配する必要はありませんでした。ハードウェアに(アセンブリ内で)入力する数値を操作する方法を指示しただけです。それはちょうど大きな電卓でした。今日のコンピュータは、一度に1つの抽象概念で構築されました。

コンピュータを魔法のように保つ障壁を取り除きたい場合は、Charles Petzoldおよび/またはThe Elements of Computing Systemsのコードを読むことを強くお勧めします。プログラミングの基本的な知識だけで、これらのすばらしいアクセス可能な本は、コンピュータを上から下まで理解するようになります。明らかに、コンプを取得することはできません。サイエンス。または2冊の本でEEの学位を取得しましたが、正式なトレーニングを欠席した独学のプログラマーと言えるでしょう。これらの本は私の世界を揺るがしました!


2
売り込みを行った後、Altair BASIC通訳を作成しますか?飛行機に乗る際のブートストラップをアルバカーキにコーディングしますか?それはちょっとばかげているようです。そして、楽しいです。
Ehtesh Choudhury、2011

2
@シュラン:ha!これらの点も関連しますが、私にとっては、どのようにしてBASICインタープリターを作成し、グループがどのようにそれを小さなスペースに詰め込んだかについての骨の折れる点は、美しさと驚異的なプログラミング能力/ハッカーです。
ダイナ2011

10

何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?

人間がやった。A-0システムについて読む:

1952年、グレースホッパーは、A-0として知られるSperry向けの最初のコンパイラーを完成させました。A-0システムは、記号の数学コードを機械語に変換できる一連の命令でした。A-0の作成では、彼女は長年にわたって収集してきたすべてのサブルーチンを取り、それらをテープに入れました。各ルーチンには呼び出し番号が与えられたので、マシンはそれをテープで見つけることができました。「私がしなければならなかったのは、一連の呼び出し番号を書き留め、コンピューターがそれらをテープから見つけて持ち帰り、追加することだけでした。これが最初のコンパイラーでした」とGrace氏は述べています。


1
リンクは現在404のようですが、いずれの場合でも、上記の「グレース」はグレースホッパーです。
Volker Stolz

2
ホッパーが最初のコンパイラーを書いたと聞いたことがありますが、上記の説明により、コンパイラーよりもリンカーのように聞こえます。それでも、良い話。それは...コンピュータ科学者は、コンパイラの考え方に懐疑的だった時があったと思うために驚くべきことだ
マーク・E.ハーゼ

1
@mehaaseは、これが「コンパイラ」と呼ばれる理由です。ルーチンのコンパイルを行います。各ルーチンは(潜在的に)機械語で直接記述されています。
Elazar 2013年

@ MarkE.Haaseホッパーがここで言及したのは、特定の計算タスクにコンピューターを使用するアプリケーションエンジニアと科学者でした。彼らは「コンピューター科学者」ではなかった。1952年頃には少数のサイバネティックスがいましたが、彼女がそれらのいずれかに話をしたとは思えません。
ジムBalter

9

最初のプログラムは、マシンコード(アセンブリ言語ではなく)で記述されていました。実際の数値は、スイッチを使用してコンピューターのメモリに接続されています。私たちは長い道のりを歩んできました...

場合によっては、これはまだ小さな範囲で発生します-小さなコードのパッチを適用したり、サンクを作成したりします。初期のマイクロで小さくて高速なサブルーチンとして実行されたBasic文字列に数字を打ち込んだことを思い出します。また、PDP-11のフロントパネルにあるスイッチを切り替えて、ブートローダープログラムをメモリに入れて大学のコースに入るのを覚えています。

これらのプログラムは、他のプログラムを作成するためにテキストファイルを処理するために使用されることがあり、ほんの少しのプログラミング言語が作成されました。


問題は、プログラムが時々コンパイラーであるにもかかわらず、一般的な最初のプログラムではなく、最初のコンパイラーについてです。2つの歴史は同じではありません。(類推:最初の動物が地球上に現れたときの質問への答えは、最初の猫は猫は動物であるにもかかわらず、地球上に現れたときの質問への答えではありません)
ジム・Balter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.