web-dev-qa-db-ja.com

コンパイラ、それともソースですか?

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

17
David Cowden

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

技術的な詳細を説明する前に、少し見解:

最初のプログラミング言語はallが手動で機械語またはアセンブラーに変換されました。ソフトウェアを使用してこの翻訳を(コンパイラまたはエバリュエータを介して)自動化するというアイデアは常に後から出てきたものであり、直感的ではありませんでした。

[〜#〜] fortran [〜#〜] に関するWikipediaの記事の次の引用を検討してください。これは、コンパイラが直面しなければならない抵抗を示しています。

…1957年4月に最初のFORTRANコンパイラが提供されました。これは、の顧客が高レベルのプログラミング言語を使用することに消極的だったためです。手動でコード化されたアセンブリ言語のそれ。[強調鉱山]

=> FORTRANコンパイラが市場に出回るまで(1957年)、人々はすでにアセンブリ言語とFORTRANの両方で幸福にプログラミングしていました。

[〜#〜] lisp [〜#〜] の場合も同様でした(fromHackers&Painters):

スティーブラッセルは言った、見て、なぜ私はこのevalをプログラムしないのか…そして私は彼に言った、ほら、ほら、あなたは理論と実践を混同している、このevalは計算のためではなく読むためのものです。しかし、彼は先に進んでそれをしました。つまり、彼は私の論文の評価をIBM 704マシンコードにコンパイルし、バグを修正してから、これをLISPインタープリターとして宣伝しました。したがって、その時点で、LISPは基本的に現在の形式になっています...」

繰り返しになりますが、(LISPの)ソースコードはインタープリターよりも前に存在するだけでなく、後者は前者にも暗黙的ではありませんでした。

しかし、これらの開発は比較的遅れています。 Charles Babbageの Analytical Engine とAda Lovelaceの関連 first program を考慮していなくても、20世紀にはコンパイラよりも古いプログラミング言語がありました。

Konrad Zuseの Plankalkül および λ-calculus の数学的構造は、Alonzo Churchによって導入されました。これらはどちらも間違いなく正式に指定されたプログラミング言語ですが、当時はどちらもコンパイラがありませんでした。

これを展望すると、λ計算は1930年代のもので、プランカルキュルは1945年頃に開発されました。対照的に、最初のFORTRANコンパイラは1957年に登場しました(ただし、3年後 FORTRANが指定された)。

30
Konrad Rudolph

プログラミングは、機械のコードをメモリ、パンチされたカード、紙のテープ、またはパッチパネルのショートリンクに直接書き込むことから始まりました。ハードウェアがソフトウェアのニーズに基づいて構築されたのか、またはその逆で構築されたのかはわかりにくいです。確かに turing complete プログラム可能なコンピューター、Babbageの 分析エンジン 、最も古いAda Lovelaceの 最初に文書化されたプログラム の最も初期の設計。

最初のプログラミング言語について 私は議論しました それはバベッジの分析エンジンの機械語であったと(質問 コンピュータ用に書かれた最初のプログラミング言語は何でしたか?

アセンブリ言語ソースコード であり、アセンブリ言語のプレデート 高水準言語 であるため、質問のタイトルの質問に回答するには、コンパイルできますアセンブラでは、ソースコードが最初に来ました。

また、 コンパイラ は、必要になったことはありません、便利です。

適切な op-code テーブルを覚えていれば、ソフトウェアをメモリに直接書き込むことは完全に可能です。実際、一部の初期のコンピューターでは、ユーザーがbootstrapコードをフロントパネルで起動する hex keypad )で起動する必要がありましたが、任意のコードを使用できました。あなたが好きで、それが実行されます。

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

Babbageの分析エンジンが構築されたことがあれば、最適化されたプログラムを織機カードに直接書き込む steampunk Mel があったはずです。

10
Mark Booth

コンパイラはfirstでした。ソースはコンパイラなしではコンパイルできなかったので、それはマシンコードで直接書かれました。

これ のようなウィキペディアの記事では、コンピューター言語についての質問のほとんどに答えることができます。そうでない場合は、 Structured Computer Organization のようなTanenbaumの本を1つ選んでください。これにより、質問するよりも多くの質問に答えることができます:)

質問が広すぎるため、これ以上具体的なことは言えません。

6
hellodanylo

インタープリターはコンパイラーの前に存在したため、ソースコードはコンパイラーの前に存在していました。

コンピューティングの歴史について非常に興味深い論文がいくつかあります here 。 FORTRAN IIコンパイラのソースコードは利用できるはずですが、これらのリンクは壊れています。

この論文 (1954年以降)は、Whirlwhindインタプリタについて説明しています。

4
Jon Strayer

この質問は、「ソースコード」のセマンティック解釈に強く依存しています。それを「コンパイルされたテキストベースのコンピュータ命令」と定義すると、おそらくコンパイラが最初に来るでしょう。

Mark Harmanの論文「Why Source Code Analysis and Manipulation Is Always Important is Always Important」 ---で発表された、より権威あるものを使う傾向があります 第10回IEEE国際ワーキングカンファレンスソース)コード分​​析と操作

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

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

1
Kirk Broadhurst

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

その後、アセンブリ言語は紙で分類され、手動で機械語に変換され、スイッチなどを使用してRAMに供給されました。またはパンチカードなど。最終的にはアセンブラを作成し、マシンコードではなくアセンブリでプログラムすることができ、その後コンパイラを作成することができます。最終的には、bootstrapそのコンパイラを使用できます。そして、新しい言語や新しいコンパイラなどを作成します。

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

0
old_timer