/ «2007-03-11 (Sun) ^ 2007-04-01 (Sun)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2007-03-25 (Sun)

[Books][UNIX] Advanced UNIX Programming 2nd Edition

Advanced UNIX Programming 2nd Ed. 今回は、Marc J. Rochkind 氏による Advanced UNIX Programming 第二版をご紹介します。

UNIX プログラミングに関するリファレンス書として、本書は APUE と並び双璧を成していますが、初版発行は APUE よりも遙かに古く 1985 年となっています(APUE の初版は 1993 年)。初版の出版社は Prentice Hall でしたが、続く第二版は 2004年 Addison Wesely が出版しています(ちなみに、APUE 第二版の出版も同じく Addison Weseley ですが、こちらは翌 2005年)。

両者を一言で表現するなら、APUE は "classical" であるのに対して、本書は "practical" と言えるでしょう。各論を重んじる APUE とは違い、実践面を重視している点が Advanced UNIX Programming の特徴です。特に、File I/O とプロセスに関する記述は、詳細かつポイントを抑えており、現時点で入手できるテキストの中では最高峰のレベルにあります。

章立ては類書とほぼ同様ですが、第1章 第1節に位置する "A Whirlwind Tour of UNIX and Linux" は、わずか16ページで UNIX の全体像を概観しており、その内容は神がかり的です。一見するとありふれた "overview" に見えるのですが、プログラム・プロセス・i-node・リンクなど基本概念の解説は簡明にして正確で、惚れ惚れするほどの完成度です。

Rochkind 氏は、1970年代 UNIX が花盛りであった頃に Bell 研究所に勤務されていたそうですが、Thompson, Ritchie, Kernighan らが成し得なかった "UNIX の overview" に本書で挑戦しているように見えます。

UNIX's tragedy

私は UNIX の最大の悲劇は、Bell 研から優れた "overview" が生まれなかった点にあると考えています。これはコンピュータに限らず、あらゆる分野でもそうだと思うのですが、各論を書くことは易しく、概論を著すことは極めて難しい。もちろん、各論と言えども APUE のような優れた書籍に出会えることは少ないのですが、私の経験では優れた概論は100冊に1冊あるかないかという印象です。

「UNIX 概論であれば、Kernighan と Pike 両氏による、UNIX Programming Environment (邦訳 UNIX プログラミング環境)があるではないか」という指摘もあるかと思いますが、この書籍はあくまでも UNIX 環境への入門書であり、肝心の UNIX システムコールに関する記述はおまけ程度、UNIX カーネルの設計哲学を伝えるものではありません。

UNIX 7th edition の man pages を見ていても、Bell 研の人達は各論には滅法強いのですが、肝心の概論では悲しいまでに筆に力がないことがよく分かります。

この伝統は、その後の Plan9 にも引き継がれており、Plan9 の普及を阻む大きな要因となっているように思います。

Why fork and exec are separated?

UNIX 初学者が最初に持つ疑問のひとつに、「なぜ fork と exec は別々なのか?」というものがあります。私自身も当初この疑問を持ちましたが、残念ながらその理由を明快に解説してくれる書籍はありませんでした。APUE ですら、私の心のモヤモヤを解き放つことは出来ず、悶々とすることしばし・・。

随分回り道をしましたが、私の出した結論は「答えはシェルの実装にあり」というものでした。fork と exec に隠された意味とその使いこなしは、シェルを自作して初めて理解し、会得することができます。ところが、UNIX プログラミング解説書のほとんどは、システムコールのインターフェースとお決まりの fork/exec/wait プログラムを提示するだけであり、シェルの実装には触れていません(APUE も然り)。

私が知る限り、「シェルの実装」を通じて「fork/exec 分断の意図」を読者に伝えている書籍は、この世でわずか2冊。Advanced UNIX Programming は、そのうちの1冊です(もっと早くに出会うことが出来ていたらと、悔やむことしきり)。

Rochkind 氏が書籍中で提示するシェルは、段階に応じて Version 1, Version 2, Version 3, Real Shell の計4種類が用意されており、中でも Real Shell はパイプ処理やバックグラウンド処理にも対応した本格的なものです。

本書で登場するソース中には、システムコールの例外処理に独特のマクロ定義が使われており、意見が分かれるところだと思いますが、ページの端々に実践面で役立つ情報がさりげなく散りばめられており、最後まで目が離せません。Rochkind 氏の UNIX に対する高い理解度と愛情、そして独特の解説力は、本書を APUE とは全くことなる性格に位置づけています。

英文は APUE ほど磨き込まれてはいませんが、十分に平易であり、700ページから得るものは大きいでしょう。