最初に来たのは、コンパイラーですか、それともソースですか?


17

コンパイラの誕生に興味があります。プログラミングはどのように始まりましたか?ある特定のコマンドセットを認識するハードウェアを最初に構築したのですか、それとも言語を定義してからその周辺のハードウェアを構築したのですか?また、関連するメモでは、最初のプログラミング言語は何でしたか?




確かにこれはあなたが調べることができるものですか?
カレブ

SkyDanの答えにコメントを読ん@Caleb ...
デヴィッド・コーデンに

2
@Brian有効な仮定ですが、間違っていることが判明しました。それは鶏卵問題ではありません。非常に明確な答えがあります(ヒント:以下の最も高い投票が間違っています)。ソースコードはコンパイラよりもずっと前から存在します。
コンラッドルドルフ

回答:


30

実際、これには非常に明確な答えがあります。ソースコードが最初に来たのです。

技術的な詳細を説明する前に、少し視点を示します。

最初のプログラミング言語はすべて手作業で機械言語またはアセンブラに翻訳されました。ソフトウェアを使用してこの翻訳を自動化するというアイデアは(コンパイラまたはエバリュエーターを介して)常に出てきており、直観的とはほど遠いものでした。

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が指定されました)。


素晴らしい答えです!以前は手作業でコンパイルされたコードを知りませんでしたが、それは理にかなっています。
ckb

10

プログラミングは、人々がマシンコードをメモリに直接、パンチカードや紙テープに、またはパッチパネルのリンクを短絡させることから始まりました。ハードウェアがソフトウェアのニーズに基づいて構築されたのか、その逆であるのかを判断するのは困難です。確かに、チュービング完全なプログラム可能なコンピューター、バベッジの分析エンジンの最も初期の設計は、エイダ・ラブレースの最初の文書化されたプログラムよりも前のものです。

