鶏と卵とブートストラップについて聞いた。少し質問があります。
何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?
アセンブリはバイナリ命令にコンパイルまたは変換されていますか?
...彼らがコンパイラをバイナリで書いたとは信じがたい。
鶏と卵とブートストラップについて聞いた。少し質問があります。
何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?
アセンブリはバイナリ命令にコンパイルまたは変換されていますか?
...彼らがコンパイラをバイナリで書いたとは信じがたい。
回答:
アセンブリ命令は、(一般的には)オペコードへの直接マッピングです。これは、プロセッサが直接解釈できるマシンコードの(マルチ)バイト値です。一致するアセンブリ命令とそれらをリストし、物事のメモリアドレス/オフセットを手動で決定するテーブル(たとえば、この6039マイクロプロセッサ用のもの)からプログラムを検索することにより、オペコードでプログラムを直接作成することはかなり可能です。ジャンプのように。
最初のプログラムは、まさにこの方法で行われました-手書きのオペコード。
ただし、ほとんどの場合、アセンブラを使用してこれらのオペコード検索を自動的に実行するアセンブリコードを「コンパイル」する方が簡単です。また、名前付きジャンプラベルなどのアドレス/オフセットの計算にも役立ちます。
最初のアセンブラは手動で作成されました。これらのアセンブラは、より複雑なアセンブラをアセンブルするために使用でき、さらに、高水準言語用に書かれたコンパイラをアセンブルするために使用できます。次の一連のツールの作成を簡略化するためにツールを繰り返し作成するこのプロセスは、(David Rabinowitzの回答で言及されているように)ブートストラップと呼ばれます。
コンパイラのブートストラップとコンパイラの作成の歴史について読んでください
非常に単純なコンパイラーを直接マシンコードで記述し、それを使用してより高度なコンパイラーを記述し、2番目のコンパイラーを使用して3番目のコンパイラーを構築するなど、フル機能のコンパイラーが完成するまで続きます。
卵は長い間鶏に先行していました。ほとんどの「鶏と卵」の問題に対する答えは同じです。進化です。一部の人々は生物の進化を信じることにも問題がありますが、信じられないことは議論ではありません(グーグルの議論と無知)。
あなたの質問に直接答えるために:最初のコンパイラは(人間によって)アセンブリ言語で書かれました-アセンブラと呼ばれるプログラムは、アセンブリ言語をバイナリに変換します。アセンブリ言語は、数値ではなくオペコード名を使用したり、アドレスを記号で表現したりする機械語の単なる記号形式であるため、これはコンパイルよりもはるかに単純なプロセスです。その後のコンパイラの多くは、アセンブリ言語でも作成されました。しかし、最初のCコンパイラは、で書かれた修飾されたBコンパイラたB。最初のBコンパイラはTMGで作成されました。Bコンパイラをコンパイルするために使用されたTMGコンパイラは、PDP-7アセンブリ言語で記述されていました。
ウォズ氏は彼の公開講演の1つで、彼が始めたとき、彼にはコンパイラーを買う余裕がなかったので、紙に手書きでバイナリーにコンパイルしたと言った。もっとワイルドなものを見たい場合は、Bill GatesとPaul AllenがAltair 8800のBASICを書いた条件について読んでください。
「コンピューターをバイナリーで書くこと」について-プログラマーから一歩下がって、初期のコンピューターが何であったかを考えてください。高レベルのものはまだ存在していませんでした。それがすべてだったので、低レベルのすべてを考えました。マシンコードを介して操作する基本的なロジックと演算を実行できるハードウェアがあり(これはコンパイルされたアセンブリです-アンバーは、この部分を手作業で実行するのが難しい理由を説明しています)、このハードウェアで特定の数学的な機能を実行する必要がありました。存在しないオペレーティングシステムについて心配する必要はありませんでした。ハードウェアに(アセンブリ内で)入力する数値を操作する方法を指示しただけです。それはちょうど大きな電卓でした。今日のコンピュータは、一度に1つの抽象概念で構築されました。
コンピュータを魔法のように保つ障壁を取り除きたい場合は、Charles Petzoldおよび/またはThe Elements of Computing Systemsのコードを読むことを強くお勧めします。プログラミングの基本的な知識だけで、これらのすばらしいアクセス可能な本は、コンピュータを上から下まで理解するようになります。明らかに、コンプを取得することはできません。サイエンス。または2冊の本でEEの学位を取得しましたが、正式なトレーニングを欠席した独学のプログラマーと言えるでしょう。これらの本は私の世界を揺るがしました!
何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?
人間がやった。A-0システムについて読む:
1952年、グレースホッパーは、A-0として知られるSperry向けの最初のコンパイラーを完成させました。A-0システムは、記号の数学コードを機械語に変換できる一連の命令でした。A-0の作成では、彼女は長年にわたって収集してきたすべてのサブルーチンを取り、それらをテープに入れました。各ルーチンには呼び出し番号が与えられたので、マシンはそれをテープで見つけることができました。「私がしなければならなかったのは、一連の呼び出し番号を書き留め、コンピューターがそれらをテープから見つけて持ち帰り、追加することだけでした。これが最初のコンパイラーでした」とGrace氏は述べています。
最初のプログラムは、マシンコード(アセンブリ言語ではなく)で記述されていました。実際の数値は、スイッチを使用してコンピューターのメモリに接続されています。私たちは長い道のりを歩んできました...
場合によっては、これはまだ小さな範囲で発生します-小さなコードのパッチを適用したり、サンクを作成したりします。初期のマイクロで小さくて高速なサブルーチンとして実行されたBasic文字列に数字を打ち込んだことを思い出します。また、PDP-11のフロントパネルにあるスイッチを切り替えて、ブートローダープログラムをメモリに入れて大学のコースに入るのを覚えています。
これらのプログラムは、他のプログラムを作成するためにテキストファイルを処理するために使用されることがあり、ほんの少しのプログラミング言語が作成されました。