
プログラマーには、それぞれお気に入りのプログラミング言語があります。それは、スポーツファンが地元や母国のチームを応援するのとよく似ています。
Luaのように非常に限定的な分野で使われ、その熱心な利用者から高く評価されている言語もあります。一方で、CやC++のように、まるで不滅であるかのように使い続けられている言語もあります。しかし、多くの言語は、登場当初には将来を期待されながらも、やがて静かに姿を消していきました。
本シリーズでは、そうした重要なプログラミング言語の栄枯盛衰を2回に分けて紹介します。
C言語は、1970年代初頭にUnixオペレーティングシステムとともに誕生しました。
CとUnix(現在ではLinuxやBSD)は切っても切れない関係にあり、この強い結び付きが現在でもC言語が使われ続ける大きな理由となっています。しかし、Cにはそれとは別に、言語そのものとしての魅力もあります。
Cは習得しやすく、扱いやすい一方で、誤った使い方もしやすい言語です。しかし、高水準言語では実現が難しいほど高速に実行できるという大きな利点があります。(一方、C++は正しく扱うための難易度がさらに高くなります。)
そのため、多くの新しいプログラミング言語では、C/C++で作成されたライブラリを利用できる仕組みが用意されています。実際に、PythonのNumPy、SciPy、TensorFlowといった重要なライブラリでは、この仕組みが積極的に活用されています。
もっとも、CやC++はすべての用途に適しているわけではありません。バッファオーバーフローのような古くから知られるプログラミングミスやセキュリティ上の欠陥を防ぐ仕組みが十分ではありません。現在ではAIやファジング、各種コード解析ツールによって、こうした問題が頻繁に発見されるほどであり、もはや言語の特性の一部とも言えるほどです。
そのため、CやC++は、長期間にわたって大きな変更が行われず、最高レベルの実行性能が保守性よりも重視されるようなソフトウェアに適しています。
JavaScriptも、不滅の言語に分類できる唯一の存在です。
JavaScriptには批判的な意見も少なくありませんが、ブラウザがネイティブでサポートしている高水準言語はJavaScriptだけです(低レベル言語であるWebAssemblyを除く)。そのため、動的なWebページを実現するためには、依然として欠かせない存在となっています。
その結果、CoffeeScriptやElmのような拡張言語や、多数の強力なライブラリによってJavaScriptを補完しながら利用するという文化が発展しました。こうした豊富なライブラリ群は、あらゆるプログラミング言語の生命線とも言えます。
Javaもまた、CやC++と同じような長寿言語になる可能性があります。
Javaは1995年に「より優れたC++」として、さらにWebブラウザ上でも動作する移植性の高い言語として登場しました。当時のコンピューター業界では、オブジェクト指向プログラミングが大きな注目を集めていました。
現在主流となっているJava、Python、JavaScriptなどを見ても分かるように、オブジェクトは現代プログラミングの基本的な構成要素となっています。
Sun Microsystemsが開発したJavaは、大規模な企業システムにおける標準的なプログラミング言語となり、現在でもコンピューターサイエンス系の大学教育で最も広く教えられている言語の一つです。また、より新しい言語から生まれた優れた機能を積極的に取り入れながら進化を続けています。
一方、Sun Microsystemsと激しく競争していたMicrosoftはJavaをそのまま採用することを避け、2000年に対抗するオブジェクト指向言語としてC#を発表しました。
C#の支持者の中には、Javaよりも優れていると主張する人もいます(Java初期の設計上の問題を改善したとも言われます)。しかし、オープンソースのMono Projectによるサポートがあったにもかかわらず、C#がJavaを追い抜くことはありませんでした。
現在のC#の主な役割は、Microsoftの包括的な.NETフレームワークを支えることです。
PHPは、動的Webページのサーバーサイド処理を目的として開発されましたが、多くの人の予想以上に長く生き残っています。
現在でも非常に多くのWebサイトで利用されており、ある調査では全Webサイトの71%がPHPを利用しているとされています。
PHPも他の成功した言語と同様に、初期の欠点を改善しながら進化を続けてきました。
プログラミング言語も企業と同じで、まずは「必要最低限の実用製品(MVP)」を提供し、その後に改良を重ねていくという考え方は理にかなっていると言えるでしょう。
不滅の言語という観点では、多くの開発者がRustにもその仲間入りを期待しています。特に、新しいシステムではCやC++の代わりとして利用されることが期待されています。
しかし、Rustがその期待に応えられるかどうかを判断するには、まだ時期尚早です。私自身は、その可能性はあまり高くないと考えています。
理由は、Rustが多くのプログラマーにとって複雑すぎ、抽象度も高すぎるからです。そして、複雑さは設計上の問題を生みやすくなります。本番環境で広く利用されることを目指すプログラミング言語にとって、それは大きな弱点となり得ます。
一方で、特定の時代に重要な役割を果たし、その後は徐々に姿を消していった言語もあります。
代表的なのがCOBOLとFORTRANです。
COBOLはビジネス分野で、FORTRANは科学技術計算の分野で圧倒的な存在感を誇りました。FORTRANのベテラン開発者は、「人類を月へ送り届けたのはFORTRANだった」と誇らしげに語ることがあります。
企業や研究者がこれらの言語を積極的に採用したのは、その時代の要求に非常によく合っていたからです。
これらの言語は数世代にわたって経済発展や科学技術の進歩を支えました。しかし、ソフトウェア開発がより専門的になるにつれて、保守性やセキュリティが重視されるようになり、やがてCOBOLやFORTRANの役目は終わりを迎えました。
もっとも、プログラムは言語よりも長生きすることがあります。
COBOLの重要性は1990年代後半の2000年問題(Y2K問題)によって改めて注目されました。そして現在でも、COBOLプログラマーは必要とされています。
私自身、ずいぶん昔にテクニカルライターの仕事のためにCOBOLを学びましたが、それほど難しい言語ではありませんでした。そのため、意欲のある若いプログラマーであれば比較的短期間で習得し、高齢化したベテラン技術者に代わって活躍できるでしょう。
ところで、「まだ○○ではこの言語が使われています」と教えてくださる必要はありません。
自然言語を例に考えてみてください。
ラテン語は紛れもなく「死語」ですが、現在でも参加者全員がラテン語だけで会話する国際会議が開かれていますし、バチカンでは公式文書のためにラテン語辞典が更新され続けています。
また、ヘブライ語は紀元前500年頃には日常会話としては使われなくなりましたが、その後も詩人たちは書き言葉として使い続け、20世紀には再び日常語として復活しました。
サンスクリット語も、現在では話者は少ないものの、宗教儀式では今なお重要な役割を果たしています。
FORTRANプログラマーたちは、パンチカード時代の制約を色濃く残した記法で、IやJといった単純な変数名を使い、ほとんどコメントも付けず、大量の保守しにくい関数を書き続けました。こうしたコードは「スパゲッティコード」と呼ばれています。
次回の記事では、この問題を解決しようとしたコンピューターサイエンス研究者たちの取り組みを紹介します。
FORTRANは科学技術計算の世界にあまりにも深く浸透していたため、その開発者の一人は「2000年のプログラミング言語がどのようなものかは分からない。しかし、その名前はFortranだろう」と語ったことで有名です。
しかし、コンピューターサイエンスそのものが進歩し、FORTRANでは対応できない要求が増えていきました。
開発者たちは「Fortran 8X」というコードネームで新バージョンの開発を長年続けましたが、あまりにも完成が遅れたため、「Xが16進数になってしまった」と冗談を言われるほどでした。そして最終的に、その言語はFortran 90としてリリースされました。
ちなみに、私がフリーランスとしてO’Reillyで最初に編集を担当した書籍はFortran 90に関するものでした。この本は高い評価を受けたものの、商業的には成功しませんでした。
BASICも忘れてはならない言語です。
1963年に、プログラマーではない人でも簡単にプログラミングできることを目的として開発され、オフィスワーカーやアマチュアプログラマーの間で爆発的に普及しました。
その後、MicrosoftはVisual Basicを発表し、IDEも備えたWindows向けのグラフィカルアプリケーション開発言語へと発展させました。
さらに、UnixからPerlなどのスクリプト言語が登場した後も、BASICはしばらく日常的に利用され続けました。
そのため、COBOLやFORTRANほど中心的な存在ではなかったものの、アマチュアプログラマーという重要な層を支え、長期間利用された言語として、この分類に含めています。
Perlもまた、「一時代を築いた言語」の代表格です。
Perlは、システム管理者が日々の作業を自動化したいという要求に真正面から応えた最初のスクリプト言語でした。これはDevOpsという概念が生まれる20年以上も前のことです。
Perlはシステム管理者にとって欠かせない存在となり、さらにWorld Wide Webサーバー上で動的Webページを実現する最初の実用的なプログラムを支えるという栄誉も手にしました。
Perlは非常に自由度が高く、プログラマーの創意工夫をさまざまな方法で表現できる言語でした。しかし、その自由度は長い目で見ると、あまりにも大きすぎました。
Perlプログラマーの間では、「1行でどれだけ多くの処理を書けるか」を競う文化さえありました。
私自身、以前保守を担当することになったPerl 4のプログラムは、
$firstline or print ...
のような記述ばかりで構成されていました。
Perlでは「or」は演算子ですが、そのプログラムを書いた開発者は制御構文のように使っていました。
この1行は、「変数$firstlineが設定されていなければ、後続の内容を表示する」という意味です。(LISPの「遅延評価」にも似ています。)
最終的に私は、そのプログラム全体が、$firstlineのような大量のグローバル変数によって状態を管理する、非常に複雑な状態遷移システム(ステートマシン)であることに気付きました。
こうしてPerlは、現在でも一部のレガシーシステムでは使われているものの、多くの競合言語にその座を譲ることになりました。
その代表が、現在主流となっているPythonです。
そのほかの競合言語については、本シリーズの後編で紹介します。
You are currently viewing a placeholder content from Vimeo. To access the actual content, click the button below. Please note that doing so will share data with third-party providers.
More InformationYou are currently viewing a placeholder content from YouTube. To access the actual content, click the button below. Please note that doing so will share data with third-party providers.
More InformationYou need to load content from reCAPTCHA to submit the form. Please note that doing so will share data with third-party providers.
More InformationYou need to load content from reCAPTCHA to submit the form. Please note that doing so will share data with third-party providers.
More Information