メディア

「C言語はもう言語じゃない」あるプログラマーの主張が妙に納得できる理由:867th Lap

半世紀以上にわたりOSやライブラリの基盤として使われてきたC言語。歴史的に重要で今なお現役の大御所言語に、あるプログラマーは「もはやプログラミング言語ではない」と言い切った。その理由とは。

» 2026年02月13日 07時00分 公開
[キーマンズネット]

 C言語は1970年代、UNIX開発のために誕生したシステムプログラミング言語だ。ハードウェアに近い低水準操作と高い移植性を両立し、メモリを直接扱える自由度の高さと軽量さを強みに、OSや組み込み機器、各種ライブラリの基盤として長年にわたり利用されてきた。

 誕生から半世紀近くが経過した現在も、Linuxカーネルをはじめ、多くのOSやミドルウェアは今もなおC言語で実装されている。Rustなどの新世代の言語が台頭する現在でも、性能と互換性、そして膨大な既存資産という現実的な要因から、Cが選ばれ続けている状況は変わらない。

 だが、あるプログラマーは大御所のC言語に対して、「もはやプログラミング言語ではない」と断言する。長年“言語”として親しまれてきたCだが、一体、どういうことか?

 「Cはもはや言語ではない」と主張しているのは、プログラマーのアリア・ディザイアーズ氏だ。同氏が2022年3月に自身のブログ「Faultlore」に投稿した記事「C Isn’t a Programming Language Anymore」(Cはもはやプログラミング言語ではない)が、2026年2月上旬にインターネットで取り上げられ、議論を呼んだ。

 ディザイアーズ氏は、「Cはもはや単なる一つのプログラミング言語ではない。汎用(はんよう)言語が従わざるを得ない共通プロトコルだ」と言う。例えば、仮に「Bappyscript」という架空の言語でLinux向けのプログラムを書いたとしても、そのプログラムがOSとやりとりする際には、最終的にCで定義されたABI(アプリケーション・バイナリ・インタフェース)のルールに従わなければならない。ABIとは、プログラムがOSや他のプログラムとどのような形式でデータを受け渡し、関数を呼び出すかを定めた取り決めのようなものだ。

 実際、RustやSwift、Pythonなど多くの言語は、Cの関数やライブラリを呼び出すための仕組み(FFI:Foreign Function Interface)を標準機能として備えている。つまり、開発には別の言語を用いていたとしても、OSと接する部分ではCの取り決めに従って動作している。言い換えれば、「どの言語も最終的にはC言語を介してOS“対話”している」ということだ。

 ディザイアーズ氏が言う「Cと話す」とは、単にCのコードを書くことを指すのではない。Cで定義された型や関数の意味を正確に理解し、データのメモリ上の並び方(メモリレイアウト)を一致させ、さらにABIの規則に沿って関数を呼び出すことまで含まれる。

 とはいえ、これを正確に実行するのは容易ではない。まず、Cのヘッダファイルは複雑で、そこに書かれた定義を他の言語から正しく解釈するのは難しい。さらに、CのABIは単一の明確な仕様として存在しているわけではない。整数型のサイズやデータの配置(アラインメント)はプラットフォームごとに異なり、OSやコンパイラごとに事実上異なるABIが存在する。これを踏まえ、氏は「CのABIはウソだらけだ」と主張している。

 この前提に立つと、言語実装者に残される選択肢は大きく2つに分かれる。

 一つは「完全降伏」だ。コンパイラやランタイムそのものをCで実装する、あるいはClangやGCCといった既存のCコンパイラ基盤の上に新しい言語を構築する方法だ。Cの仕組みに全面的に従うことで、ABIの問題を事実上C側に委ねるアプローチだ。

 もう一つは、ディザイアーズ氏が「Lie, Cheat, and Steal」(ウソをつき、ごまかし、盗む)と呼ぶ対応策だ。Cのヘッダ定義を手作業で書き直し、型のサイズやメモリレイアウトを実質的に固定する方法だ。実際、RustやNimといった言語でも、多くの基本型がこのように手動で定義されている。いずれにしても、Cとの互換性を保つためには相応の妥協が避けられない、というのが氏の主張だ。

 だが、どちらの方法も決定打とは言えない。Cはあまりに広範に浸透しており、もはや改良を重ねて進化させる「一つの言語」というより、壊すことのできない「プロトコル」、それが氏の結論だ。Cの歴史的成功は絶大だったが、その成功故に、他の言語の設計や進化の方向性までも事実上制約している、ということだ。

 インターネット上の議論でも、この問題提起に理解を示す声が多く聞かれる。一方で、「だからといってCが終わったわけではない」「当時としては合理的な選択だった」といった現実的な意見も目立つ。ABIやFFIの曖昧(あいまい)さが言語間の連携を難しくしている点には共感が集まる一方で、理想的な言語横断インタフェースを構築すること自体が非常に困難だ、という冷静な見方もある。

 結局のところ、Cの立ち位置は変化しているとはいえ、その存在が不可欠な基盤であり続けていることは変わらない。批判するにせよ受け入れるにせよ、われわれは今後もCという「プロトコル」と向き合い続けていくことになるだろう。


上司X

上司X: Cはもはやプログラミング言語ではなく、プロトコルになってしまった、という話だよ。


ブラックピット

ブラックピット: なるほど。


上司X

上司X: ずいぶん簡単な反応だな。


ブラックピット

ブラックピット: 僕みたいなレベルのユーザーだと、ここまで深い考察はできませんから。もう「なるほど」としか。


上司X

上司X: そんなこと言うなよ。つまりは、C言語が深く深く影響を及ぼしているのが現状だ、という話なんだ。


ブラックピット

ブラックピット: だから「プロトコル」って表現なんですね。


上司X

上司X: そうそう。もはや「お約束ごと」っていう表現かな。これだけ浸透しているCを誰も回避できない。暗号化プロトコルや通信プロトコル、メールプロトコル……いろいろあるけどね。


ブラックピット

ブラックピット: まあ、捉え方はいろいろでしょうけど、一部の人、特に言語開発に関わる人にとってはCはプロトコルに近しいものだと。僕にとってはずっとプログラミングの祖先というか始祖というか、そういう感じですよ。


上司X

上司X: そうかもしれないな。言語としてCを学ぶことを勧める人もいれば、不要と言う人もいる。いずれにしても、プロトコルとしてのCからはこれから先も離れられなさそうだから、関心があれば学んでみるのもいいんじゃない? 俺はそのつもりはないが(笑)

川柳

ブラックピット(本名非公開)

ブラックピット

年齢:36歳(独身)
所属:某企業SE(入社6年目)

昔レーサーに憧れ、夢見ていたが断念した経歴を持つ(中学生の時にゲームセンターのレーシングゲームで全国1位を取り、なんとなく自分ならイケる気がしてしまった)。愛車は黒のスカイライン。憧れはGTR。車とF1観戦が趣味。笑いはもっぱらシュールなネタが好き。

上司X(本名なぜか非公開)

上司X

年齢:46歳
所属:某企業システム部長(かなりのITベテラン)

中学生のときに秋葉原のBit-INN(ビットイン)で見たTK-80に魅せられITの世界に入る。以来ITひと筋。もともと車が趣味だったが、ブラックピットの影響で、つい最近F1にはまる。愛車はGTR(でも中古らしい)。人懐っこく、面倒見が良い性格。


Copyright © ITmedia, Inc. All Rights Reserved.

会員登録(無料)

製品カタログや技術資料、導入事例など、IT導入の課題解決に役立つ資料を簡単に入手できます。

アイティメディアからのお知らせ