2013年09月09日の日記です


デニス・リッチーの誕生日(1941)  2013-09-09 09:53:29  コンピュータ 今日は何の日

今日(9月9日)はデニス・リッチーの誕生日。1941~2011。


デニス・リッチーは、今の僕たちの生活を作り出した偉人の一人…と言ってもあまり知られてないよね。


K&R の R のほう、と言えばわかるだろうか?

いや、K&R を知っている人がそもそも少ないか。


K&R は、コンピューター業界最大のベストセラー、と言われた書籍だ。

正式には「プログラム言語C」という本。

同様の題名の本がたくさんあるので、執筆者の名前をとって「K&R」と呼ぶ。


K&R にも1版と2版があるのだけど、特に狭義には1版を呼ぶ。

なぜなら、これが世界初のC言語の教科書だったためだ。


一部では聖書とも呼ばれる。僕の知人は、1版を旧約、2版を新約と呼んでたな。

古典であり、大ベストセラーであり、今でも売れてるロングセラーだと考えると「聖書」というのも言い得て妙だ。


C言語でなくてもいいから、プログラムをやってみようと思ったことがある人は、「Hello World!」って書くプログラムを最初に目にするんじゃないだろうか。


これは、K&R の最初のプログラムがそうだったから、と言う理由による。

聖書の最初に書かれた「光あれ!」みたいなものか。




K&R の話をしたいのではない。

リッチーはC言語の開発者だ。


リッチーを手伝ったのが、ケン・トンプソンとブライアン・カーニハン。

K&R の K は、カーニハンの方だが、彼の証言によれば、C言語はリッチーが一人で作ったのだという。


#先に書いた Hello World! というサンプルプログラムは、カーニハンの発案だそうだ。



もともとは、ケン・トンプソンが発端だ。

彼は Multics という OS で動作していたゲームが遊びたくて、個人用に Unics という OS を作る。

Multi (たくさん)に対して Uni (ひとつ)という洒落だ。これが後の UNIX になる。


彼はこの OS を知人に開放する。カーニハンやリッチーも知人だった。

みんなでよってたかって改良できたおおらかな時代。UNIX はどんどん高機能になった。


ある時、新しいコンピューターを入手して、そちらを使うことになった。


今まで皆で改良して使い慣れた UNIX を使いたい。

しかし、当時のコンピューターは、同じメーカーのものでも互換性なんて考慮されていないのが普通。

「良いコンピューターを作る」のに全力で、過去を振り返るなんてできない時代だ。


また一から UNIX を作り上げる…のは嫌だった。

なにより、将来別のコンピューターを買うたびに同じ作業が発生するのはごめんだ。


そこで作られたのが「コンピューターを限定しないアセンブラ」である、C言語だ。


アセンブラとは、コンピューターごとに全く異なる「機械語」(2進数)を、1対1対応で人間にわかりやすくした言語だ。

1対1対応だから、コンピューターが変わるとアセンブラの言語構造も変わる。

これでは、将来性なんて保証できない。


当時も FORTRAN や LISP のような高級言語は存在した。

しかし、高級言語は OS の上で動かすのが前提だった。OS そのものを作るのには使えない。


#ここでいう「高級」とは、ハードウェアを直接意識しないでも良いことを意味する。

 具体的には、メモリの使い方とか、周辺機器のアクセス方法を知らないでもプログラムが組めるという意味だ。


そこで、アセンブラのように「低級」で、しかしアセンブラと違ってコンピューターが変わっても大丈夫な言語を設計した。

これがC言語だ。


#当時知られていた BCPL という言語があり、これを単純化したので頭だけ取って B として、それを拡張したので C と名付けた、という逸話がある。

 ただし、これは言語開発の歴史を表現しているだけで、言語構造の移り変わりはそんなに単純ではない


UNIX はC言語で書き直され、C言語自身もC言語で書き直された。

さらに UNIX 上で作られていた数々のソフトもC言語で書き直され、最後にC言語は「新しい機械のプログラムを生成するように」改良された。


これで、UNIX の全ての環境が新しい機械用に作り上げられた。

同時に将来の保証も手に入れたことになる。


#C言語の誕生は1972年のこと、とされている。

 UNIX がCで書きなおされたのは1973年のこととされるので、ここら辺徐々に出来上がっていったもので、「どこかで完成」ではないだろう。




C言語は今では「古い言語」とみなされているが、まだまだ現役で使われている。

なぜなら、これがアセンブラだからだ。


本当にアセンブラでないと書けないプログラム、というものもあるが、大抵はC言語で事足りる。

でも、C言語でない言語ではダメだ。アセンブラレベルの「低級」なことができないから。


C言語は非常に卓越したバランス感覚で成り立っている、と思う。


C言語作成時には、すでに goto 不要論はあった。


しかし、C言語には goto がある。

goto 不要論を意識したのか、名前を変えた goto 命令も沢山あるし、switch なんて構造化の概念を崩しかねない危険なものまである。


高級言語なら、メモリ構造がどうなっているかなんて気にしなくてよい。

しかし、Cの配列や文字列型などは、メモリ構造がわかっていないと扱いづらい。

共用体などに至っては、CPU がメモリ上にどのように値を配置するかを考慮しなくては使えない。


なんでこんなことをしたかと言えば、アセンブラで当たり前のことが、C言語以前の高級言語ではできないからだ。


一見すれば高級言語のように見えるのだが、実はアセンブラレベルに低級。

これがC言語の特徴だし、他にこんな言語はない。


卓越したバランス感覚がなせる業だ。

リッチーは、このバランス感覚を持ち合わせていた稀有な人間だ。


そして、これがC言語が古いものでありながら今でも使われている理由だと思う。




もちろん、今では後継の C++ や Objective-C が使われることも多いだろう。

しかし、それらの言語だって、基本は C なのだ。

(実際、C++ を便利な C 言語程度にしか使っていない人は非常に多い。

 // って書くと、コメントの最後を閉じなくていいんだぜ!)


誤解を恐れず言ってしまえば、プログラム中に { } がやたら多い言語はC言語の子孫にあたる。

C# C@ なんかは名前も似ている。Java Javascript なんかもそうだ。

awk perl PHP などもそうだ。


#awk は開発者3人の名前を取った言語だが、k はカーニハンだ。

 perl は awk をパワフルにした言語で、PHP は perl から生まれた言語。


C言語と名前が似ている言語は、主にパソコンのプログラムに使われる。

Java や Javascript は WEB ブラウザでよく使われる。Flash でつかう ActionScript も javascript の仲間だ。

そして、perl や PHP は WEB サーバーでよく使われる。


ちなみに、iPhone アプリは Objective-C で作られ、Android アプリは Java で作られる。


PC、スマホ、WEBクライアント、WEBサーバーのすべてで、C言語の子孫たちが動いている。

つまり、僕らの生活はC言語とその子孫がないと成り立たない状況だ。


この言語を作り出したリッチーは、僕らの生活を大きく変えた人物だった、と判っていただけただろうか?



2016.9.9追記


今年の頭頃、別件調査中に、リッチーが作っていたWEBページが保管されているのを発見。


C言語が BCPL から作られたように言われているのがかなり心外なようで、BCPLの文法は全然違うことを一生懸命説明しています。


BCPL の作者が、C言語と文法が類似していることを示しているが、そんなのデタラメだ!

…というような内容なのだけど、リッチーの主張もかなりデタラメなのは、以前に書いたとおり



この関連話題、掘り下げると深かったので、どこかでまとめたいと思いつつまだ書いていません。




同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

手相開発時の技術話(4)【日記 15/03/18】

ケン・トンプソンの誕生日(1943)【日記 16/02/04】

ケン・オルセン 誕生日(1926)【日記 17/02/20】

ケン・オルセン 誕生日(1926)【日記 17/02/20】

ジャック・デニスの誕生日(1931)【日記 13/10/12】


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

46000

-- follow --




- Reverse Link -