Windows HeartBeart #5 (1993年11月)
たどりついたらVisual C++

 Windowsのプログラム開発の言語として、マイクロソフトのVisual C++が台頭しつつある。
 米国のComputer Language, Windows Tech Journalなどソフトウェア開発専門誌を見ると、マイクロソフト・ビジュアル開発ツール・チームの面々が広告写真を飾り、Visual C++、Visual Control Packなどのオブジェクト指向ツールが紹介されている。日本の雑誌にも、最近盛んに取りあげられているVisual C++について、「C++」、「クラスライブラリ」そして「Visual」に分けて考えてみよう。

 C++は、簡単に言ってしまうと「++であって、Dではない言語」である。C言語をインクリメント、つまり少しだけ進化させた仕様となっている。このため、アドレスを直接参照できる、キャストで何でも出来てしまうなど、ポインタ関連で、今となっては害の方が大きいC言語の特性もそのまま引きずっている。Objective Cほど美しい体系にはなっていない。C言語は、BCPLおよびB言語を、Unixのシステム記述用として発展させた言語仕様となっているが、残念ながら、D言語ほどには進化していないのである。

 それでもC++は、たくさんの利点を持っている。まずはクラスという概念である。C言語のデータ構造と処理を一緒にしたようなこの仕組みは、不要な情報を外部に出さないでおけるため、複数のプログラマが共通で使用するライブラリの作成時に威力を発揮する。そのほか任意の場所での変数宣言、演算子の機能を変更する多重定義、動的なメモリの取得と開放などの特徴を持っている。中規模以上のソフトウェア開発には最適な言語と言ってよい。クラス、オブジェクト、カプセル、継承、隠蔽など観念的な部分があるため、気持ち悪がられる面もあるが、世の中すべてC++そしてクラスライブラリの方向を向いてしまっているので、おまじないだと思って「継承、隠蔽、検証、派生、...」と唱えていれば、そのうち理解できるであろう。いずれにしても、オブジェクト指向プログラミングや、それに沿ったC++が作られた理由は、「プログラミングの生産性向上」にあることを、忘れてはならない。

 Visual C++には、マイクロソフト社のWindows用基本クラスライブラリであるMFC2.0が付属している。このクラスライブラリの御利益も甚大である。Windowsのプログラム開発は、アプリケーション・プログラム・インタフェース(API)を組み合わせる、いわゆるSDKが主流である。これは、700種類以上の関数を組み合わせてWindowsプログラムを作成するのであるが、関数の理解や組み合わせの手順などが分かりづらい。MFCは、ViewやDocumentなど一部ではあるが、抽象化された高級なインタフェースとなっているため、ひとつのコールでやりたいことが出来てしまう。MFCのクラス1個に、SDKの関数5〜20個が集約されている。SDKとMFCでは、アセンブラとC言語ほどの差がある。MS-DOSのプログラムで、現在アセンブラ記述のものが皆無に近いのと同様、数年後、ほとんどのWindowsプログラムは、クラスライブラリを使って記述されることになるであろう。

 MFCのもうひとつの利点は、ソースプログラムの共通化である。現在のWindowsのインタフェースはWin16と呼ばれるものであるが、WindowsNTでは、これがWin32に変更される。   WindowsAPI記述のソースに比べ、MFC記述のソースのほうが、はるかに移行が容易である。米国ではNT対応のVisual C++およびMFC2.0も、最終版がCD-ROMで提供されている。今後のOSの進化に対して、MFCを使って記述したプログラムの方が、抽象化されている分だけソースコードが長持ちすることになる。

 OS自体のインタフェースもクラスライブラリ化されつつある。ペンコンピュータ用のOSであるGO社のPenPointは、既にクラスライブラリとなっており、クラスの構造を示したポスターまで作られている。WindowsNT後継の「Cairo」もオブジェクト指向OSということで、クラスライブラリによるインタフェースが前面に出てくる模様である。

 Visualの良さは、Visual Basicと同じで、オブジェクト指向の開発ツールを駆使してプログラミングが行える点にある。Wizardと呼ばれるツール群により、ダイアログ画面の作成や、複数文書の編集を可能にするMDI、他のプログラムを自分の文書内に貼り込むOLEなどの最新の仕組みが、いとも簡単に実現できる。OLEなどSDKでプログラミングするには、ずいぶんなプログラミング能力と努力が必要であるが、この複雑な処理も難なく実現できる。Visualなプログラミング環境によって、プログラマは、いままでしかたなくコーディングしていた面倒なだけの作業から開放される。プログラマが自分のロジックを記述することに集中できる環境が整いつつある。

 また、ソースコードデバッカを含め、すべてのツールがWindows上で稼働し、色分けされたソースコードを表示するテキストエディタも付いてくる。ディスクを50MBほど使うが、操作方法も統一され、Visual C++だけで、快適なWindowsプログラミング環境が作れてしまう。

 この種のツールは、C++のソース言語を生成するため、従来の人月生産性によるプログラム開発の金額見積りも無意味なものとなる。1行当たりの単価や人月生産性などの議論は、空虚なものとなり、ソフトウェア開発の分業制も崩壊してしまう。VisualそしてC++に対応した新しいソフトウェア技術者が出現しつつある。

 このような多数の利点をVisual C++は持っているが、MFCを使用した場合、生成されるオブジェクトは200Kバイトほど大きくなる。メモリ8Mバイト、ハードディスク200Mバイトが標準の世界では、このサイズは誤差の範囲といってよい。Visual C++のいちばんの問題は、C++とクラスライブラリの理解であろう。

 米国では、言語の老舗ボーランドもBorland C++とクラスライブラリObject Windowsの新しいバージョンで攻勢をかけてくる。来年には、いくつかの層に分かれた、しっかりした「基盤」を持つ新手のクラスライブラリも登場するようである。
 日本は完全にWindowsプログラミングで後進国となっているが、米国のレベルに追い着くためには、SDKをすっ飛ばして、C++そしてクラスライブラリから入った方がよいと思う。プログラムはプログラマの排出物であるが、知識のかたまりでもある。記述したソースプログラムを大切にして長持ちさせるためには、クラスライブラリを使った記述が、現在の最適解であろう。

 アセンブラ、BasicそしてCと変遷したパーソナルコンピュータ用の開発言語も、Windowsの時代にVisual C++にたどりついた。しかし、C++やクラスの難しい概念を理解しなければならないし、勉強することが山ほどある。

 70年代初頭にモップスがヒットさせた「たどりついたらいつも雨ふり」という曲があるが、鈴木ヒロミツがこんな落ちを絶唱している。「ああ、ここもやっぱり、どしゃぶりさぁ」


#6「Compaqという会社」