コンパイラの誕生に興味があります。プログラミングはどのように始まりましたか?ある特定のコマンドセットを認識するハードウェアを最初に構築したのですか、それとも言語を定義してからその周辺のハードウェアを構築したのですか?また、関連するメモでは、最初のプログラミング言語は何でしたか?
コンパイラの誕生に興味があります。プログラミングはどのように始まりましたか?ある特定のコマンドセットを認識するハードウェアを最初に構築したのですか、それとも言語を定義してからその周辺のハードウェアを構築したのですか?また、関連するメモでは、最初のプログラミング言語は何でしたか?
回答:
実際、これには非常に明確な答えがあります。ソースコードが最初に来たのです。
技術的な詳細を説明する前に、少し視点を示します。
最初のプログラミング言語はすべて手作業で機械言語またはアセンブラに翻訳されました。ソフトウェアを使用してこの翻訳を自動化するというアイデアは(コンパイラまたはエバリュエーターを介して)常に出てきており、直観的とはほど遠いものでした。
FORTRANに関するウィキペディアの記事の引用を検討してください。これは、コンパイラーが直面しなければならない不本意を示しています。
…1957年4月に最初のFORTRANコンパイラが提供されました。これは最初の最適化コンパイラでした。なぜなら、コンパイラがハンドコーディングアセンブリ言語に匹敵するコードを生成できない限り、高レベルプログラミング言語の使用に消極的だったためです。[強調鉱山]
=> FORTRANコンパイラが市場に登場する頃(1957年)には、人々はすでにアセンブリ言語とFORTRANの両方で喜んでプログラミングをしていました。
ケースはLISPでも同様でした(Hackers&Paintersから)。
スティーブラッセルは、この評価をプログラムしてみてはどうだろう、と言った。そして、私は彼に言った、ホ、ホ、あなたは理論と実践を混同している。しかし、彼は先に進み、それをやった。つまり、彼は私の論文のevalをIBM 704マシンコードにコンパイルし、バグを修正してから、これをLispインタープリターとして宣伝しました。それで、その時点で、Lispは本質的に今日の形をしていました...」
繰り返しになりますが、(LISPの)ソースコードがインタープリターに先行するだけでなく、インタープリターは前者では暗黙的でさえありませんでした。
しかし、これらの開発は比較的遅れています。Charles BabbageのAnalytical EngineとAda Lovelaceの関連する最初のプログラムを考慮していなかったとしても、20世紀にはコンパイラーに先行するプログラミング言語がありました。
Konrad ZuseのPlankalkülおよびAlonzo Churchによって導入されたλ計算の数学的構造。どちらも間違いなく正式に指定されたプログラミング言語ですが、当時はどちらもコンパイラを持っていませんでした。
大局的にこれを配置するには、λ計算は1930年代からで、プランカルキュールは対照的に、1945年を中心に開発された、最初のFORTRANコンパイラは(3年、再びが、1957年に出てきた後に FORTRANが指定されました)。
プログラミングは、人々がマシンコードをメモリに直接、パンチカードや紙テープに、またはパッチパネルのリンクを短絡させることから始まりました。ハードウェアがソフトウェアのニーズに基づいて構築されたのか、その逆であるのかを判断するのは困難です。確かに、チュービング完全なプログラム可能なコンピューター、バベッジの分析エンジンの最も初期の設計は、エイダ・ラブレースの最初の文書化されたプログラムよりも前のものです。
最初のプログラミング言語については、それがバベッジの分析エンジンの機械語であると主張しました(コンピューター用に書かれた最初のプログラミング言語は何ですか?)
質問のタイトルの質問に答えるために、アセンブリ言語はソースコードであり、アセンブリ言語はアセンブラーにコンパイルできる高レベル言語より前の日付であるため、ソースコードが最初に来ました。
また、コンパイラーは必要なく、便利です。
適切なオペコードテーブルを記憶していれば、ソフトウェアをメモリに直接書き込むことは完全に可能です。実際、初期のコンピューターの中には、ユーザーがフロントパネルの16進キーパッドでブートストラップコードを打ち込んでブートする必要がありましたが、好きなコードをタップして実行することができました。
確かにCPUがより複雑になるにつれて、これはより難しくなりますが、6809やZ80(すべての奇妙なインデックスモードを無視する)のような単純な命令セットは、高レベル言語のコンパイラはもちろん、アセンブラーがなくても比較的簡単にプログラムできます。
Babbageの分析エンジンがこれまでに構築されていた場合、最適化されたプログラムを織機カードに直接書き込むスチームパンクメルがあったはずです。
movl $0, -20(%rbp)
であるのに対して、マシンコードはC745EC00000000
であり、最初に手動で入力または紙テープから読み取られたのは後者(まあ、それに似たもの)です。マシンコードがソースコードとしてカウントされるかどうかについては、「あなたのボートを浮かせるものは何でも」と言いたいです。手動で切り替える場合は、そうだと思います。
コンパイラーが最初でした。ソースはコンパイラなしではコンパイルできないため、マシンコードで直接記述されました。
このようなコンピューター言語に関するウィキペディアの記事は、ほとんどの質問に答えることができます。そうでない場合は、Stannedbaumの本の1つを選んでください。StructuredComputer Organizationのように、尋ねることができる以上の質問に答えることができます:)
あなたの質問が広すぎるので、私はより具体的なことを言うことはできません。
この質問は、「ソースコード」のセマンティック解釈に大きく影響します。「コンパイルされたテキストベースのコンピューター命令」として定義する場合、おそらくコンパイラーが最初に来ました。
ソースコード分析と操作に関する第10回IEEE国際作業会議で発表されたマークハーマンの論文「なぜソースコード分析と操作が常に重要になるのか」など、もっと権威のあるものに興味があります。
定義1(ソースコード):明確にするために、「ソースコード」は、ソフトウェアシステムの完全に実行可能な記述を意味します。したがって、マシンコード、非常に高レベルの言語、およびシステムの実行可能なグラフィカル表現を含むように解釈されます。
そして、あなたの答えはその定義に暗示されていると思います-最も確かにソースコードが最初に来ました。
アルゴリズムは紙の上で整理され、次にアルスは物理的/機械的に配線されました(ワイヤを移動)。プログラムを変更するには、ワイヤを移動して再度実行します。
その後、アセンブリ言語が紙で整理され、手作業でマシンコードに翻訳され、スイッチなどを使用してラムに供給されました。または、パンチカードなど。最終的にはアセンブラを作成し、マシンコードではなくアセンブリでプログラムできます。その後、コンパイラを作成できます。最終的には、そのコンパイラをブートストラップできます。そして、新しい言語や新しいコンパイラなどを作成します。
最初の言語は言語ではなく、後に最初の言語はアセンブリ言語でした。すべてのプロセッサで、最初の言語はアセンブリ言語です(マシンコードから派生)。命令セットが最初に設計され、次にそれを実装するハードウェアが設計され、次にアセンブラー、コンパイラーが設計されます。