(後半)死にかけだが影響力のある10のプログラミング言語

Hillel Wayne    
フォーマルメソッド、ソフトウェア歴史家、『実践TLA+』の著者。
この記事は、著者の許可を得て配信しています。
https://hillelwayne.com/post/influential-dead-languages/

(前半)死にかけだが影響力のある10のプログラミング言語

SIMULA 67

背景:オーレ=ヨハン・ダールとクリステン・ニゴール、1967年。彼らはシミュレーションを行うためにALGOLを拡張し、専用のシミュレーションと「活動」シンタックスを持つSIMULA Iを作りました。SIMULAの初期の使用例をいくつか見ましたが、この二人は、この言語がどのように「専門的」に感じられるか、また自分たちのシミュレーションの中で重複するコードが多いかに不満を抱いていました。彼らはシミュレーションだけでなく、一般的なものを表現するための、より一般的なフレームワークを作りたかったのです。

彼らのアイデアは、ユーザーがポリモーフィックな関数解決機能を持つ「クラス」と呼ばれる新しい型を定義できるようにすることでした。そうすれば、ユーザーはシミュレーション機能をオブジェクトシステムの特殊なケースとして構築することができ、自分たちの特定のニーズに合わせてシミュレーション機能を簡単にカスタマイズすることができます。

意義:SIMULAは最初の「真の」OOP言語ではありませんでしたが、適切なオブジェクトを持つ最初の言語であり、他の言語がそれに基づいて構築する基礎的な部分の多くを築きました。これには、クラス/オブジェクトの分割、サブクラス化、仮想メソッド、保護された属性などが含まれます。1967年以降のオブジェクトに関する学術研究のほとんどすべてに影響を与え、CLUとMLの両方がSIMULAをインスピレーションの主要なソースとして引用しています。ビャーネ・ストロヴストルップはSIMULAに関する博士号を取得し、最終的にはSIMULAのアイデアの多くをC++に取り入れました。

死因:同じ博士号を持つストロヴストルップは、SIMULAは大規模に使うには遅すぎると主張していますが「メインフレームに乗っていないと何もできない」というのは、確かに遅いですね。同じ考えをさらに発展させたSmalltalk-80には、ムーアの法則が13年分も隠されていたことは注目に値します。そして、Smalltalkでさえ、遅すぎるとしばしば嘲笑されましたが、誰もがSIMULAを使って、より高速で簡単な言語に統合できるアイデアを実装しに行ったのです。

詳細はこちら:SIMULAのコンパイル:技術的な起源の歴史的研究The History of Simula

Pascal

背景:1970年、ニクラウス・ヴィルト。ALGOL-68が複雑すぎてヴィルトの好みに合わなくなったので、ALGOL-60のエッセンスを取り入れるために作られました。ALGOL-60は最初に「CS入門」言語として大ヒットし、80年代初頭にはユーズネットのジョブボードで2番目に人気のある言語となりました。ヴィルトは、Pascal、Modula、Oberonというファミリー全体を、一つの統一された言語概念として考えていました。

意義:パスカルは全く新しいアイデアを導入しませんでした。過去10年間の最良の部分をピックアップし、統一されたパッケージで提供しようとする、意図的に保守的な言語を目指していました。PascalはALGOL構文を学界の外に持ち込み、そのためALGOLの代入構文:=が代わりに「パスカルスタイル」と呼ばれるようになりました。この時点から、ALGOLに似たほとんどの言語機能は、ALGOL自体から直接ではなく、Pascalから着想を得たものである可能性が高い。

Pascalはあまり革新的ではありませんでしたが、Pascalの亜種はありました。ヴィルトはまた、厳密なソフトウェアを書くための手段として、「ステップワイズリファインメント」というアイデアの先駆者でもありました。これは最終的に、ファーストクラスのソフトウェアモジュールを普及させたModulasや、製品で使用されるようになった最初の正式な検証言語Euclidにつながりました。

死因:この件をマリガンと呼んでいます。このリストの他の多くの言語とは異なり、Pascalには大きな構造的な障壁もなければ、鋭い競争相手もいませんでした。確かに、C言語と競合していましたが、Pascalは非常に長い間順調に動作していました。人々は通常、「なぜPascalは私の好きな言語ではないのか」というエッセイを書いていますが、それはあまりにも理路整然とした答えであり、歴史はもっと厄介なものです。また、DelphiはTIOBEやPYPAの測定ではまだかなり上位に位置しているので、SIMULAと同じように死んでいるわけではありません。パスカルの没落についての正確な分析は、このエッセイの残りの部分よりも長くなるでしょう。

