分散型パッケージ開発の構想

C++のclass定義とヘッダファイルの絡み合い、気になる方は多いんじゃないでしょうか?今の時代、人間が書きやすいような言語仕様であるべきなのに、プロトタイプ宣言がイヤでイヤで仕方なくなってしまう自分。


こういうところを見ると、ABのClass定義は悪くはないんです(未実装な機能には目をつぶるとして…)。


こんなことは当たり前ですが、大規模アプリを対象にクラスモジュールを作っていると、どうしても一つのEXEが膨大な量になってしまいます。そこで注目すべきなのが分散型オブジェクトの構想です。


クラスモジュールを外部DLLにしたい場合、どうしても呼び出し元との繋がりを持たすための関数を用意しなければなりません。EXE-DLL間でイベント処理が発生することまで考えると、関数定義だけでかなり辛いものがあります。


DLLファイルで生成した実行モジュールは、型情報を持たないってヤツです。ここまでくると、Javaに逃げなよと言われそうですが、まだまだ回避方法はいくらでもあります。


ようは、DLL内にクラスモジュールを埋め込んで、外部から


Dim obj As CClassInDll


と定義した瞬間にCClassInDllを持ち合わせるDLLとリンクして、型情報を読んでしまえばいいんです。ここで言う定義とは、コーディングの段階での出来事なので、コーディング環境に対象のDLLが存在する必要がありますが…(突き詰めれば、ネットワーク上でつながっていれば問題ないです)。


そんでもって、各メソッドの呼び出しやメンバへのアクセス、継承などができれば一応はめでたしめでたし。


肝心の型情報は、DLLに新セクションとして設ければよいのです。DLLをコンパイルし、エディタ側から見えるようになった瞬間に、おなじみの.sbpライブラリをインクルードしたのと全く同じ感覚になるというわけです。


あとは、リリースコンパイルに条件をつけて、パッケージング機能でもつければ一筋つながるのではないでしょうか。


この発想はCOMに限りなく近いと思うので、どれだけすり合わせが可能なのか、もう少し検討の余地があるのかもしれません。


P.S.
と、真夜中に殴り書きをしてみましたが、これらはVer5.0の課題とでもしておきます。何かご意見などがありましたら、お願いします。