この記事は、著者の許可を得て配信しています。 https://hillelwayne.com/post/influential-dead-languages/
背景:オーレ=ヨハン・ダールとクリステン・ニゴール、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
背景: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と同じように死んでいるわけではありません。パスカルの没落についての正確な分析は、このエッセイの残りの部分よりも長くなるでしょう。
詳細はこちら:プログラミング言語Pascal、Pascalとその後継者
背景:バーバラ・リスコフ、1975年。リスコフは抽象的なデータ型をいじくりまわしたかったのです。ええ、それだけです。それがCLUの全体的な理由です。
意義:CLUは誰も聞いたことがない最も影響力のある言語かもしれません。イテレータ?CLU です。抽象データ型?CLU。ジェネリック? CLU。チェックされた例外? CLUです。
我々は同じ用語を採用していないので、すべてがCLUから来ていることが100%明らかではありませんが、それでもです。今後10年間のすべての言語仕様は、CLUと名付けられるでしょう。それぐらい、CLUは多くのことを行いました。
死因:CLUは模範的な言語でした。リスコフは特定の言語としてではなく、彼女のアイデアを採用してもらいたかったのです。それは実を結び、今日のほとんどすべての言語は、CLUに何かを負っています。彼女はCLUを完成させるとすぐにArgusに移ったのですが、これは並行処理に関する彼女のアイデアを紹介するものでした。この言語はほとんど採用されていませんし、まだ多くのことが残っています。
詳細はこちら:CLUの歴史
背景:ロビン・ミルナー、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言語の「純粋な」例でした。
背景:アラン・ケイ、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を共有しなかったら、私たちはどれだけのものを失っていたかを考えてみてください。
それが私が歴史を勉強するのが好きな理由の一つです。私たちが失ったものを学び、それを再び見つけるためです。
注目のコメント
11ヶ月