詳細はこちら:プログラミング言語PascalPascalとその後継者

CLU

背景:バーバラ・リスコフ、1975年。リスコフは抽象的なデータ型をいじくりまわしたかったのです。ええ、それだけです。それがCLUの全体的な理由です。

意義:CLUは誰も聞いたことがない最も影響力のある言語かもしれません。イテレータ?CLU です。抽象データ型?CLU。ジェネリック? CLU。チェックされた例外? CLUです。

我々は同じ用語を採用していないので、すべてがCLUから来ていることが100%明らかではありませんが、それでもです。今後10年間のすべての言語仕様は、CLUと名付けられるでしょう。それぐらい、CLUは多くのことを行いました。

死因:CLUは模範的な言語でした。リスコフは特定の言語としてではなく、彼女のアイデアを採用してもらいたかったのです。それは実を結び、今日のほとんどすべての言語は、CLUに何かを負っています。彼女はCLUを完成させるとすぐにArgusに移ったのですが、これは並行処理に関する彼女のアイデアを紹介するものでした。この言語はほとんど採用されていませんし、まだ多くのことが残っています。

詳細はこちら:CLUの歴史

ML

背景:ロビン・ミルナー、1976年。ミルナーは、最初のプルーフアシスタントの一つであるLCFプローバーを構築していました。正しい形式で証明を書くと、LCFはそれが正しいかどうかをチェックすることができました。証明を書くのを支援するために、ミルナーは健全な数学的形式に基づいたメタ言語を作成しましたが、当時は厳密な静的型と高次関数を意味していました。最終的にMLはStandard MLとして標準化されました。

意義:MLは、おそらく最も古い「代数的プログラミング言語」です。代数的なデータ型、モジュール、型付き関数型プログラミングなど、MLには多くのものがあります。驚くべきことに、これらの多くはMLが最初ではありませんでした。最初のMLは、LCFで動作するように設計されただけで、汎用言語ではありませんでしたが、MLがより一般的なものになっていくにつれて、他の研究言語からアイデアを引き出し、MLに取り入れていったのです。しかし,一つの非常に重要なアイデアはMLで始まったものです。MLは最初の静的型付け言語で、型を書く必要がありませんでした。このことは、型付きFPが学問の世界から抜け出して、量産の世界に入っていく道を開いたのです。

また、MLは現代の定理証明にも大きな影響を与えました。Isabelle、CVC3、Coqなどのプログラム言語はMLベースです。また、型理論の多くはMLに基づいていましたが、近年ではFPのHaskell系がより一般的になってきています。

死因:MLには多くの興味深い機能がありましたが、とくに型推論は注目されていました。当時MLは、まだ定理証明者のための特別な言語でした。SMLが発表されたのはHaskellと同じ年で、これは型付きFP言語の「純粋な」例でした。

Smalltalk

背景:アラン・ケイ、1972年、1976年、1980年。ある種、動くターゲットのようなものです。Smalltalk-72が最初で、Smalltalk-76が「オブジェクト指向プログラミング」の考え方を広く世間に紹介し、Smalltalk-80が広く普及しました。

Smalltalkはオブジェクトを使った最初の言語ではありませんでしたが、「オブジェクト指向」の最初の言語でした。違いは、Simulaでは数字やbooleanなどのプリミティブに加えてオブジェクトを持っていたのに対し、Smalltalkではbooleanもオブジェクトだったことです。これについては、詳しく知りたい方はこちらに少し書きました。

意義:Smalltalk は「真の」OOPであり、Java や Python のようなものは 「真の」OOPではないと思うことがありますが、そうではありません。OOPは、他のすべてのパラダイムと同じように、さまざまな影響を受けひどい状態ですが、それが普及したのは確かです。80年代半ばから90年代前半の一般的な理論のOOPの本を開くと、Smalltalkで書かれています。多くの人はその例をC++に翻訳したり、他の言語を使う人もいるでしょうが、すべての人がSmalltalkを使うでしょう。

Smalltalkはまた、共有可能なデータとしてのオブジェクトの考え方を広め、CORBAへの道を切り開き、計算アクターモデルにインスピレーションを与えました。

死因:一般的には、Smalltalkが失われたのは、人々が代わりにC++を使ったからだと考えられていますが、それは真実ではありません。Smalltalkにはいくつかの問題がありました。特に、他のツールとの相互接続の難しさやランタイムパフォーマンスの低さなどです。しかし、1990年代に入ってからもSmalltalkは立派なビジネスをしており、多くの人がSmalltalkが支配的なビジネス言語になると思っていました。

