T1#research
C 言語の誕生 ── Dennis Ritchie

メタデータ
- 日付
- 年代
- 1970s
- Tier
- T1
- 出典数
- 05
- 関連項目
- 05
- Tags
- #research
C は移植性のために作られた言語ではない。Ritchie 自身が書いている ── 「当時われわれは移植性をさほど重視していなかった。その関心は後から生まれた」。手狭な機械の上で、アセンブラより上の言語でシステムを書きたい。動機はそれだけだった。移植性は、結果として手に入り、そして最終的にこの言語の意義を決めたものである。
B から C へ
1969年、Ken Thompson は最初の UNIX を、PDP-7 のアセンブリ言語で書いた。同じ PDP-7 の上で、彼は Martin Richards の BCPL を 8K バイトに押し込めた言語を作り、B と名付けた。B は PDP-11 より先に存在している ── Ritchie 自身が後年、B の ++ が PDP-11 のオートインクリメントに由来するという通説を「B が作られた時点で PDP-11 は存在しないのだから歴史的にありえない」と否定している。
B には二つの限界があった。ひとつは型がないこと。すべての値はマシンワードで、文字を扱うのが不格好になる。もうひとつは実装で、PDP-7 の B コンパイラは機械語ではなく threaded code を吐いた。1970年に UNIX プロジェクトが PDP-11 を入手し、B もそこへ移されたが、threaded code の遅さは、OS や主要ユーティリティを B で書き直すという選択肢を最初から消していた。
1971年、Dennis Ritchie は B に文字型を加え、同時にコンパイラを PDP-11 の機械語を直接吐くように書き直した。彼はこれを「new B」の意で NB と呼んでいる。つまり B から C への移行は、言語の拡張と、アセンブリと張り合える速さ・小ささのコードを出すコンパイラの誕生とが、同時に起きたということである。Ritchie の回想では、最も創造的だったのは1972年であり、1973年初頭には現代の C の骨格が出そろっていた。
1973年 ── UNIX の C への書き換え
C 言語の存在意義を確定させたのは、1973年夏に UNIX カーネル自身が C で書き直されたことだった。Thompson は前年の1972年にも一度、構造体を持つ前の C でシステムを書こうと試み、途中で断念している。
OS を高水準言語で書くこと自体は、このとき初めてではない。Bell 研究所が抜けたばかりの Multics は PL/I で書かれており、Ritchie はそれを「先駆的だが独創ではない」要素として挙げている。彼らが Multics から引き継がなかったのは、まさにその点だった ── PL/I は彼らの趣味に合わず、当座はアセンブリで書くほうが現実的だった。
C が違ったのは、コンパイラの出力である。threaded code の B とは違い、NB 以降の C コンパイラはアセンブリと張り合える機械語を吐いた。だから、性能を捨てずに OS を高水準言語へ移せた。
そしてこの選択が、UNIX を移植可能にした。1977年、Steve Johnson・Ken Thompson・Ritchie は UNIX を Interdata 8/32 へ移す作業に入る(同じ頃、豪 Wollongong 大学の Richard Miller が独立に Interdata 7/32 への移植を進めていた)。汎用 OS がソースの再コンパイルで異種アーキテクチャへ動く ── この実証によって、UNIX は PDP-11 という特定の機械から切り離された存在になった。
K&R
C 言語が世界的に普及した直接の原因は、1978年2月に Brian Kernighan と Dennis Ritchie が共著で出版した The C Programming Language(通称 K&R)だった。本文228ページ。言語の全体を、この薄さで提示した。
分担ははっきりしていた。Ritchie 自身の記述によれば、解説の文章はほぼすべて Kernighan が書き、Ritchie は付録のリファレンスマニュアルと UNIX システムとのインタフェースの章を担当した。この付録が、1989年に ANSI 標準が成立するまでの十年余り、C コンパイラを書く人間にとっての事実上の言語定義になる。「K&R C」という呼び名は、そこから来ている。
簡素な文体、最小限の例、しかし背後にある言語設計の意図が伝わる構成 ── K&R は現在に至るまで、最も影響力のあるプログラミング書籍のひとつとして引かれ続けている。
半世紀後
2026年現在、C は世界で最も広く使われている言語のひとつであり続けている。Linux カーネル、Windows カーネル、macOS / iOS の中核、Android のシステム層、データベース、Web サーバ、組込み機器 ── 世界中のあらゆる「計算機の下層」は、依然として C で書かれている。
その上に、C 自身の系譜から派生した言語が、層をなして積み上がっている。C++(1985)、Objective-C(1984)、Java(1995)、C#(2000)、Go(2009)、Rust(2010)、Zig(2016)── 構文や設計思想を変えながら、それぞれが C と何らかの形で対峙し続けている。
Dennis Ritchie は2011年10月12日、ニュージャージー州バークレーハイツの自宅で死去しているのが見つかった。70歳。Steve Jobs が他界したちょうど一週間後で、報道は Jobs の追悼で埋め尽くされていた。Ritchie の死は、技術系メディア以外では、ほとんど扱われなかった。
しかし、その日に世界中で動いていた計算機のうち、彼が設計した言語をどこかで実行していなかったものを探すほうが難しい。
よくある質問
- C 言語は誰がいつ作ったのか
- Bell 研究所の Dennis Ritchie が1972年ごろに設計しました。土台は Ken Thompson の B 言語で、Ritchie はそこに文字型と型システムを加えています。
- UNIX が C で書き直されたのはいつか
- 1973年夏にカーネル自身が C で書き直されました。1977年の Interdata への移植で、汎用 OS をソースの再コンパイルだけで異種アーキテクチャへ移せることが実証されています。
- C は高水準言語で OS を書いた最初の例なのか
- いいえ。PL/I で書かれた Multics などが先行します。C が決定的だったのは、コンパイラの出力がアセンブリと競合できる速さと小ささを保ったまま、それを可能にした点です。
出典
最終更新: