copy and destroy

catch and eat

C では単文が書けるところには、複文を書いてもよい

日記の練習です。

CODEstudy について。

copyanddestroy.hatenablog.com

2019年に書いていた『インターネット創世記』、一番最初の話が「 Unix の話」で、その重要なキーワードは、これだった。

ベル研究所、PDP-7、Unix、石田晴久、jus

日本のインターネット創世記 - heisei-internet-hisotry

このときに積読山脈に積み上げていたのが、石田晴久『 UNIX 』*1。第1版 1983年。ふとした拍子にそれを思い出した*2

gyazo.com

ベル研究所へ客員研究員として渡米していた石田晴久が UNIX 6th Edition の磁気テープを持って帰国したのが1976年。
石田によって情報処理学会にて UNIX が紹介されたのが1977年。
K&R『プログラミング言語 C』第1版 日本語版が石田の翻訳によって出版されたのが1981年。
日本 UNIX ユーザ会 jus が設立されたのが1983年。
情報処理学会で JUNET の発足が発表されたのが1985年。
WIDE プロジェクトが発足したのが1988年。
そして、

1989年、日本とアメリカを結ぶ1万キロメートルに及ぶ太平洋横断ケーブル TPC-3 は完成した。ハレルヤ。

https://copyanddestroy.hatenablog.com/entry/2019/12/01/000000#1989

というのが、この本の出版された当時の時代背景です。

『 UNIX 』では、数章を割いて C 言語について説明しています。1983年ですから ANSI C(C89/C90) の策定中です。

第10章 UNIXの主力言語Cとそのプログラミング

第11章 言語Cによる対話型プログラム

第12章 CによるUNIXシステム・プログラミング

第13章 Cのプログラミング環境

第14章 UNIXのCプログラム・ジェネレータ

https://www.kyoritsu-pub.co.jp/book/b10006555.html

その、第10章「UNIXの主力言語Cとそのプログラミング」にこのような説明がありました。

図 10.2
gyazo.com

図 10.3
gyazo.com

図 10.2 (a) のプログラムは、実はもっと短く書ける。図 10.3 (a) がその一例である。 C では c=getchar() という代入文も、 c のもつ値をもつから、こんな書き方が許される。この場合、 while で実行すべき文は putchar ひとつだから、ブロックを表わす{ } は不要である。図 10.2 (a) の場合は、 while で実行すべき文が二つあったから、 { } を 必要とした。 C では単文が書けるところは、 { } で囲まれた複文を書いてもよいことになっている。

図10.3 (a) のプログラムは、さらに(b) のように短くしてもよい。 ここで 面白いのは、 while 文が、 while (条件); の形になっていて、 while で実行すべき本体が見かけ上ないことである。実行すべき内容は条件のほうに含まれているからである。 C ではこのように実行文は空でもよい。初めに述べたように、プログラム本体からして、 main(){ } のように空だってよいのである。

C で非常にコンパクトなプログラムが書けることには賛否両論があるかもしれない。コンパクトなことは書くときやタイピング入力のときは便利だが、少し読みにくくなるからである。しかし筆者は、代入文が Pascal のように := でなく、 BASIC、 Fortran 、 PL/I のようにただ = ですむ点でも C が好きである。後述のように、 C では本当の等号は == で表わすが、ひんぱんに出てくる代入に = を使うこのやり方は合理的といえよう。

while()のあとには中括弧 { } をつけるべき」ではなくて、「単文が書けるところには、複文(ブロック) { }を書いてもよい」なのです。この一文に、ハッとしました。

もともとの C 言語はそういうプログラミング言語だったのだろう、という気づきです。

DEC 製のミニコンでしか動かなかった UNIX を数多、世界に存在しているハードウェアに移植する必要があった。速く早く。だからこそ、短く速く、だからこそ、小さく単純に。これらは UNIX の精神です。そして短く簡潔に書くことは気持ちがイイ。そういう文化のものだったのです。

僕はプログラマになりたくていまC言語をやっているのではありません。でも読んでいる入門書には「正しいC言語」とか「安全なC言語」とか書かれていて、 K&R C などというものは毒にこそなれ薬にもならないという風潮です。そりゃそうだ、だって40年以上前のものだもの。

で、もう一度立ち返ると、僕は21世紀の C プログラマになりたいわけではなくて、「インターネットの始まり」を発見したかったのでした。そもそも登っている山が全然違ってた。

という感じに、だからどうするとか、だからこうするとか、オチはまだ全然決まっていないのですが、この大事な感情、というか気づきを、ここに記しておくものである。

*1:UNIX - 共立出版 https://www.kyoritsu-pub.co.jp/book/b10006555.html

*2:というわけで、勢いあまって買ってあった、ブライアン・カーニハンとデニス・リッチー『プログラミング言語C 第2版』第6章「構造体」を眺めている。 https://copyanddestroy.hatenablog.com/entry/2025/05/13/175626

powered by hatena blog.
the nikki system for lifelogging junkies.

all posts © their original owners.
writing is reusable solely under the by creative commons license.