その後、Javaが登場しました。

Smalltalkだけが「Javapocalypse」の犠牲者ではありませんでした。Javaはまた、Eiffel、Ada95、そしてOOPの世界の他のほとんどすべてのものを排除していきました。興味深いのは、「なぜSmalltalkは死んだのか」ではなく、「なぜC++は生き残ったのか」ということです。C++の方がCのインターロップが優れていたので、レガシーシステムへの拡張が容易だったからだと思います。


これは重要な死語のほんの一部です。ALPHARD、ALTRAN、Argus、Automath、BCPL、COMTRAN、CPL、Eiffel、FLOW-MATIC、HOPE、Hypercard、ISWIM、JOVIAL、MacSyma、Mesa、Miranda、Multics Shell、PLANNER、SMP、Sketchpad、SNOBOLは取り上げていません。それらはすべて、それぞれの方法で現代のプログラミングの世界に貢献してきました。歴史は複雑です。

影響力のある言語のほとんどが主流になることはありませんでした。それらのどれかを使っている人はほとんどいませんでした。しかし、それぞれの言語は人々に影響を与え、他の人々に影響を与えたので、忘れ去られたこれらの言語のDNAは、忘れ去られてから何十年も経ってから現れてきます。しかし、彼らのアイデアが世に出なかった言語もあります。プログラミング言語百科事典には、8,000以上のプログラミング言語が掲載されています。それらの言語の多くには、バブルから抜け出すことのないアイデアがありました。もし誰もSIMULAを知らなかったら、あるいはLiskovがCLUを共有しなかったら、私たちはどれだけのものを失っていたかを考えてみてください。

それが私が歴史を勉強するのが好きな理由の一つです。私たちが失ったものを学び、それを再び見つけるためです。


コメントを読む

新着ピック  






















新着ニュース

「税込み1万円以上のパソコン用キーボード」おすすめ3選 タイピングがとっても快適に!【2020年最新版】

【MediaPipe】Multi Hand Trackingで3つ以上の手を骨格検出する(解決編1) | Developers.IO

【MediaPipe】Multi Hand Track...

DevelopersIO / 1時間前


[小ネタ] Sumo LogicでCloudTrailのログからAWSアカウントIDを取得する #sumologic | Developers.IO

ソフトバンクがリードするラウンドでDiDiの自動運転開発子会社が540億円調達 | TechCrunch Japan

TikTokの未来を知る、TikTokが米国市場でも伸びている理由(その3) | TechCrunch Japan

優れたUIとオンボーディングで成功、TikTokが米国市場でも伸びている理由(その2) | TechCrunch Japan

成功の原点はToutia、TikTokが米国市場でも伸びている理由(その1) | TechCrunch Japan

[レポート] オンラインイベント Prometheus Meetup Tokyo #4 #prometheustokyo | Developers.IO

東工大発バイオインフォマティクススタートアップのdigzymeが3000万円を調達 | TechCrunch Japan

[小ネタ] CloudFrontでクエリ文字列を転送しているときのInvalidationにはクエリ文字列を忘れないように注意しよう | Developers.IO

【MediaPipe】v0.7.4 → v0.7.5 の変更点を調べてみた | Developers.IO

【MediaPipe】v0.7.4 → v0.7.5 ...

DevelopersIO / 6時間前


リモートワーク環境整備(液タブを使ってトリプルディスプレイ環境を作った) | Developers.IO

英国Uberがドライバー向けアプリに他のギグワークを探せる機能を追加 | TechCrunch Japan

江本孟紀が語る「野村克也の組織マネジメント」

SpaceXが民間企業で人類史上初の有人宇宙飛行に成功、歴史にその名を刻む | TechCrunch Japan

Google、「Android 11 β」のリリースとイベントを延期 「今は祝う時ではない」

マイナンバーカードで給付金10万円をスマホから申請、さらに5000円還元もゲットする方法

Falcon 9による有人宇宙船打ち上げ成功 5月31日中にISSドッキングへ

AWS Elemental MediaPackageでマニフェストフィルタリングをしてみた | Developers.IO

AWS Elemental MediaPackageで...

DevelopersIO / 14時間前


[小ネタ]AWS Certificate Managerで既存のSSL証明書にサブジェクト代替名(SAN)を追加したかった話 | Developers.IO

[小ネタ]AWS Certificate Manage...

DevelopersIO / 18時間前


もっと見る
記事をPICKする
会員登録
Register
記事をPICKする

会員登録すると、もっと便利に利用できます。