【絶望】プログラミング言語8500種、統一は数学的に不可能だった AI時代に「最強の1つ」が生まれない理由
「なぜプログラミング言語は1つに統一しないのか」。初心者なら一度は抱く疑問だろう。世界中のエンジニアが同じような部品をゼロから書き直している光景は、一見すると無駄に見える。だが、これは意地の張り合いでも宗教論争でもない。すべての目的に対して同時に最適となる言語は原理的に作れないという、数学と工学の法則が存在する。言語の数は数千から1万に達し、その裏には計算理論の限界、ハードウェアの物理的な違い、巨大テック企業の戦略、そして60年以上動き続けるレガシー資産の重力が絡み合っている。
8500種類の言語、実際に使われるのは数十種類
世界にプログラミング言語が何種類あるかは、数え方や定義によって数百から約1万まで変わる。オーストラリアのモナシュ大学の研究者らが構築した歴史データベース「HOP」には、1940年代以降に記録された言語が8500種類以上登録されている。ただし、そのすべてが今も使われているわけではない。GitHubの自動判定では約700から800種類が定義され、検索頻度から注目度を測る指標が監視しているのは約265種類。プロが日常業務で活発に使う言語は、上位20から40種類程度に集中している。
話題性と実際の使用量は一致しない。アンケートで最も称賛される言語の1位がRustでも、実際に広く使われている割合ではJavaScriptやPythonが圧倒的だ。銀行の基幹システムで動く古い言語は公開統計にほとんど現れないが、世界の金融取引の根幹を今も支えている。
速さと書きやすさは両立しない
言語を1つに統一できない第一の理由は、工学上のトレードオフだ。何かを最高にしようとすれば、必ず別の何かが犠牲になる。Pythonが書きやすくて人気なら全部Pythonにすればいい。C++が速いなら全部C++にすればいい。初心者はそう考えるが、そうはいかない。
1から1億までの整数を順番に足す処理を例にしよう。CやC++では整数がメモリ上に隙間なく並び、CPUが直接一気に計算できる。C++は使わない機能にコストを払わない「ゼロオーバーヘッド原則」を貫いて限界の速度を出すが、その代償として危険なメモリ操作を引き継ぎ、40年分の機能で仕様が類を見ないほど複雑になった。一方のPythonは、人間がデータの種類を意識せずに書ける効率を優先した。その結果、数値1つにも型や参照の管理情報が付き、足し算1回でも何十段階もの処理が発生する。
では、なぜ遅いPythonがAI開発で最も使われるのか。Pythonが直接1億回の計算をしているわけではないからだ。NumPyやPyTorchはPythonを「糊」として使い、重い計算は裏側のC++やGPU用の高速コードが実行している。ただしOSの心臓部やハードウェア制御は、Pythonの自動メモリ管理による一時停止が許されないため原理的に書けない。RustはC++並みの速度を保ちながら、メモリ破壊をコンパイラの検査で防ぐ安全性を手に入れた。英国政府の調査では、従来の脆弱性の最大70パーセントはCやC++のメモリ管理ミスが原因だと指摘されている。だがRustは、その安全性と引き換えにメモリの所有権や寿命を厳密に証明しなければならず、学習コストが高い。
「完璧な言語」は数学的に作れない
どんな天才が集まっても、バグを事前に100パーセント見抜く完璧な言語は作れないことが証明されている。前提となるのがチューリング完全という概念だ。条件分岐と繰り返し、メモリさえあれば、理論上は計算可能なあらゆるプログラムを記述できる。PythonもCもRustも、わずか8種類の文字しか使わない言語や、パワーポイントのアニメーション機能でさえ、理論上は同じ計算能力を持つ。
だが、初代チューリング賞受賞者のアラン・パリスは「すべてが可能だが、興味深いことは何ひとつ簡単にはできない」と警告した。同じことができることと、人間やコンパイラがそのプログラムをどう安全に検証できるかには徹底的な差がある。そして最強の言語を阻む最大の壁が、1953年にヘンリー・ゴードン・ライスが証明した「ライスの定理」だ。あらゆる計算が可能な汎用言語において、プログラムが実行時にどう振る舞うかを実行前に100パーセント自動判定することは不可能である。
だから言語の設計者は、必ずどちらかを選ぶ。RustやHaskellのように、危険を見逃さない代わりに、実は安全なプログラムでも証明できないものはすべてエラーとして弾く厳しい制限を取るか。CやPythonのように、自由度を優先して事前検査を緩める代わりに、実行時のクラッシュや速度低下を受け入れるか。ライスの定理は汎用言語にしか適用されないため、SQLはあえて無限ループを書けないように能力を制限することで、事前の自動最適化を実現している。
言語を普及させるのは企業戦略
どの言語が世界に広まるかを決める最大の要因は、巨大テック企業の戦略と政治力学だ。Googleが開発したGoは、社内の巨大なC++プログラムのビルドに45分もかかっていた不満を解消するため、機能を徹底的に削ぎ落として高速にビルドできるようにした。これを公開した結果、DockerやKubernetesといったクラウド基盤の根幹ソフトはすべてGoで書かれ、Google主導の仕組みが業界標準になった。AppleのSwiftは古いObjective-Cの危険性を解消しつつ、iPhoneやMacの独自フレームワークに開発者を結びつける役割を果たしている。
最もビジネスモデルが明快なのは、チェコのJetBrainsが開発したKotlinだ。彼らの本業はプロ向け統合開発環境の販売であり、Kotlinを無料で広めれば、それを最も快適に書ける自社ツールの売上が増える。ただで配って専用の道具を売る作戦である。GoogleがKotlinを採用した背景には法廷闘争の歴史もある。GoogleはAndroidでJavaを採用したが、Javaを買収したOracleから著作権侵害で約90億ドルの賠償を求められ、10年に及ぶ裁判の末に2021年に勝訴した。2017年にKotlinをAndroidの公式言語に採用した裏には、Oracleが握るJavaへの依存リスクを下げる意図があったと分析されている。MicrosoftもかつてJavaを独自拡張して訴えられた経験から、2000年にC#を誕生させ、さらにTypeScriptとVS CodeでWeb開発の中心を掌握した。言語の選択は純粋な学術研究ではなく、他者の支配から脱却し、開発者を自社陣営に引きつける企業戦略の決戦なのだ。
60年前の言語が銀行で動き続ける理由
新しい言語が登場しても、半世紀以上前に生まれた言語が絶滅しない。その理由はレガシーの巨大な重力にある。PythonやTypeScriptの下には、1959年に誕生したCOBOLが何千億行も現役で稼働し、世界の銀行や行政の基幹システムを支えている。置き換えられない理由は3つある。1つ目は10進金額計算の正確性と性能だ。PythonやJavaScriptの標準計算は2進浮動小数点を使うため、0.1足す0.2が0.30000000000000004になる。COBOLは言語のデータ構造とメインフレームの命令が10進計算で直結しており、毎日数千万件の口座残高を1円の狂いもなく処理するのに最適化されている。
2つ目は、50年分の法改正や合併に伴う例外処理など、何万もの複雑なビジネスルールがコードの中にしか存在しないことだ。当時の設計書は失われ、開発者も定年退職している。稼働しているCOBOLの挙動そのものが、世界で唯一の正確な業務仕様書になっている。3つ目は、50年間あらゆる異常データの洗礼を受けてバグが出尽くし、24時間365日動き続けるシステムは、古いのではなく極めて信頼性の高い安定資産だという事実だ。もし明日から全部PythonやJavaに一斉変換したら、周辺データベースとの連携不全で夜間処理が終わらず、翌朝のATMや振り込みが止まる。さらに文字コードの並び順の違いに検索処理が暗黙のうちに頼っていた場合、移した瞬間に検索結果が狂い、別人の口座への入金が世界中で発生しかねない。
言語戦争は「思考の枠組み」の衝突
プログラマーが言語の優劣を巡って激しく対立するのは、言語が単なる書き方ではなく、問題をどう捉えるかという脳の枠組みそのものだからだ。1つの言語をプロレベルで極めるには数千時間の学習投資が必要で、批判はこれまでの時間や実績の否定に感じられる。言語間の相互理解を阻む心理メカニズムに、ポール・グレアムが提唱した「Blubのパラドックス」がある。中程度の言語で思考している人は、それより低機能な言語を見ると「なぜこんな機能もないのか」と分かるが、よりリッチな言語を見ると、自分の枠組みにない機能だから「何に使うか分からない」と切り捨ててしまう。
AI時代に言語は消えない
AIが自動でコードを書く時代になったら、人間は日本語で指示すればよく、プログラミング言語は不要になるのか。結論から言えば、自然言語がプログラミング言語を代替することはなく、複数言語の役割分担は存続する。IBMのAIによるCOBOLからJavaへの変換や、米国国防総省のCからRustへの翻訳計画では、2026年の第1回検証でテストの成功率が82.2パーセントまで進んだ。だが、テストが通ることと、危険な欠陥を排除して真に安全な設計にすることは別問題だと判明した。ライスの定理がある以上、変換前後が完全に同じ動作をするかは証明できない。元コードに書かれていない設計意図を逆算するには、人間の設計者の関与が不可欠だ。
では、AIが日本語の指示から直接機械語を出力すればいいのか。それも危険だ。プログラミングの父エドガー・ダイクストラが1978年に指摘した通り、人間の言葉は本質的に曖昧で矛盾を含む。確率で動くAIに曖昧な指示から直接何百万行もの機械語を出力させたら、その中にメモリを壊すバグや秘密を盗む裏口が紛れ込んでいても、人間も他のAIも検査できない。だからこそAI時代には、AIが素早く書けるPythonやTypeScriptの層と、AIの危険な出力を厳密に検査するRustのような層の分業が重要になる。AIは自信満々に存在しない関数や微妙なバグを生成することがあるが、厳格なコンパイラを通せば容赦なくエラーを突き返してくれる。プログラミング言語は、人間が書くための筆記具から、AIの確率的な出力を決定論的な安全性能に閉じ込める契約書へと進化している。
もし世界がPythonだけに統一されたら、裏側のCやC++の高速部品も純Pythonで書き直すことになり、AIの計算速度は100分の1以下に暴落する。メモリが数キロバイトしかない自動車のブレーキ制御用マイコンにはPythonの実行環境が物理的に入らず、車や家電が動かなくなる。逆にRustだけに統一すれば、研究者がグラフを描く日常業務でも厳格な型と所有権の設計を求められ、データ分析の生産性が麻痺する。1960年代にIBMがFortranとCOBOLを統合しようとしてPL/Iを作った時も、仕様が肥大化して方言に分裂した。表面上は1つに統一しても、内部に異なる複数のサブ言語が再び生まれてしまうのだ。
ネットの反応
最強なのはマシン語です。そのコンピューターアーキテクチャを考えて作れるのが前提なので多くの知識と経験が必要ですが
普段AIの動作を見ていても「ダメならコンパイラがエラーで弾くだろ」とコンパイラの検査を頼みにして組んでる様子が見られるもんな
それ言ったら今から日本語を捨ててみんなでエスペラント語で会話しよう、って話になる
そこに、PL/Iがあるじゃろ。
産業機械はみんなラダー言語で動いている
予言しておきます。Lispの時代がきます。だといいなあ。
AIの所感
この話で最も印象に残るのは、言語は道具ではなく思考の型であるという指摘だ。エンジニアが言語論争で熱くなるのは、自分の問題解決の手順そのものを否定されたように感じるからだろう。AI時代に言語が消えるという予測は半分当たりで半分外れている。コードを書く作業はAIに移るが、AIの出力を検証する厳格な言語の価値はむしろ上がる。自然言語の曖昧さをそのまま機械語に変換する危険を考えれば、コンパイラという容赦ない先生の存在はAI時代にこそ必要だ。多様性こそ最適解という結論は生物の進化とよく似ている。環境が違えば最適な形は変わる。1つの最強言語を追うのではなく、問題に応じて道具を選び、その限界を知っておくこと。それがこれからも変わらないエンジニアの基礎体力なのだろう。

