「今日使われているプログラミング言語の多くは、なぜ1990年前後に誕生したものなのか」に関する一考察

若い人たちは、「文字列型」があるプログラミング言語しか知らないかもしれない。だが、汎用的な文字列型が一般的になったのは、プログラミング言語の歴史の中でも比較的最近のことである。

たとえば、1972年に誕生したC言語には文字列型がない。1980年代に良く使われていたPascalの文字列型は最大255文字しか格納できなかった。

なぜか? それはメモリが貴重なリソースだったから。

1980年代のPCの搭載メモリは多くて数メガバイト。これに対し、長編小説の長さは1MB程度に達する*1

当時、メモリはとても貴重な資源であり、テキストを処理するプログラムを開発するにあたっては、文字列をどのようにメモリ内に展開するかプログラマが細かくコーディングする必要があった。

だから、汎用的な「文字列型」というのは「夢」にすぎなかった。CあるいはPascalにおける文字列(CのASCIIZ文字列あるいはPascalの文字列型)は、簡易な処理を書くため、あるいはOSやライブラリとやり取りをするための取り決めとしての側面が大きかったのである*2

また、より簡易な処理を行いたい場合には、AWKのような「行ごとにデータを読み込んで処理」するという、それ専用に設計された処理系を使うアプローチが採られていた*3

ところが、1990年代に入ると半導体技術の進歩により計算機の搭載メモリ量が増加し、「文字列処理におけるメモリ使用量」は最早問題ではなくなってくる。これを象徴するのが、テキストVRAMを前提とするCUIから、文字を画像へメモリ内で展開して描画するGUIへの移行である*4

同様の影響はプログラミング言語においても現れた。プログラミング言語において汎用的な「文字列型」を導入しても、その言語の応用分野が狭まることはなくなったので、1990年前後に誕生したプログラミング言語である C++, Perl, Python, Java, JavaScript, Ruby は、いずれもその言語仕様の一部として汎用性のある「文字列型」を備えている*5

今日、広く使われているプログラミング言語の多くが1990年前後に誕生したものなのは、決して偶然ではない。それら諸言語は、メモリ空間の拡大にともないテキスト処理の手法が変わるというタイミングで産まれた新しい生存空間に早期に進出し、根を広げたプログラミング言語なのである *6 *7

メモリ空間の拡大はインタプリタ型言語の一般化にとっても重要な役割を果たしているが、その話はまた改めて。

PS. 本記事は問に答える視点を紹介するものであって、唯一解を述べようとしているわけではないです。プログラミング言語の理論と実装の発達史を振り返るには「コーディングを支える技術」著者公式ページが良書だと聞きますが、半導体技術の発展とあわせて考えてみるのも面白いと思います。

*1:参照: 図書カード:吾輩は猫である

*2:参照: String (computer science) - Wikipedia

*3:簡易な処理系としては、他にも表計算ソフトやそのマクロ、バッチファイル等が既に存在した。このことはつまり、計算機の利用形態において処理速度が既に絶対的問題ではなくなっていたことを示している

*4:Unicodeのような世界共通の文字コードが現実的になったのも同様の理由によると考えることができる

*5:構造化されたBASICであるQuickBasicをその嚆矢とする考えもあるだろう

*6:これら新世代のプログラミング言語の有力な適用分野であるウェブ自体も、メモリ空間の増大にともなって可能になったテキストベースのシステムである

*7:scalar/array/hashという汎用的なデータ構造の上にアプリケーションのアルゴリズムを実装するというメモリを潤沢に使うプログラミング手法が一般化するのも同時期である