2026年 6月 8月日 - By Andrew Oram
誤った出発
この2回シリーズの前編では、長く使われ続けてきたプログラミング言語について取り上げました。今回は、将来を大きく期待されながらも、あまりうまくいかなかったいくつかの言語について見ていきます。
誤った出発
大きな注目を集めながらも、実際には広く普及しなかった言語があります。その代表的な例がPascalです。Pascalは、スパゲッティコードの問題を解決するために、著名なコンピューター科学者Niklaus Wirthによって1970年に開発されました。
Wirthをはじめ、当時の優れた研究者で、率直な物言いで知られ、ときには恐れられることさえあったEdsger W. Dijkstraなどは、プログラムのバグを減らし、保守性を高めるには「構造化プログラミング」が必要だと考えました。
親や地域社会が子どもに一定の秩序や環境を与えることで、子どもが(ときには)責任ある大人へと成長するように、優れたプログラミング習慣を強制する言語を使えば、責任あるプログラマーを育てられるという考え方です。
これは実際に優れたアイデアであり、「デザインパターン」という概念の初期の実例でもありました。デザインパターンという言葉はもともと建築分野の概念で、Christopher Alexanderが1977年の著書『A Pattern Language: Towns, Buildings, Construction』で提唱したものです。その後、この言葉は、一般に「Gang of Four(GoF)」として知られる4人のコンピューター科学者の専門家による1994年の著書『Design Patterns: Elements of Reusable Object-Oriented Software』によって、プログラミングの世界にも取り入れられました。
実際には、デザインパターンは、まずプログラマーが守るべき優れたプログラミング手法として始まります。しかし、実際にそれを実践するのは難しいものです。そこで、そうしたパターンはライブラリに組み込まれ、使いやすくなります。そして最終的にはプログラミング言語の構文にまで統合され、プログラマーは抽象的なレベルで深く考えなくても、forallのような便利な構文を使えるようになります。
Pascalはコンピューター科学の研究者たちから高く評価され、正しいプログラミング方法を誰にでも示す言語になると期待されました。Pascalは現在のJavaと同じように、コンピューターサイエンスの授業で広く教えられており、これが決定的な普及につながるはずでした。
では、なぜPascalは生き残れなかったのでしょうか。
どうやら、あの優れたWirthでさえ、優れたプログラミング手法を標準化するには十分なところまで踏み込めず、プログラミングの世界がどちらへ向かおうとしているのかを見極められていなかったようです。
Pascalはオブジェクト指向に対応していませんでした。当時、オブジェクト指向という概念はすでに普及し始めていました。Object Pascalは1980年代半ばに登場しましたが、時すでに遅しでした。
開発者のJames Vasileは、Pascalの問題は教育用言語として設計されたことにあると指摘しています。Pascalには移植性のあるコンパイラーがなく、可変長文字列型など、実際の製品開発に必要な機能も不足していました。こうした問題のいくつかは、コンピューター科学研究者のGreg Wilsonがこの記事をレビューした際に引用した論文、『Why Pascal Is Not My Favorite Language』でも指摘されています。この論文の著者Brian Kernighanは、UnixとCの主要な開発者の一人です。
もう一つ、期待されたものの普及しなかった興味深い言語がObjective-Cです。Objective-CはC++の登場から間もなく開発されました。
Objective-Cが注目される理由は、構文が複雑で、イントロスペクション機能を備え、メモリ管理システムも分かりにくい言語だったにもかかわらず、Steve JobsがAppleを離れた後に開発した新しいコンピューター「NeXT」で採用したことにあります。これは1980年代のことで、C言語をベースとしたオブジェクト指向言語のうち、どれが主流になるのかがまだ明確ではなかった時代でした。
そして1997年、現在の巨大企業Appleへと変貌させるためにJobsがAppleへ復帰すると、Jobsは、それまでにもっと良い選択肢があることを知っていたはずなのに、アプリケーションをObjective-Cで開発するよう求めました。iPhoneで伝説的な「App Store」が開設され、開発者たちがアプリを作れるようになったとき、彼らは皆Objective-Cを学ばなければなりませんでした。
現在、Appleはモバイル端末向けにSwiftを使用しているため、Objective-Cは本来の「目立たない言語」へと戻りつつあります。
Googleもモバイル端末向けの開発で同様の進化をたどりました。最初は広く普及していたJavaを推奨していましたが、その後、当時はあまり知られていなかったKotlinへと移行しました。
大規模な組織が支持し、開発者に導入を強く促した言語がほかにも2つあります。
1つ目はPL/Iです。PL/Iは、巨大組織という言葉だけではその圧倒的な存在感を十分に表現できないほどの大企業であるIBMによって、1960年代に推奨されました。PL/Iは、プログラミング言語界の「Edsel」になってしまいました。
もう1つはAdaです。Adaは1970年代に米国国防総省(DoD)によって開発され、数多くの国防関連契約で使用が義務付けられていました。DoDはインターネットを支援したときには正しい判断をしましたが、Adaでは大きくつまずくことになりました。Vasileは、Adaには高価なプロプライエタリコンパイラーも必要だったと指摘しています。
ここで、多くの人、特にRubyの支持者にとっては議論を呼ぶ主張を取り上げましょう。
RubyはPascalやPerlのような道をたどったわけではありません。しかし、Ruby on Railsが登場した2000年代半ばの絶頂期と比べると、現在のRubyは大きく勢いを失っています。当時のRubyはPerlの後継言語のように見え、実際にPythonを大きく上回っていました。
RubyがPerlやPythonほど広く普及しなかったのは、Rubyの開発者が日本人で、北米のコミュニティの外側にいたからだという人もいます。しかし、RailsはRubyにとって非常に大きな普及のきっかけとなりました。
私の考えでは、Railsは当初思われていたほどの価値を発揮しませんでした。そしてRailsへの熱狂が冷めると、RubyはPythonほど多くの魅力を提供できなくなりました。
Railsは、動的なWebページを提供するサーバー側プログラムをテンプレートベースで開発するための、初期のフレームワークでした。プログラマーが非常に短時間で実装を進められる基本設計を提供していました。
しかし同時に、Railsの設計者であるDavid Heinemeier Hansson(DHH)の前提や考え方を、そのまま固定化してしまう側面もありました。DHHのWebページとまったく同じように動作するWebページを作りたいのであれば、Railsは素晴らしい選択肢です。しかし、DHHの想定する設計思想から離れるほど、その有用性は急速に低下します。
一方、Railsの初期の成功は、別の言語を好む開発者たちに、同様のフレームワークを開発するきっかけを与えました。その結果、やがて、考えられるほぼすべての現代的なプログラミング言語に、サーバーサイドWebアプリケーション向けのフレームワークが登場しました。
現在、最も人気があるもの(明確な統計は見つけられませんでした)は、JavaScriptのフレームワークであるNode.jsのようです。Node.jsは、アプリケーションのクライアント側とサーバー側で同じ言語を使えるようにすることで、開発上の障壁を減らします。さらに、一部の専門家は、パフォーマンスやその他の特性においてNode.jsのほうがRailsより優れていると評価しています。
Railsは現在も広く使われていますが、初期の数年間に得た勢いは失われています。その過程で、Rubyそのものも輝きを失いました。現在もRubyとRailsには一定の支持者がいますが、20年ほど前のような勢いはありません。
Rubyより前にはTcl(「ティクル」と発音)という言語があり、短期間ではありましたが、手軽で雑多なスクリプトを書くための言語としてPerlに取って代わる可能性がありました。
私が思うに、Tclで書かれた最も有名なプログラムは、Don LibesによるExpectです。これは、プロンプトからの入力を要求するシステムとの対話が必要なタスクを自動化するための、非常に便利なツールでした。
しかし最終的に、Tclの設計では複雑なプログラミング上の要求に対応するのが難しいことが分かり、現在ではかつての利用者からもほとんど思い出されない存在になっています。
勝ち残るために必要なこと
このシリーズで紹介してきた、やや主観的で非常に個人的な意見を含む歴史から分かるのは、時間の経過とともにどの言語がプログラマーの心をつかみ、支持を得るのかを予測することは極めて難しいということです。
Javaの場合、その普及には当時の大手企業であるSun Microsystemsからの支援が決定的な役割を果たしました。しかし、IBM、Microsoft、Apple、さらには強大な米国国防総省までが自分たちの推す言語を普及させようとした取り組みは、ほとんど影響を及ぼしませんでした。
また、一流の研究者によって開発されたからといって、人気が出るとは限りません。Pascalがその例であり、MLやHaskellのような研究主導型の言語にも同様の事情があります。
一方、JavaScript、PHP、Pythonは、比較的荒削りな状態で始まりながらも、当初のニーズを十分に満たし、さらに発展する余地を残していました。その結果、より堅牢な言語へと進化していきました。
広く支持されることはなくても、より人気のある別の言語に強い影響を与える言語もあります。これについては、最近の記事「Functional Languages and the Future of Programming(関数型言語とプログラミングの未来)」で取り上げました。
Haskell開発チームのリーダーであるSimon Peyton Jonesは、次のように述べています。
「採用状況という観点から見た言語の成功は、技術的な優位性――洗練された設計、正式な仕様、さらにはプログラマーの生産性――との関連性が非常に弱い。技術とは関係のない問題や、社会経済的・技術的な問題が大きな影響を及ぼしている。」
つまり、私が思うに、プログラミング言語の開発者は非常に優秀な人々です。さまざまなプログラミング言語の設計や構築について学んだ人であれば、数学的に厳密なものを作り出すことができます。
しかし、それが美しく、実用的なアプリケーションのニーズを満たすかどうかという問題は、より複雑です。そして、その答えが分かるのは、おそらく時間が経ってからでしょう。
だからこそ、新しいプログラミング言語の開発が終わることはありません。もちろん、私たちがプログラミングそのものをやめ、すべてのコンピューティングをAIに任せるようになれば話は別です。しかし、それは人類の未来に対する人間自身の意思決定権を手放すことを意味します。そのような未来を、私たちの多くは受け入れないでしょう。
<<前回の記事を読む