世界を動かす技術を、日本語で。

主に死にかけている影響力のあるプログラミング言語(2020年)

2025年7月13日原文(hillelwayne.com)

概要

この記事では、歴史的に重要だが現在は「ほぼ死んでいる」とされるプログラミング言語について解説します。各言語の背景、技術的意義、衰退の理由を簡潔にまとめます。影響の検証方法や、言語間の影響関係の見極め方にも触れます。現代の主流言語に受け継がれた要素も強調します。「忘れられた」言語の価値再発見を目的としています。

忘れられた歴史的プログラミング言語の意義

  • 歴史的な重要性 を持ちながら、現代ではあまり使われていないプログラミング言語の解説
  • COBOL、ALGOL、APL、BASIC、PL/I などが代表例
  • それぞれの言語が 現代のプログラミング やツールに与えた影響の整理
  • 衰退の理由 や、なぜ「死んだ」と見なされるのかの考察
  • 技術的・社会的な意義 の再評価

言語の影響をどう検証するか

  • 「最初に発明した」「最初に普及させた」 の違いの認識
  • 影響の確実な証拠は 引用(citation) に基づく
    • 言語Yのマニュアルが言語Xを参照
    • Yの論文がXを引用
    • Yの作者が「Xに影響された」と明言
  • 引用は推移的 で、複数段階の影響も追跡可能
  • 言語間の類似構文(cognate) からも影響を推測
    • 例:RubyのselectメソッドはSmalltalkの影響
  • ただし 独立発明や共通祖先 の可能性も考慮

COBOL

  • 1960年、CODASYLによる開発
    • 業務用の標準高水準言語を目指し誕生
  • レコード型データ (構造体的データ)の導入
    • FORTRANやALGOLにはなかった階層的なデータ構造を自動分解
  • 現代言語への直接的な構文的影響は少なめ
    • しかし 業務システムの基幹 として今も稼働
  • 衰退理由
    • 他言語との交流や発展が少なく、後継言語にDNAが引き継がれず
    • 複雑すぎてコンパイラ開発が遅れ、他言語に市場を奪われた

ALGOL

  • 1960年、ALGOL委員会による設計
    • アルゴリズム記述用の「形式化された擬似コード」
  • レキシカルスコープ、構造化プログラミング、ネスト関数 など現代言語の基礎を多数導入
  • BNF記法やブロックコメント などもALGOL由来
  • 衰退理由
    • 研究用途に特化し、I/O未定義で実用性に乏しかった
    • 拡張版(JOVIAL, SIMULA, CLU, CPLなど)が派生し、直接の子孫よりも拡張言語が普及
    • ALGOL-68は大きく仕様変更し、影響力が低下

APL

  • 1962年、Ken Iversonによる開発
    • 元は配列数式記法、後にIBMで言語化
  • 配列処理 を言語の中心に据え、短い記述で大規模数値演算が可能
    • 科学計算や金融分野で大活躍
  • 独自記号キーボード が必要で普及に壁
  • 現代のR、numpy、pandas、Matlab などに大きな影響
  • 衰退理由
    • ASCII非対応、異種データ混在不可、文字列処理の弱さ
    • 後継のJは記号を排除したが普及は限定的

BASIC

  • 1964年、John Kemenyによる開発
    • 非エンジニア向けにFORTRANを簡易化
  • リアルタイムインタプリタ を初めて実装
  • マイクロコンピュータ時代の標準言語 となり家庭・教育現場で普及
  • 社会的インパクト が大きく、多くの著名プログラマの入門言語
  • Visual Basic としてOfficeマクロ言語に発展
  • 衰退理由
    • 「子供向け」「低レベル」と見なされ、ハード進化とともにPascalやCに置き換え

PL/I

  • 1966年、IBMによる開発
    • FORTRANとCOBOLを統合し、科学・業務両用を目指す
  • 構造体型データ、ポインタ、定数、関数オーバーロード など多数の先進機能を初実装
    • C言語への影響も大きい(コメント構文等)
  • 衰退理由
    • FORTRAN派にはCOBOL寄り、COBOL派にはFORTRAN寄りと不評
    • IBM独占のコンパイラ提供によるベンダーロックイン不信
    • マイクロコンピュータ時代にBASIC等に敗北

