私は情報系の学部に所属していなかったので、コンピュータサイエンス系の基本的な教養が足りていません。
そこで本記事は現在よく使われているJavaScript, Python, Go, Rubyなどの言語たちはどういう経緯で生まれてきたのだろうということをざっくりと理解することを目的としています。
浅学の仲書いているので間違いなどはご容赦のほど。
本記事の内容
本記事では現在よく使われているプログラミング言語の先祖となったような重要な言語を取り上げ、その開発の経緯やどんな名残があるのか、誰が作ったのかなどを中心に書き残したいと思います。
とはいえあまり長い解説になっても良くないので、今回は特に重要と思われる5つの言語に絞って書いていきます。
モダンな言語の先祖たち
FORTRAN
言語の概要
FORTRANは世界初の高水準言語です。
なので他のほとんどの高水準言語に対して直接・間接的に影響を与えた言語であるといえます。
FORTRANのすごいところは何と言っても現在でも現役で使われ続けている言語であるということです。
私の知人にもプラズマ研究のためにFORTRANを使っている方が実際にいます。
昔から続いている科学研究分野ではコードやライブラリが知見として蓄積されているので言語を変えないほうがいいし、必要がないという考えみたいですね。
開発者
FORTRANの開発者はIBMのエンジニアであったジョン・バッカスです。
この方は現在ではバッカス・ナウア記法などにその名前を残しています。
バッカスはIBM 704というメインフレームコンピュータ(でかくてパーソナルじゃないコンピュータ)で使用することを目的としてFORTRANを開発しました。
実はバッカスはFORTRAN開発の前にspeedcodingという言語を同じくIBMのメインフレーム用に開発しています。
なので、厳密に言うとspeedcodingが世界初の高水準言語ということになるわけですが、speedcodingの事実上の進化系として作られたのがFORTRANであることから、現在ではFORTRANが世界初の高水準言語として紹介されることがほとんどです。
名残
FORTRANの手続き型プログラミングのパラダイムは現在の多くの言語に受け継がれています。
それまでの機械語やアセンブリも手続き的に書かれていたわけなので、手続き型プログラミングの考え方はコンピュータ登場初期から現在まで通底しているもののようです。
ALGOL
言語の概要
ALGOLは最初期の高水準言語の一つです。
ALGOLはalgorithmic languageの略であることからも分かる通り、アルゴリズムの記述を目的として開発された言語です。
なので、商用的な目的というよりは学術的な分野で広く用いられていたという経緯を持っています。
ALGOL自体はFORTRANに影響を受けていますが、この言語が後の言語に与えた影響を考えるとFORTRAN以上に成功した言語として紹介されることもあります。
というか、FORTRANもALGOLの構造化プログラミングに影響を受けていると思います。
開発者
ALGOLは、アメリカで開発されたFORTRANに対抗する形でヨーロッパの研究者グループが1950年代中頃に開発した言語です(この時代にもまだ新世界と旧世界の対抗意識ってあったんですね)。
とはいいつつ、後にFORTRAN開発者のジョン・バッカスなどもALGOLの開発に貢献しており、バッカス・ナウア記法などはALGOLを対象として開発されたメタ言語です。
名残
何と言っても現在の殆どの言語に共通する構造化プログラミングが導入された初めての言語としてALGOLが紹介されることが多いです。
構造化プログラミングというのはざっくりいうと「goto文をやめてif文やwhile文にしよう」という考え方です。
今では当然ですが、昔はgoto文というものがあってコードのどこにでも飛べたみたいです。
この仕組を使って条件分岐や繰り返しに相当するものを実装していました。
goto文はアセンブリなどではいまでも現役なので、アセンブリを触る経験があると実感できると思います。
C
言語の概要
C言語は現在でもバリバリ現役の高水準言語です。
おそらくプログラミング言語の中では最も有名なものの一つかと思います。
JavaScriptやPythonなどに比べてメモリ管理などの低水準言語的な特徴を持っているので、厳密なメモリ管理が必要だったり速度が求められる現場ではよく利用されています。
例としては組み込み系やOSなどですね。
開発者
開発者はベル研究所のデニス・リッチーです。
リッチーはケン・トンプソンが開発したB言語の改良としてC言語を開発しました。
当初はOS上で動くユーティリティ(カレンダーとか時計とかスクショとかの機能)を作成する目的で作られましたが、後にUNIXまるごとがC言語で置き換えられました。
名残
文法的な面はもちろんPythonなんかはそれ自体Cで実装されています。
また、RustはCの代替として作られましたし、JavaはCの拡張版であるC++の構文を参考に作られています。
Simula・Smalltalk
言語の概要
Simulaは世界初のモダンなオブジェクト指向言語です。
一方のSmalltalkはSimulaで確立されたオブジェクト指向という概念をさらに一般化し、世間に広めた言語です。
こういう経緯もあってこれらの言語は「オブジェクト指向を作った言語」として、特別にひとまとめで紹介しています。
開発者
Simulaの開発者はノルウェーの数学者クリステン・二ゴールです。
Simulaは当初コンピュータ・シミュレーションのための言語として開発されており、一般のシステム開発などへの利用を想定していなかったことも相まって一部の研究者などが利用する程度にとどまりました。
このSimulaのオブジェクト指向的な発想をハード、OS、GUIなどフルセットで開発・提供したのがアラン・ケイのSmalltalkです。
名残
現在よく使われているプログラミング言語ではオブジェクト指向が当たり前のように使われています。
現在主流のオブジェクト指向はSimulaやそれを発展させたC++のオブジェクト指向を受け継いでいます。
しかし、オブジェクト指向という考え方そのものを確立させたSmalltalkの功績も大きく、多くの言語が直接・間接的にSmalltalkの影響を受けています。
Perl
言語の概要
Perlは最初に広まった実用的なサーバーサイドスクリプト言語です。
現在もオープンソースでの開発が進められており、様々なプロダクトで使用されています。
開発者
Perlを開発したのはプログラマの三大美徳などでよく知られるラリー・ウォールです。
ウォールはサーバーサイドで軽量かつ気軽に動作できる言語としてPerlを開発しました。
Perlは現在Perl 5まで開発されていますが、開発者がPerl 5と全然互換性のないPerl 6(後にRakuとして分離)を作ってしまったので、Perl今後は緩やかに衰退する可能性の高い悲しき存在です。
名残
Perlは軽量なサーバーサイドスクリプト言語という文脈でPythonやRubyなどの言語に大きな影響を与えています。
また、オープンソースでのプログラミング言語開発におけるプロジェクトのあり方を最初に示したという功績もあります。
まとめ
今回は現在使われているWeb言語たちの先祖について書き残しました。
こうしてみると、よく知られている言語よりも知られていない言語のほうが後に影響を与えたりもしていて面白いです。
もちろん、ここに取り上げた他にもBASICやAda、Java、Pascalなど重要な言語はいくらでもあるわけですが、それらのお勉強は別記事で機会があれば。