読書感想文コンピュータ編UNIX & X

X-Window
OSF/Motifプログラミング

著 者:兜木昭男、木下凌一、栄谷政己、林秀幸、安川悦子
発 行:日刊工業新聞社
発行日:1990年10月20日 初版発行
定 価:3500円
サイズ:B5版 386ページ
ISBN 4-526-02808-8


本書は、Motifに関する素晴らしい入門書であり、私がまだ、毎日Motifのプ ログラムを作っていたころ、常に座右に置いて利用していた本である。

本書の特徴は、何といっても見開き2ページが基準になっていることであり、 多くのセクションがこの2ページに収まっている。そうでない場合でも、ほと んどの場合2の倍数のページ数にしてあり、非常に見やすい。

さらに、各セクションが2ページか4ページであり、その中に、取り上げた テーマだけを確認するための簡潔なプログラムが示されている。もう少し詳し くセクションの構成を解説すると、

説明
関数
関数の説明
例題
プログラム例
解説
の順になっている。ただ、これだけのことを、丹念に、細かい項目に分けて 解説していくことを実行したまでであるが、これが、Motifに慣れてからでも 大変便利であった。

本書の一番優れている点、他書では見られない点は、例題のプログラムの簡 潔さである。必要以上のことをしていないのが素晴らしい。余分なことをして いないので、自分のプログラムに応用しやすいのである。この部分は、あらゆ るプログラミングの本、特にライブラリの解説本の鑑と言っても良い。

もちろん、本書は入門書というか、初心者用というかで、Motifの全部の機 能を解説したものではない。抜けはいくらでもあるが、そういう人のためには 分厚いマニュアルが待っている。

さて、このように素晴らしい本なのであるが、 「うそっー」 と叫んでしまうような個所もあった。

§108/2つのトップレベルを作るには

の中で、複数のウィンドウを1つのプログラムから起動しているのであるが、 そのためのイベント処理が次のようになっているのである。

    while(True)   {
       if( XtAppPending(app1) ) {
          XtAppNextEvent(app1,&event1);
          XtDispatchEvent(&event1);
       }
       if( XtAppPending(app2) ) {
          XtAppNextEvent(app2,&event2);
          XtDispatchEvent(&event2);
       }
   }

  (1994年7月15日初版7刷より)
  
各アプリケーションコンテキストに対し、ペンディングになっていたらその イベントを処理することを繰り返しているのである。だから、もちろん、この プログラムはちゃんと動く。

でも、滅茶苦茶に問題あるコーディングなのである。

XtMailLoop()またはXtAppMainLoop()の代わりに自分でMailLoopを作ったの であるが、上のようにしていると、whileループをガンガン回り続けるのであ る。あまりにもガンガン回り続ける。とりわけ、何のイベントも来ないとき、 ますます良く回り、CPUパワーを食い潰すのである。

私も、そのように、1つのアプリケーションで複数のウィンドウを作りたく て、本書のこのセクションを参考にしようとした。そして、まずは実験という ことで、本書のプログラムを入力して試したのである。そして、 「ひぇーっ」 と、予想通りになったのである。

Xなどのウィンドウシステムでは、殆んどのものがイベント駆動で動いてい る。だから、そのイベントの処理には細心の注意が必要だ。できることなら、 自分で処理をしない方が良い。XおよびMotifの場合、色々な関数が腐る程用意 されているので、大抵の場合、自分の要求を満たすものがあるので、それを見 つける努力をするのがベストであろう。

まあ、私ごときの初心者は、イベントなどという危険物には近寄らない方が 身の為である。


読書感想文コンピュータ編UNIX & X