まとめ

  • 「ほぼ死んでいる」言語にも現代に続く重要な技術や発想が多い
  • 現代プログラミングの礎 となった構文や概念の再発見
  • 歴史を知ることで技術の本質理解が深まる

Hackerたちの意見

COBOLが「死んだ」言語とか「ほぼ死んでる」言語だって言うのはおかしいよね。だって、今でも世界中のビジネス取引の70%以上を処理してるんだから(約8000億行のコードがあって、まだ増えてるし)。例えば、ここを見てみてね。https://markets.businessinsider.com/news/stocks/cobol-market....

BASICはMicrosoft Officeで使われてるスクリプト言語だよ。これが何百万ものビジネスを支えてるって言っても、誇張じゃないと思う。Pascal、特にDelphi/Object Pascalのバージョンも、今でも広く使われてるよ。

もしかしたら、彼らの定義は最近の人気や新しいプロジェクトの数を基準にしてるのかもね。その定義だと、「死んでる」って呼ぶのはかなり安全だと思う。

誰もCOBOLで新しいプロジェクトを始めてないよ。

COBOLが先駆けた大きなことが一つあるんだ。それは、プログラムだけじゃなくてデータも機械間でポータブルでなきゃいけないってこと。機械が異なる文字コードを使ってた時代に、COBOLはポータビリティの問題を大幅に減らすように設計されたんだ(完全には解決できなかったけど)。今では当たり前になってるけど、当時は革命的だったよ。部分的にはUnicodeやIEEE 754を義務付けるようになったけど、今ではほとんどの言語がポータビリティを推奨してる。Windowsのx86_64からLinuxのARMv8にアプリケーションを移動するのも、(GUIの混乱を除けば)あまり気にしないけど、COBOLが作られてた頃は新しい機械に移るときにはプログラムを捨てて(「再プログラミング」)たんだ。50年間COBOLを使ってないけど(教えたのも40年前)、そのポータビリティへのこだわりには本当に感謝してる。

COBOLのもう一つの大きな特徴は、高精度(つまり多くの桁数)の固定小数点演算だね。大きな金額でもペニーを失わないし、さらに定義された演算がポータブルにできるってのは、金融業界では強力な特徴だよ。JavaやC++、他の言語でも近いものを作るには特別な数値型が必要なんだ。

Pythonのインデントって、どこかでCOBOLに影響されてるの?

今は新しい言語エコシステムに移るとき、すべてを捨てる感じだよね。CPUみたいに言語の一部が整合性を持つようになって、いくつかの構文が言語間でポータブルで互換性があればいいな。

COBOLのもう一つの魅力的な点は、ALGOLの影響を積極的に拒否した唯一のプログラミング言語だってことだね。関数や手続きはなくて、ローカル変数の概念もない。一般的に、ラベル付き文以外の抽象化の機能は全くないんだ。ブロック構造の制御フロー(条件文やループ)は、80年代後半になってようやく追加された。

誰かが「ビッグエンディアンとリトルエンディアンを使うことにしよう」って決めるまで、そしてこの新しいインターネットが正しいビッグエンディアンの順序を使うことになったんだよね。

じゃあ、私も反論するね。MLはほとんど死んでないよ。SMLとOCamlの2つの主要な方言に進化したんだ。OCamlは今でも元気だし、SMLがほぼ死んでるかどうかは議論の余地がある。でも、私が一番言いたいのは、そのセクションの最後の文が、Haskellの誕生がSMLを殺したみたいに聞こえること。みんなが突然、純粋で遅延評価のFPだけを欲しがるようになったからって。それは間違いだよ。実際には、これら2つの機能型プログラミングの系統(厳密/不純と遅延/純粋)は、今でも一緒に進化し続けてるんだ。

F#ってMLの影響受けてるんじゃない?

Hacker Newsで議論の続きを見る