最初のプログラミング言語については、それがバベッジの分析エンジンの機械語であると主張しました(コンピューター用に書かれた最初のプログラミング言語は何ですか?

質問のタイトルの質問に答えるために、アセンブリ言語ソースコードであり、アセンブリ言語はアセンブラーにコンパイルできる高レベル言語より前の日付であるため、ソースコードが最初に来ました。

また、コンパイラー必要なく、便利です。

適切なオペコードテーブルを記憶していれば、ソフトウェアをメモリに直接書き込むことは完全に可能です。実際、初期のコンピューターの中には、ユーザーがフロントパネルの16進キーパッドでブートストラップコードを打ち込んでブートする必要がありましたが、好きなコードをタップして実行することができました。

確かにCPUがより複雑になるにつれて、これはより難しくなりますが、6809Z80(すべての奇妙なインデックスモードを無視する)のような単純な命令セットは、高レベル言語のコンパイラはもちろん、アセンブラーがなくても比較的簡単にプログラムできます。

Babbageの分析エンジンがこれまでに構築されていた場合、最適化されたプログラムを織機カードに直接書き込むスチームパンクメルがあったはずです。


1
投稿したウィキペディアのリンクで、ソースコードの定義を実際に読みましたか?上記のように、マシンコードはソースコードではありません。マシンコード!=アセンブリ。最初にマシンコードがありました。
オクルス

私は、MIPSを考えるとAVRは..でも簡単です@MarkBooth
デヴィッド・コーデン

4
@occulus -どのような方法ではあるアセンブリ言語ではないソースコード?アセンブリ言語は、1つのアセンブリ言語命令を1つのマシンコードにマップし、opコードテーブルを知っていれば、簡単に頭の中で組み立てることができます。正直、最近の子供たち... * 8 ')
マークブース

1
私にとって、アセンブリ言語movl $0, -20(%rbp)であるのに対して、マシンコードC745EC00000000であり、最初に手動で入力または紙テープから読み取られたのは後者(まあ、それに似たもの)です。マシンコードソースコードとしてカウントされるかどうかについては、「あなたのボートを浮かせるものは何でも」と言いたいです。手動で切り替える場合は、そうだと思います。
ジョンボード

@JohnBode-ああ、同意しますが、アセンブリ命令とマシンコード命令の1:1の対応を考えると、アセンブリは機械翻訳(アセンブリ)の問題であり、ロジックは同じです。コンパイルは、はるかに複雑な多くの翻訳を意味します(Occamは高レベル言語であり、多くのOccamステートメントは、MISCアーキテクチャによりTransputer命令に1:1でマップされます。* 8 ')。
マークブース

6

コンパイラーが最初でした。ソースはコンパイラなしではコンパイルできないため、マシンコードで直接記述されました。

このようなコンピューター言語に関するウィキペディアの記事は、ほとんどの質問に答えることができます。そうでない場合は、Stannedbaumの本の1つを選んでください。StructuredComputer Organizationのように、尋ねることができる以上の質問に答えることができます:)

あなたの質問が広すぎるので、私はより具体的なことを言うことはできません。


20
また、最初の「コンピューター」の場合、ソースはバイナリと同等であったため(つまり、機械可読言語で直接プログラムされていたため)、ソースが最初であると主張することもできます。
ヨアヒムザウアー

5
@Joachim定義によると、ソースコードは、コンパイラーによってマシンコードに変換される人間が読み取れるテキストです。したがって、マシンコード自体はソースコードではありません。
SkyDan

11
コンパイラは最初でしたが、生物学的ニューラルネットワークに実装されました。
デン

8
なぜこれが非常に投票されているのですか?それは間違っています。高レベル言語(特にλ-calculus、Plankalkül、LISP)のソースコードは、コンパイラとインタプリタの両方よりもずっと前から存在していました。これは、エイダ・ラブレースが書いたセミフォーマルなプログラムさえ考慮に入れていません。
コンラッドルドルフ

4
@SkyDanあなたの定義は何ですか?あなたの答えが正しい賢明な定義はありません(「コンパイラ」と「高レベル言語のソースコード」の両方-低レベルは言うまでもありません)。
コンラッドルドルフ

4

通訳者はコンパイラの前に存在したため、ソースコードはコンパイラの前に存在しました。

ここにコンピューティングの歴史に関するいくつかの非常におもしろい論文があります。FORTRAN IIコンパイラのソースコードは利用可能であるはずですが、それらのリンクは壊れています。

この論文は、1954年から、Whirlwhindインタープリターについて説明しています。


1

この質問は、「ソースコード」のセマンティック解釈に大きく影響します。「コンパイルされたテキストベースのコンピューター命令」として定義する場合、おそらくコンパイラーが最初に来ました。

ソースコード分析と操作に関する第10回IEEE国際作業会議で発表されたマークハーマンの論文「なぜソースコード分析と操作が常に重要になるのか」など、もっと権威のあるものに興味があります。

定義1(ソースコード):明確にするために、「ソースコード」は、ソフトウェアシステムの完全に実行可能な記述を意味します。したがって、マシンコード、非常に高レベルの言語、およびシステムの実行可能なグラフィカル表現を含むように解釈されます。

そして、あなたの答えはその定義に暗示されていると思います-最も確かにソースコードが最初に来ました。


「おそらくコンパイラが最初に来た」-「手作業でマシンコードに翻訳する」のではなく、「自動ツールで翻訳する」と「コンパイルする」を定義した場合のみ。
コンラッドルドルフ

非常に興味深い論文。ソースコードのその定義が好きです-それは私の質問を本当に非質問にしますが..
David Cowden

@KonradRudolphは、「コンパイラ」と呼ばれる、機械、人間、または神の介入であろうと、コンパイルを実行するユニットではありませんか?
カークブロードハースト

0

アルゴリズムは紙の上で整理され、次にアルスは物理的/機械的に配線されました(ワイヤを移動)。プログラムを変更するには、ワイヤを移動して再度実行します。

その後、アセンブリ言語が紙で整理され、手作業でマシンコードに翻訳され、スイッチなどを使用してラムに供給されました。または、パンチカードなど。最終的にはアセンブラを作成し、マシンコードではなくアセンブリでプログラムできます。その後、コンパイラを作成できます。最終的には、そのコンパイラをブートストラップできます。そして、新しい言語や新しいコンパイラなどを作成します。

最初の言語は言語ではなく、後に最初の言語はアセンブリ言語でした。すべてのプロセッサで、最初の言語はアセンブリ言語です(マシンコードから派生)。命令セットが最初に設計され、次にそれを実装するハードウェアが設計され、次にアセンブラー、コンパイラーが設計されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.