プログラミング言語の歴史は、初期の機械式コンピュータのドキュメントから現代のソフトウェア開発ツールまで多岐にわたります。初期のプログラミング言語は高度に専門化されており、数学的記法や同様に難解な構文に依存していました。[ 1 ] 20世紀を通じて、コンパイラ理論の研究により、命令を伝えるために、より分かりやすい構文を使用する高水準プログラミング言語が作られました。
最初の高水準プログラミング言語は、 1942年から1945年にかけてコンラート・ツーゼによって作成されたPlankalkülです。 [ 2 ]コンパイラが付属した最初の高水準言語は、1951年にコラード・ベームが博士論文のために作成しました。[ 3 ]商用利用可能な最初の言語は、 IBMのジョン・バッカス率いるチームによって 1956 年に開発されたFORTRAN (FORmula TRANslation) です (最初のマニュアルは 1956 年に発行されましたが、最初に開発されたのは 1954 年です) 。
1842年から1849年にかけて、エイダ・ラブレスは、イタリアの数学者ルイージ・メナブレアによるチャールズ・バベッジの最新の提案機械である解析機関に関する回想録を翻訳した。彼女は回想録に、解析機関を用いてベルヌーイ数を計算する方法を詳細に説明した注釈を付け加えた。これは、ほとんどの歴史家によって世界初の公開されたコンピュータプログラムとして認められている。[ 4 ]
ジャカード織機とチャールズ・バベッジの差分機関はどちらもパンチカードを利用するように設計されており、[ 5 ] [ 6 ]プログラム可能な機械が実行すべき操作のシーケンスを記述するものでした。
初期のコンピュータコードは、それぞれの用途に合わせて特化されていた。例えば、アロンゾ・チャーチはラムダ計算を数式で表現することができ、チューリングマシンはテープマーキングマシンの動作を抽象化したものであった。
1940年代、現代的と呼べる最初の電気駆動型コンピュータが誕生した。しかし、処理速度とメモリ容量が限られていたため、プログラマーは手作業で調整したアセンブリ言語プログラムを記述せざるを得なかった。やがて、アセンブリ言語でのプログラミングには多大な知的労力が必要であることが認識されるようになった。
高水準プログラミング言語の初期の提案としては、コンラート・ツーゼが1942年から1945年にかけて自身のZ1コンピュータ向けに開発したPlankalkülがあったが、当時は実装されなかった。[ 7 ]
コンピュータに命令を伝えるために設計された最初の実用的なプログラミング言語は、1950年代初頭に作成されました。 1949年に提案されたジョン・モークリーのショートコードは、電子コンピュータ用に開発された最初の高水準言語の1つでした。[ 8 ]機械語とは異なり、ショートコードのステートメントは、数学的表現を理解可能な形式で表現しました。しかし、プログラムは実行されるたびに機械語に解釈する必要があり、同等の機械語を実行するよりもはるかに遅いプロセスでした。
1950年代初頭、マンチェスター大学でアリック・グレニーが、おそらく最初のコンパイル型プログラミング言語であるAutocodeを開発した。1954年には、 RAブルッカーがMark 1向けに「Mark 1 Autocode」として知られるこの言語の第2版を開発した。ブルッカーはマンチェスター大学とともに、 1950年代にフェランティ・マーキュリー向けのオートコードも開発した。EDSAC 2版は、1961年にケンブリッジ大学数学研究所のダグラス・ハートリーによって考案された。EDSAC 2 Autocodeとして知られるこのバージョンは、マーキュリー・オートコードから直接発展したもので、現地の状況に合わせて調整されており、当時としては先進的なオブジェクトコード最適化とソース言語診断で注目された。同時期に、しかし別の開発の流れとして、マンチェスター大学のAtlas 1マシン向けにAtlas Autocodeが開発された。
1954年、 IBMでジョン・バッカス率いるチームによってFORTRANが発明されました。これは、紙上の設計のみであった従来の言語とは異なり、機能的な実装を持つ最初の広く使用された高水準汎用言語でした。[ 9 ] [ 10 ] FORTRANが最初に導入されたとき、バグ、開発の遅延、アセンブリ言語で書かれた「手書き」プログラムの効率性などから、懐疑的に見られました。[ 11 ]しかし、急速に進化するハードウェア市場において、この言語は最終的にその効率性で知られるようになりました。現在でも高性能コンピューティングで人気のある言語であり[ 12 ]、世界最速のスーパーコンピュータTOP500のベンチマークとランキングを行うプログラムに使用されています。[ 13 ]
もう一つの初期のプログラミング言語は、米国でグレース・ホッパーによって考案されたFLOW-MATICです。これは、1955年から1959年にかけてレミントン・ランドでUNIVAC I向けに開発されました。ホッパーは、ビジネスデータ処理の顧客が数式表記に抵抗があることに気づき、1955年初頭に彼女と彼女のチームは英語のプログラミング言語の仕様書を作成し、プロトタイプを実装しました。[ 14 ] FLOW-MATICコンパイラは1958年初頭に一般公開され、1959年にはほぼ完成しました。[ 15 ]当時使用されていたのはFlow-Maticとその直接の子孫であるAIMACOだけであったため、Flow-MaticはCOBOLの設計に大きな影響を与えました。 [ 16 ]
現在も使用されている言語には、ジョン・マッカーシーが発明したLISP(1958年)や、ショートレンジ委員会が作成したCOBOL (1960年)などがある。1950年代後半のもう一つの重要な出来事は、アメリカとヨーロッパのコンピュータ科学者からなる委員会が「アルゴリズムのための新しい言語」を発表したことである。それがALGOL 60レポート(「アルゴリズム言語」)である。このレポートは当時流通していた多くのアイデアを統合し、3つの重要な言語革新を特徴としていた。
これに関連するもう一つの革新は、言語の記述方法にあった。
ALGOL 60は、後のプログラミング言語の設計に特に大きな影響を与え、その中にはすぐに普及した言語もあった。バローズ社の大型システムは、ALGOLの拡張サブセットでプログラミングできるように設計されていた。
ALGOLの主要なアイデアは引き継がれ、ALGOL 68が誕生した。
ALGOL 68には、並行処理や並列処理といったあまり使われない言語機能が数多く存在し、複雑な構文ショートカットや自動型変換システムも相まって、実装者からは不評で、扱いにくい言語という評判を得てしまった。実際、ニクラウス・ヴィルトは設計委員会を離脱し、よりシンプルなPascal言語を開発した。
この時期に発展した注目すべき言語には以下のようなものがある。
1960年代後半から1970年代後半にかけては、プログラミング言語が大きく発展した時期でした。現在広く使われている主要な言語パラダイムのほとんどは、この時期に考案されたものです。
これらの言語はそれぞれ、数多くの派生言語を生み出し、現代のほとんどの言語は、少なくともそのうちの1つを祖先に持つ。
1960年代と1970年代には、「構造化プログラミング」のメリットについてもかなりの議論が交わされました。これは基本的に、構文を使わないプログラミングを意味していましたgoto。多くのプログラマーは、構文を提供する言語であってもgoto、ごくまれな場合を除いて構文を使うのは悪いプログラミングスタイルだと考えていました。この議論は言語設計と密接に関係していました。構文を持たない言語もありgoto、それが構造化プログラミングの使用を余儀なくさせたのです。
コンパイル時間をさらに短縮するために、一部の言語は「ワンパスコンパイラ」向けに設計されており、パスカルのように、メインルーチン(ドライバ関数)がプログラムリストの最後のセクションとして定義され、下位ルーチンが最初に定義されることを想定している。
この時期に発展した注目すべき言語には以下のようなものがある。
1980年代は、命令型言語が比較的統合された時代でした。これらの動きはすべて、新しいパラダイムを生み出すのではなく、前の10年間に考案されたアイデアを発展させたものでした。C ++はオブジェクト指向プログラミングとシステムプログラミングを融合させました。米国政府は、防衛関連企業での使用を目的としたシステムプログラミング言語であるAdaを標準化しました。日本をはじめとする各国では、論理プログラミング構造を取り入れたいわゆる第5世代プログラミング言語の研究に莫大な資金が費やされました。関数型言語コミュニティは、MLとLispの標準化に取り組みました。遅延評価を備えた関数型言語であるMirandaの研究も、この10年間で本格化しました。
言語設計における重要な新しいトレンドの一つは、モジュール、つまり大規模なコード構成単位を用いることで、大規模システム向けのプログラミングに重点を置くようになったことである。Modula、Ada、MLはいずれも1980年代に注目すべきモジュールシステムを開発した。モジュールシステムは、ジェネリックプログラミング構造と密接に結びついていた。ジェネリックとは、本質的にはパラメータ化されたモジュールである(ポリモーフィズム(コンピュータサイエンス)も参照)。
命令型プログラミング言語において、新たなパラダイムが確立されることはなかったものの、多くの研究者が既存の言語のアイデアを発展させ、新たな状況に合わせて適用した。例えば、ArgusシステムやEmeraldシステムの言語は、オブジェクト指向プログラミングを分散コンピューティングシステムに適用したものである。
1980年代には、プログラミング言語の実装においても大きな進歩が見られた。コンピュータアーキテクチャにおけるRISC(Reduced Instruction Set Computer )運動は、ハードウェアは人間のアセンブリプログラマー向けではなく、コンパイラ向けに設計されるべきだと提唱した。CPU(中央処理装置)の速度向上によって、より高度なコンパイル手法が可能になったことも相まって、RISC運動は高級言語向けコンパイラ技術への関心を高めた。
言語技術は、1990年代に入ってもこうした方向性で発展を続けた。
この時期に発展した注目すべき言語には以下のようなものがある。
1990年代半ばのインターネットの急速な成長は、プログラミング言語における次の大きな歴史的出来事でした。インターネットは、コンピュータシステムのための根本的に新しいプラットフォームを開放することで、新しい言語が採用される機会を生み出しました。JavaScript 言語は、Netscape Navigator Web ブラウザとの早期の統合により、急速に人気が高まりました。PHP などの Web サーバー向けのカスタム アプリケーションの開発では、他のさまざまなスクリプト言語が広く使用されるようになりました。1990 年代には、命令型プログラミング言語に根本的な新しさは見られませんでしたが、古いアイデアの再結合と成熟が多く見られました。この時代は、関数型プログラミング言語の普及が始まりました。大きな推進力となったのは、プログラマの生産性でした。多くの高速アプリケーション開発(RAD) 言語が登場し、通常は統合開発環境(IDE)、ガベージ コレクションを備え、古い言語の子孫でした。これらの言語はすべてオブジェクト指向でした。これには、 Object Pascal、Objective Caml ( OCamlに改名)、Visual Basic、Javaが含まれます。Java は大きな注目を集めました。
RAD言語よりもさらに革新的だったのが、新しいスクリプト言語だった。これらは他の言語から直接派生したものではなく、新しい構文とより自由な機能の組み込みを特徴としていた。多くの人は、これらのスクリプト言語はRAD言語よりも生産性が高いと考えているが、それは多くの場合、小規模なプログラムはシンプルになる一方で、大規模なプログラムは記述と保守が難しくなるという選択によるものだ。それでもなお、スクリプト言語はWebにおいて最も広く使われる言語となった。
プログラミング言語の中には、開発時間を短縮するために、他の言語を同梱しているものがあります。例えば、PythonとRubyはどちらもTclを同梱しており、 Tkinterなどのライブラリを通してグラフィカルユーザーインターフェース(GUI)プログラミングをサポートしています。
この時期に発展した注目すべき言語には以下のようなものがある。
プログラミング言語の進化は続いており、より多くのプログラミングパラダイムが実運用で使用されている。
これまでに見られた傾向には以下のようなものがある。
大手テクノロジー企業は、自社のニーズを満たすように設計された複数の新しいプログラミング言語を導入しました。例えば:
この時期に発展した注目すべき言語には以下のようなものがある。
プログラミング言語の進化は、新たなプログラミング分野の台頭とともに続いている。
多くの大手テクノロジー企業は、自社のニーズを満たし、プラットフォームに一流のサポートを提供するように設計された新しいプログラミング言語を次々と導入し続けている。例えば:
この時期に発展した注目すべき言語には以下のようなものがある。[ 18 ] [ 19 ]
その他の新しいプログラミング言語には、Elm、Ballerina、Red、Crystal、V(Vlang)、Reasonなどがあります。

新しいプログラミング言語の開発は続いています。一部の新しい言語は、C++のような既存の言語の利点(汎用性と高速性)を維持しつつ、安全性や複雑さを軽減しようとしています。また、Pythonのような使いやすさを実現しつつ、パフォーマンスを最優先事項としている新しい言語もあります。
注目すべき新しいプログラミング言語には以下のようなものがある。
プログラミング言語の開発に貢献した主要人物:
Edinburgh LCF は、ML インタプリタを含め、Lisp で実装されました。