OVERALL COMPARISON · 2026-09-01
同じ「言語」でも、保証している層が違う。
元のチャットは Nix対Rust、Rust対Java のように 1 対 1 だった。このサイトはその集合を一度に並べ、
「どれが強いか」ではなく 何をコンパイル時に証明し、何をランタイムに任せ、何を人間の規約に残すか で切る。
対象は汎用言語だけでなく、構成 DSL(Nix)と記号計算環境(Mathematica)を含む 17 個。
調査日 2026-09-01
17 技術
1v1 ではなく横断比較
Gemini 共有チャットを再調査して拡張
読み方。
Nix はパッケージと OS 構成の DSL であり、Rust や Java の代替ではない。LISP は単一処理系ではなく家族名。
TypeScript は実行時を持たない。Mathematica はプロプライエタリな知識カーネルである。
表の「現行」は 2026年9月1日時点の安定・主流であり、ベンチマーク数値は載せていない(環境依存が大きすぎるため)。
全体地図
17 個を用途と実行基盤で 6 群に分けた。隣接する群ほど問題領域が近い。対角線上(例: Lua と Mathematica、Go と Swift)はしばしば 1v1 にされるが、最適化目標が違う。
横断比較表
行をクリックすると、下の言語プロフィールへ飛ぶ。群で絞り、キーワードで検索できる。
軸で見る(全体)
ここが 1v1 との違い。各軸で 17 個の位置を一度に置く。
1. 正しさはどのフェーズで確定するか
言語を「速い/書きやすい」で並べると必ず例外が出る。横断で安定しているのは、
エラーと不変条件をいつ確定させるか である。
- コンパイル時にほぼ閉じる: Rust(所有権・Send/Sync)、Swift 6(Optional と厳格並行)、C++(ただし未定義動作は残る)、Kotlin(Null)、C#(公称型+ nullable 注釈)、Go(型はあるが nil は残る)、Java(型はあるが NPE は残る)、TypeScript(strict なら欠如値は型に載るが、実行時には消える)。
- 実行時に型と状態を見る: Python, Ruby, PHP(ただし PHP は宣言型を実行時検査する), JavaScript, Lua, 多くの LISP。
- 評価時(ビルド時): Nix。属性欠落は「コンパイルエラー」ではなく評価・ビルドで発火する。
- 規則が尽きるまで: Mathematica。未知記号は失敗ではなく未評価のまま残る点が、通常の言語の「未定義変数」と違う。
実務的な帰結: 大規模改修と並行バグを型で潰したいなら左寄り(Rust / Swift / Kotlin / C#)。
ホストへの組み込みと短い反復なら右寄り(Lua / JS / PHP)。Nix と Mathematica はこの軸の両端の外側にあり、汎用言語ランキングに入れない方が正確である。
2. メモリ: 誰が、いつ、解放するか
解放のタイミングは「速さ」より「尾部レイテンシとデバッグ」を決める。
- スコープで決定論的: Rust と C++ の RAII。所有者が消えた瞬間に Drop / デストラクタ。Swift / Objective-C の ARC も「カウントがゼロの瞬間」であり GC ではない。循環参照だけは弱参照が要る。
- ランタイム GC(停止を設計する): Java はコレクタを選べる(G1 / ZGC / Shenandoah)。Go は低停止の並行マークを既定にする。C# は GC に加え struct / Span でヒープを避けられる。Kotlin はターゲットの GC に乗る。Python / Ruby / JS / LISP / Lua も GC だが、アルゴリズムと世代設計が違う。
- 参照カウント+α: CPython はカウントが主、循環だけ別 GC。PHP もカウントが主で、リクエスト終了時にヒープごと捨てる。
- リクエスト境界: PHP の Share-Nothing は、言語の GC 品質より「プロセスをまたいで漏らさない」ことで運用安全性を買う。Ruby の常駐は逆で、ウォームアップ後のスループットと引き換えに断片化とリーク監視が要る。
- ストアが不変: Nix はプロセス内 GC ではなく、ハッシュ付きパスの不変オブジェクトとして成果物を置く。
2026年の動き: Java 25 LTS で世代別 ZGC がより現実的になり、JDK 26 は G1 の同期削減と AOT オブジェクトキャッシュを足した。
Python 3.14 の公式 free-thread は GC/GIL 設計の転換点だが、未対応 C 拡張は GIL を戻す。
Lua 5.5 はメジャー GC も増分にした。
3. 並行: スケジューラを誰が持つか
- 型がデータ競合を拒否: Rust の Send/Sync。Swift 6 の actor と厳密並行。C++ はデータ競合が未定義動作であり、拒否しない。
- M:N 軽量スレッド: Go の GMP(数 KB から伸びる Goroutine)。Java 21 以降の仮想スレッド(同期コードのまま数百万)。Kotlin コルーチン(コンパイラ変換+ディスパッチャ)。
- 単一スレッド+キュー: JavaScript / TypeScript。マイクロタスクがマクロタスクより先。真の並列は Worker(別ヒープ)。
- ロック付きバイトコード: CPython 既定は GIL。3.14 で opt-in の free-thread が公式サポート(PEP 779)。Ruby は GVL+Ractor。どちらも「言語が並列を禁じている」のではなく「実装が参照カウントを守っている」。
- プロセスが単位: PHP-FPM。Lua の OS スレッドはホスト持ち、言語側はコルーチン。
- 色分け問題: JS/TS、Python asyncio、Rust async は関数が同期/非同期に分かれる。Java 仮想スレッドと Go の同期 API はこの分割を避ける側。
4. 型: 名前か、形か、実行時か
- 公称型: Java, C#, Swift, Kotlin, C++。宣言された関係がないと、中身が同じでも別型。
- 構造的型: TypeScript(プロパティが揃えば適合)、Go のインタフェース(メソッド集合)、Objective-C の id はさらに動的。
- 所有権付き静的: Rust。型だけでなくエイリアス規則が型システムに入っている。
- 動的+強い: Python(
1 + "2" は TypeError)。
- 動的+弱い: JavaScript(同じ式は
"12")。
- 漸進的で実行時検査: PHP の引数・戻り値・プロパティ型。
- 外付け: Ruby の RBS/Sorbet、Python の型ヒント(実行を変えない)、TypeScript(出力から消える)。
- パターンが型の代わり: Mathematica。LISP マクロは「型」より「変換規則」。
ジェネリクスも横断で分かれる。Rust / C++ / C# の値型は単相化(コード複製、ボクシングなし)。
Java / Kotlin(JVM) / TypeScript / Objective-C lightweight generics は型消去。
消去系は実行時に T を問えず、単相化系はバイナリが膨らむ。
5. 実行エンジン: いつ機械語になるか
- AOT: Rust, C++, Go, Swift, Objective-C。起動は速く、プロファイル不足の初速最適化は弱い。
- バイトコード+長寿 JIT: Java / C# / Kotlin(JVM)。HotSpot は単態呼び出しを脱仮想化でき、仮定崩壊で脱最適化する。数時間動くサーバ向け。
- 多層 JIT の動的言語: V8(JS/TS の出力)、YJIT/ZJIT(Ruby)、PHP の Tracing/IR JIT。形状や型が安定しないと脱最適化する点は JVM と似る。
- 適応インタプリタ: CPython 3.11+ の特殊化オペコード。3.14 は実験的 JIT を公式バイナリに含むが、主役はまだ評価ループ。
- レジスタ VM: Lua。命令が少なく、組み込みに向く。LuaJIT は別実装。
- トランスパイル: TypeScript → JS。意味はホストエンジンのまま。
- 書換えエンジン: Mathematica。Nix 評価器。どちらも「命令列を走らせる」より「式を正規形まで変形する」。
6. コードをデータとして扱えるか
メタプログラミングの強さは、大規模安全性とトレードオフになることが多い。
- 同図像性: LISP の S 式、Mathematica の
Head[args]。プログラムをリスト/式として読み、マクロや規則で変形する。
- 実行時オブジェクトモデル: Ruby のオープンクラスと
method_missing。Objective-C の swizzling。JS の Proxy。
- コンパイル時生成: C++ テンプレート(チューリング完全)、Rust 手続きマクロ、C# ソースジェネレータ、C++26 リフレクション。
- 型安全 DSL だが文法は固定: Kotlin のレシーバ付きビルダー。Swift の Result Builder。
- 最小核+テーブル: Lua メタテーブル。言語を太らせず、ホストが意味を足す。
- 意図的に弱い: Go(go generate まで)。言語を増やさないことがスケール戦略。
7. 2026年に動いた線
元チャットの 1v1 は原理中心だった。こちらは調査日時点で追加した変化だけを短く置く。
- Python 3.14: PEP 779 で free-threaded が公式サポート。単スレッド税はおおよそ 5–10%。既定ビルドはまだ GIL 付き。C 拡張未対応は GIL 再有効化。
- Java: 25 が LTS(2025-09)。仮想スレッドは 21 から安定、Scoped Values は 25。26(2026-03)は HTTP/3、G1 改善、構造化並行はまだ preview。
- Rust: 1.98.0(2026-08-20)。Edition 2024 が通常の選択肢。
- Go 1.27: 2026-08。言語を太らせず実装・標準ライブラリ中心、という慣例を維持。
- PHP 8.5: 2025-11。pipe、
clone with、URI 拡張。8.4 のプロパティフックの延長。
- Ruby 4.0: ZJIT と Ruby Box など、CRuby の次の実行基盤。
- C# 14 / .NET 10: 2025-11。extension members と Span の言語サポート。
- Lua 5.5.1: 2026-08-03。グローバル宣言と増分メジャー GC。
- Kotlin 2.4 / K2: マルチプラットフォームとフロントエンド刷新が前提になった。
- C++26: 規格は進行中。リフレクションとコントラクトがコンパイラ側で見え始めている。
- TypeScript: 意味論よりコンパイラ速度(ネイティブ移植)が争点。実行は引き続き JS。
言語プロフィール
表より一段深いメモ。1v1 の勝者表ではなく、その言語が引き受ける不変条件。
用途から選ぶ(全体)
「A より B」ではなく、問題の拘束条件から候補群を出す。
メモリとデータ競合を静的に閉じたい
第一候補は Rust。Swift はクライアントと値型。C++ は同等の制御だが証明は自分持ち。Java/Go は速さは出ても競合は型が拒否しない。
何年も動く巨大サーバ
Java(仮想スレッド、選択可能な GC、JFR、後方互換)。C# も近い層。Go は運用単純さと 1 バイナリ。Kotlin は JVM 資産を薄い構文で使う。
クラウド基盤・CLI
Go がこの集合の重心。Rust は性能と安全性が要るコンポーネント。Nix はアプリではなく、そのビルドと開発者環境を固定する。
Web リクエスト
PHP はプロセス境界で漏れを切る。Ruby は常駐+メタプロ(Rails)。JS/TS はイベントループ。Python はフレームワーク資産。Kotlin/Java/C# は長寿 JVM/.NET。
ブラウザと大規模 JS
実行は JavaScript。型と改修は TypeScript。C# の公称型や具象化ジェネリクスはここには来ない。
Apple クライアント
新規は Swift。既存とランタイムハックは Objective-C。C++ はゲームエンジン核。.mm で両者を混ぜられる。
ホストに埋め込む
Lua がこの 17 個の中で最も意図が明確。フットプリントと C API のため。Python は埋め込み可能だが核が大きい。
データ・科学・記号
数値と ML の生態系は Python。厳密な記号変形と内蔵アルゴリズムは Mathematica。言語を問題に合わせて伸ばすなら LISP 族。
再現可能なビルド
Nix(および flakes)。他言語の代替ではなく、Rust の crane や Java の固定ツールチェーンのように直交する層。
Android / 共有モバイル
Kotlin(公式推奨、KMP)。Java はまだ基盤。Swift は Apple 側。Rust は共有核のネイティブライブラリとして使われる。
出典と限界
元にした会話は Gemini 共有(Nix–Rust, Rust–Java, Ruby–PHP, C++–Objective-C, JS–Python, TS–C#, Java の優位, Go–Swift, Kotlin–LISP, Lua–Mathematica)。
再調査で公式リリースノートを優先した:
Python 3.14.7 / What’s New in 3.14(PEP 779)、
OpenJDK JDK 26、
Rust 1.98.0 blog(2026-08-20)、
Go 1.27 release notes、
PHP 8.5 announcement、
Lua 5.5.1 versions ページ、
Microsoft Learn「What’s new in C# 14」。
Ruby 4.0 / Kotlin 2.4 / Swift 6 / C++26 / TypeScript ネイティブコンパイラは、公式と二次情報を併用しており、処理系のマイナー版は週単位で進む。
含めていないもの: 合成ベンチマーク、給与、人気投票の順位(調査時点で揺れ、この 17 個の設計差を説明しない)。
LISP と「Java が優れている点」は家族・プラットフォームの話であり、単一処理系の行と列の粒度が他と揃わない。表ではその旨を区分に書いた。