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

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

先日、歴史上最も重要なプログラミング言語20選という"即席のでたらめな表"を読みました。彼は確かにとんでもないことをやっています。Goを”最も重要なもの"として挙げていますが、ALGOL、Smalltalk、ML は挙げていません。また、Pascalを「ほとんど死んでいる」という理由で省いています。ばかげている!これでは、「歴史的に重要な」という意味の全体的な意味が失われてしまいます。

では、いくつかの "ほとんど死んだ "言語と、それがなぜそんなに重要なのかについて話してみましょう。

免責事項:そう、これらの言語のすべてが死んでいるわけではありませんし、忘れ去られているわけでもありません。ほとんどの人がSmalltalkを聞いたことがあるでしょう?また、60年間のコンピューティングの歴史を調査していると、いくつか間違ったことをすることになるからです。何かあったら遠慮なく怒鳴ってください!

免責事項 2:ええ、これらの中には「最初に発明した」ものもあれば、「最初に普及させた」ものもあることは知っています。歴史は複雑です。

影響力の検出

始める前に、影響力を見つけるための簡単な手引きを説明します。XがZの機能を持つ最初の言語であることを知っているだけでは、Xが実際にZに影響を与えたということにはなりません。Absysは間違いなく最初の論理型プログラミング言語ですが、実際にはほとんどすべての論理型プログラミングは独自に開発されたPrologに由来しています。最終的に、XがYに影響を与えたことを確実に知る方法は1つしかありません。これは、以下のいずれかを意味します。

・YはそのリファレンスマニュアルでXを引用している
・YがXを引用した論文を引用する
・Yの作者は「私たちはXに影響を受けた」と言っている

引用は、他動詞である。Qの言語マニュアルには、動機となる文書Rがリストアップされていることがありますが、その文書は論文Sをインスピレーションとして引用しており、その文書は言語Tからアイデアを得たことに言及しています。これは、シグナルを見つけるために多くのソースを掘り下げることを意味します。この作業をスピードアップするために、どこを探せばよいかを判断するためにヒューリスティックな手法を使います。

効果的なヒューリスティックの1つは、プログラミング言語の認識です。言語が独立して同じ構文を持つことは非常に稀です。つまり、2つの言語が同じ構文を共有している場合、一方の言語が他方の言語に影響を与えている可能性が高いということです。例えば、Matzの設計決定を読まなくても、RubyがSmalltalkの影響を受けていることはわかっています。これは決定的な証拠ではありません。Matzが独自に考え出したのかもしれませんし、RubyとSmalltalkは共通の祖先から影響を受けているのかもしれません。しかし、これは私たちに調べ始める場所を与えてくれます。

COBOL

背景:CODASYL、1960年。COBOLは、コンピューティングにおけるビジネスと科学の分裂によって形成されたものです。当時、高レベルの産業用言語はエンジニアリング計算かデータ管理に使用されていました。ビジネスの世界がCOMTRAN、FLOW-MATICなどでごちゃごちゃしていたのに対し、エンジニアはみんなFORTRANに夢中になっていたので、国防総省は、単一の普遍的なビジネス言語を作ろうと委員会を立ち上げました。それがCOBOLです。

COBOLは、ALGOL、FORTRAN、LISPとともに4つの「母なる」言語の1つでした。今日では、パンチラインとみなされていますが、かつては世界で最も人気のある言語でした。COBOLは今でも多くのレガシービジネスシステムを動かしています。

意義:構文とセマンティクスの面では、現代のコンピューティングではCOBOLはあまり見られません。COBOLの最も重要な機能は、レコード・データの概念です。FORTRANやALGOLでは、データ構造は静的配列だけでした。しかし、COBOLでは、階層データを持つ構造化されたファイルを読み込むことができ、それらを代表的な変数に自動的に分解します。これは現代の構造体の先駆けでした。

死因:ここでは2つの要因があります。
1つ目: COBOLには、他のPLTとの取り組みとの重複がありませんでした。COBOLを基盤にしている人はほとんどいませんでした。これは、先祖の教訓に基づいて構築された第二世代または第三世代の言語が、COBOLのDNAをほとんど持っていなかったことを意味します。これはCOBOLの本質的な問題というよりも、COBOLの作成プロセスに対するアカデミアの軽蔑が原因でした。CODASYLはビジネスグループであり、明らかに注意を払う価値がなかったのです。COBOLはまた、今日の言語でさえ非常に複雑でした。COBOLのコンパイラが、マイクロコンピュータやミニコンピュータの同世代のものに遅れをとっていたことを意味し、他の言語が繁栄し、最終的にはそれを打ち負かす余地を与えていたことを意味しています。

ALGOL

背景:1960年のALGOL委員会。ALGOL-58はその2年前に出てきたが、あっという間に取って代わられてしまったので、それらを相互にラップしています。委員会はアルゴリズムを研究するのに適した言語を作りたかった。つまり、ALGOLは形式化された「疑似コード」だったのです。

