ビジネス WinDbgアプリケーション開発技術 Windowsカーネルと型


"お見合い"技術

 「C++プログラミング言語の歴史と特徴」連載第22回目の今回も前回に引き続き次の公開論文を精読していきます。

第1回連載資料論文

 筆者はこのような記事に目を通したことがあります。その記事は、ソフトウェアハウスが本格的に淘汰される時代に入り、各社は生き延びるための方策を講じなければならない、と結論付けています。確かに"その通りだろうなぁ"とは思いますが、"生き延びる方策"とは具体的に何だろう?、と考えないわけにいきません。そして、地方の小さなソフトウェアハウスはそのような経営的な余裕があるのだろうか?、とさらに考え込んでしまいます。

 記事内には北海道などの地方ソフトウェアハウスの実情が紹介されています。筆者の知人の一人も北海道で小さなソフトウェアハウスを経営しています。時折電話で話しますが、経営環境はきわめて厳しい!、と電話口でつぶやいています。小さなソフトウェアハウスは独自色を見い出し、それをどのように経営に活かせばよいのでしょうか?筆者には皆目見当がつきません。

 本論に入りましょう。本日は、「4.3.1 Run-time Type Indentification」節の意味を考えます。まずはタイトルに目を通してみましょう。おそらく、ほとんどの方は、この節のタイトルの意味がよくお分かりにならないと思います。

 筆者は、Stroustrup氏の著書「The Programming Language C++」(2000年発行Special Edition)やMicrosoftのこのMSDN ページに目を通してみました。結論から申し上げると、プログラミング学習を始めて間もない方や、これからプログラミング学習を開始されようとされている方は、当面この節のタイトルに関連する技術項目の学習は棚上げしておくとよいでしょう。何もかも一挙に習得しようとすると、挫折に追い込まれる確率が高くなります

 Run-time Type Indentificationは通常、RTTIと略称され、ほとんどのC++プログラミング入門書には登場しません。RTTIというのは、処理すべきデータの型がプログラムの実行時に初めて分かる、ということを前提とする機能です。たとえば、あるウィンドウ内で発生するイベントは、プログラムを実行するまで(より厳密には、ユーザがウィンドウ経由で何かを入力するまで)分かりません。ウィンドウ内で発生するイベントにはいろいろな種類があり、多くの場合、クラス階層化を通して整理・定義されています。Windowsの世界のマウスクリックイベントを想像されるとよいでしょう。RTTIという技術は、マウスクリックを処理するアプリケーションコードと深い関係がある、と考えてしまうと分かりやすいかもしれません。

 私たちは、これまでの説明から、RTTIとマウスクリックの間にある、技術的な関係を(きわめて漠然と)想像できるようになりました。ところが皆さん、Windows関連のプログラミングマニュアルをいくら読んでも、RTTIという用語はほとんど登場しません。また、RTTIの中心であるdynamic_castというコードもめったに目にすることはありません。筆者は最近、このdynamic_castコードをプログラムに組み入れてみました。すると、Visual Studio.NET 2003は次のような警告メッセージを出してきました。

warning C4541: 'dynamic_cast' が /GR- を使用したポリモーフィック型 'ctrlWindow' で使用されています; 動作結果は保証されません。

 筆者は、dynamic_castの意味が分かっていましたから、Visual Studio.NET 2003のビルドオプションを適切に切り替え、実行プログラムを無事に完成することができました。この意味では、RTTIを知っておくに越したことはありません。しかし、現実問題として、ほとんどの方は返された「C4541警告」を理解できないと思います。メッセージ文には、オブジェクト指向の重大概念の1つといわれている、"ポリモーフィック"、という用語も登場しています。

 返されたメッセージには、"動作結果は保証されません。"という文が含まれています。客観的に見て、この文は、"動作しない"、"時には動作することもある"、などさまざまな解釈が可能です。表現を変えれば、この文はかなりあいまいな意味を持つ文、といってよいでしょう。しかしこの文は、私たちの日常生活の一部を見事に表現しているのも事実です。たとえば、お見合い、です。お見合いをする際には、事前に相手の写真や経歴書などを確認しておくのが普通ですが、相手の"人となり"は決して分かりません。つまり、"お見合いがうまくいくかどうかは保証されません。"というわけです。お見合いの成否は、2人が直接相対したときの、個人的かつ感性的な印象がきわめて大きな決め手になります。これは、Run-time Type Indentification(RTTI)そのものです。つまり、Run-timeは直接相対したとき、 Typeはお見合いの相手、 Indentificationは相手に魅力を感じる、ということになります。

 RTTIは技術としては大変難しいものですが、その発想の根は私たちの日常生活の中にありました。筆者は、すべての技術の根は私たちの日常生活の中に見出せると考えています。難解な技術に出会った場合、自分の生活態度をそっと振り返ることにしています。なお、RTTIの簡単な実装例を確認したい方は、筆者が作成したこのサンプルコードをダウンロードしてください。

前へ | 次へ



 WinDbg入門  ホーム


Copyright©豊田孝 2004- 2009
本日は2009-01-07です。