4つの母言語の中で、ALGOLは最も「死んだ」言語です。誰もがLISPについてはまだ知っていますし、COBOLはまだ多くのレガシーシステムを動かしています。しかし、私はALGOLを知らないプログラマーにたくさん会ってきました。母言語の中では最も重要ではないと思うかもしれませんが、それは逆です。4つの言語の中で、LISPだけがALGOLの普及した重要性に近づいているのです。

意義:見てみましょう。語彙的スコープ、構造化プログラミング、入れ子になった関数、形式的な言語仕様、コールバイネームセマンティクス、BNF文法、ブロックコメント... 今日のすべての現代言語はALGOLの影響を深く受けています。

死因:ALGOLは研究用の言語であり、商用言語ではありません。アルゴリズムを研究するために設計されたため、仕様書にはI/Oが定義されていないため、実用には向いていませんでした。確かに、コンパイラ拡張を書くことはできましたが、その場合は、他のものも追加した方がよいでしょう。

そして、それはまさに人々がやったことです。1960年から70年にかけて、人々はALGOLをI/Oや余分なデータ構造で拡張することで、膨大な数のALGOLライクなものを作りました。これにはJOVIAL、SIMULA、CLU、CPLが含まれます。その後の言語は、ALGOLを直接ではなく、これらの拡張に基づいて作られました。私たちはCを「ALGOL的」と呼んでいますが、実際にはBCPL的なもので、これはCPL的なもので、ALGOL的なものでした。ALGOLの子供たちがそれを葬ったのです。

結局、ALGOLの人たちはそれをALGOL-68にまで拡張しようとしたが、これはALGOL-60から根本的に出発したもので、同じような影響力をほとんど持っていません。ALGOL-60の系譜は、ニコラウス・ヴィルトのパスカルに引き継がれています。

APL

背景:ケン・アイバーソン、1962年。元々は配列数学のための手書きの表記法で、IBMがそれを拾い上げ、プログラミング言語として使用していました。言語として、APLは配列処理に焦点を当てました。

APLを聞いたことがある人は、おそらく「あの奇妙な記号言語」として知っているでしょう。最も有名なコードスニペットの一つは、このGame of Lifeの実装です。

life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}

こんな感じで専用のキーボードで書く必要があったんですね。

それにもかかわらず、APLは、非常に低いメモリ要件で動作するため、メインフレームで人気がありました。

意義:配列処理。2つのリストの数値を足すことがマップやループを意味していた時代に、APLは配列全体を一度に処理するというアイデアを導入しました。例えば、以下のようになります。

   1 + 1 2 3 4
2 3 4 5
   1 2 3 4 + 1 2 3 4
2 4 6 8
   2 4 ⍴ ⍳8
1 2 3 4
5 6 7 8
   1 2 3 4 +[2] 2 4 ⍴ ⍳8
2 4  6  8
6 8 10 12

これは科学界では本当に大騒ぎでした。応用数学の多くは、大きな行列の演算に行き着きます。∘.fで外積を取るだけなら、外積を取るのは本当に簡単なんだよ!

この技術革新により、APLはR、numpy、pandas、Matlabなどにつながりました。APLの直系の子孫であるJ, Dyalog, K, Qもあります。J, Dyalog, K, Qはあまり成功していませんが、今でも金融分野で多く使われています。

死因:まあ、明らかな問題はキーボードですね。アスキーで書けないなら、あまり書けないでしょう。アイバーソンはこれをJで修正しましたが、これは異なる記号の代わりにディグラフを使うものです。≠の代わりに ~: と書く。しかし、これは1990年のことで、根本的に異なるプログラミングスタイルを普及させるには少し遅かったわけです。

もっと微妙な問題は、APLとJは同種のデータでしか動作しなかったということです。文字列と数値の両方を同じデータ構造に格納することはできませんし(ボックスを使わない限り、それは全く別の問題です)、文字列を扱うのは一般的に悪夢です。つまり、データフレームがないので、現代のデータサイエンスの多くを排除しているのです。

さらに詳しく:思考ツールとしての記法

BASIC

背景:ジョン・ケメニー、1964年。元々はFORTRANのような簡略化されたもので、工学系以外の人がコンピュータを使うのを助けることを目的としていました。

BASICは、マイクロコンピュータの時代に本格的に登場しました。最初のマイクロコンピュータは "本当の"プログラミング言語をコンパイルするのに十分なメモリを持っていませんでした。BASIC は初期のプログラマーの共通言語となりました。1970年代に自宅でプログラミングをしていた人は、おそらくマイコンでBASICを書いていたことでしょう。

10 PRINT "Hello, World!"
20 END

意義:技術的に最も大きな影響を与えるのはランタイム通訳です。BASICはリアルタイムインタプリタ(ダートマス式タイムシェアリングサービス)を搭載した最初の言語であり、APLに1年の差をつけていました。そして、そのAPLシステムはIBMの顧客だけが利用できるものでしたので、実際には長い間BASICは唯一無二ものでした。

BASICはより大きな社会的影響力を持っていました。80 年代と 90 年代の影響力のあるプログラマーの多くは、最初に BASIC でプログラミングを学びました。多くの企業向けプログラムもBASICで書かれており、それがCobolの衰退を加速させたのでしょう。

BASIC には、もう一つの巧妙なトリックがあります: Officeツールです! Microsoftは最終的にBASICをVisual Basicに変え、Officeマクロ言語として使用しました。これはOpenOfficeやLibreOfficeにも広がり、特定のニッチにBASICを定着させました。が、最近では、JavaScriptに負けてしまいレガシーなマクロ言語となっています。

死因:人々はBASICを "劣った "言語として見ていました。あなたが子供や中小企業の経営者であれば使うかもしれませんが、本当のプログラマーは本当の言語を使っていました。メーカーが16k以上のRAMを搭載したマイクロコンピュータを安く作れるようになってからは、パスカルやCのような言語のためにBASICの価値を下げ始めました。

BASIC はしばらくの間、レガシーな子供向け教育言語として存続していましたが、そのニッチからも消えてしまったようです。

PL/I

背景:IBM、1966年。IBMの事業は2つの言語に分かれていました。科学者向けのFORTRANと、ビジネスマン向けのCOMTRANです。COBOLとの競争に直面し、システムを合理化したいと考えていた彼らは、エンジニアリングとビジネスの両方の目的に役立つ言語を作ろうとしました。これは結局、2つの言語のある種のスーパーセットのようなもので、その上に多くの追加機能を重ねたものでした。Yaaaaaaaay!

意義:ALGOL-68の著者は、PL/Iをあざ笑うように時代遅れの言語と呼びました。しかし、ALGOL-68がしたことはすべて、PL/Iがより早く、より良くしたことです。COBOLが最初に構造化データを取得した一方で、PL/Iは型としてそれらを実装した最初の言語でした。COBOLでは、名前のあるユーザーを読み込むと、userとnameという2つのグローバル変数が得られます。PL/Iでは、user.nameというフィールドを持つ1つの変数が得られます。PL/Iはまた、直接メモリ操作、定数、関数オーバーロードのためのポインタを持つ最初の高級言語でもありました。

これらのアイデアの多くは、BCPLとPL/Iの両方をミックスしたCを介してプログラミングの主流になりました。Cは、PL/Iのコメント構文さえも使用しています。

死因:FORTRANプログラマーは皆、COBOLに似すぎていると考え、COBOLプログラマーは皆、FORTRANに似すぎていると考えていました。IBMは、この2つの確立された言語を取り込み、より複雑な言語に挑戦しようとしていました。それは、彼らが唯一のコンパイラを持っているグループであったこと、つまり、他の誰もがベンダーのロックインに不信感を抱いていたことを意味します。IBMがこれらの問題の両方で前進することができたときには、広くコンピューティングの世界はすでにマイクロコンピュータの時代に移行しており、PL/IはBASICに競り負けていました。

さらに詳しく:PL/I の選択


コメントを読む

新着ピック  








山本 聡山本 聡5時間前フリーランスWebフロントエンドエンジニア














新着ニュース

山火事のシーズンが近づく中、AIが衛星画像を使って危険な地域を教える | TechCrunch Japan

[Terraform]Module間の値の受け渡しについて | Developers.IO

アマゾンのEcho Lookは役目を終えて2020年7月には機能停止 | TechCrunch Japan

ARでソーシャルディスタンスを確保するグーグルの実験 | TechCrunch Japan

消費者データの質をスコアリングするTruthsetが約5億円調達 | TechCrunch Japan

「1万円台のオーブンレンジ」おすすめ3選 温めも焼きもバッチリ!【2020年最新版】

米国時間6月4日にPlayStation 5のローンチタイトルが発表 | TechCrunch Japan

Twitterが「暴力を称える内容」とトランプ大統領のミネアポリスに関するツイートに再び警告 | TechCrunch Japan

楽天モバイルの弱点を突く「UQ mobile」の新料金プラン “サブブランド化”も意識

SpaceXの試作機が地上でのエンジンテスト中に爆発 | TechCrunch Japan

ソニー、PS5の新作ゲームを6月5日のバーチャルイベントで初披露

江本孟紀が語る「指導者・野村克也」の人材育成法

“ニューノーマル”を迎えて初めての週末を迎えた秋葉原

Amazon CloudFrontのデフォルト上限値が更に更に大幅アップしました!(2020初夏) | Developers.IO

Xiaomiの新スマホ「Mi Note 10 Lite」「Redmi Note 9S」が日本上陸 コスパ重視のミッドレンジ機

Fargate1.4.0のアーキテクチャ変更によりコンテナ実行スピードに変化はあるのか検証してみた! | Developers.IO

BigQuery でテーブル名やカラム名などの更新できない項目を変更するにはどうすればいいか確認してみた | Developers.IO

「ネックスピーカー」おすすめ3選 肩掛けスタイルでいい音を【2020年最新版】

B2BクラウドコンピューティングサービスのMirantisがDocker Enterpriseのメジャーアプデを公開 | TechCrunch Japan

ストリーミングサービス運営のPlexが共同視聴機能を提供、同社ライブラリのほかユーザーのコンテンツを一緒に楽しめる | TechCrunch Japan

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

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