分散型パッケージ開発の構想
abdev 3月 6th, 2006C++の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の課題とでもしておきます。何かご意見などがありましたら、お願いします。
3月 6th, 2006 at 14時47分22秒
.Netでもそんなことができるようです。.Net Frameworkが普及していればよかったんですけどね。> この発想はCOMに限りなく近いと思うので、どれだけすり合わせが可能なのか無理してでもなんとかしてほしいです。ABだけで独自路線を進むというのも限界があるでしょうし,既存の様々なActiveXコントロールが簡単に使えるようになるのは大歓迎です。その際にはCOMのメソッドがABやC++等から見える戻り値としてHRESULTを返し,実際の戻り値を引数経由で返すのが邪魔くさいです。VC++の#importみたいにラップしてくれる仕組みが欲しいですね。
3月 8th, 2006 at 23時11分11秒
すみません。肝心なことが書いてありませんね。私はABのDLL内のクラスの仕組みは便利そうだと思います。ただCOMのことも忘れないでほしいなということです。
3月 8th, 2006 at 23時48分22秒
> プロトタイプ宣言がイヤでイヤで仕方なくなってしまうこの意見は賛成派と反対派で綺麗に分かれるところですよね。僕なんかは class Cfoo { … }; の中は宣言だけの方がすっきりとして、後から参照するときに見やすくてよいと思います。メンバのインターフェイスを知りたいだけなのに実体まで目に入ると目障り、というか滅入ってしまうので。(↑ インターフェイスについて詳細に記述したドキュメントが豊富に揃っていてそちらをいつでも参照できる環境が整っていれば 」執拗にこだわることはしません。そのような状況では後にプロトタイプ参照することもないでしょうから、それこそ書きやすいように書けばよいと思います。)> 定義した瞬間に 〜 DLLとリンクして、型情報を読んでしまえばいいんですこれをやると、改行したとたんにエディタが不安定になったり、落ちたりしそうな悪い予感が。(外部モジュールとリンクする際はよくあることです。)そこらへんは特に気合いを入れて、慎重に堅牢に頼みます。> .Netでもそんなことができるようです。.Net Frameworkが普及していればよかったんですけどね。面白そうな発想ですね。ActiveBasic.net < なんとなくデジャヴ…(ヒント:2005/9/5)とある日に山本様にインスパイアされて .NET の技術的な詳細記事を色々収集しておるのですが、実際興味深い開拓分野ではあります。これが普及した頃にはこのようなある意味泥臭い議論も無くなるんだろうな、などと思いつつ。。。−−−僕のレベルでは、分散型オブジェクトと言われると COM ぐらいしか思い浮かばないのでAB 独自仕様の新セクション設定という発想にはよい意味で驚いているのですが可能な範囲で既存の技術(OCX/COM/分散COM)も利用したいという点では、イグトランス様の意見に賛同します。と言っても、これらの技術については僕自身現在勉強中なので…とか言って逃げる奴(ぉ結局有益な意見は何一つ出てきませんでしたね、ゴメンナサイ。・・・っと、前回に続いて今回も長々と失礼いたしました。適切に段落分けすれば読みやすくなると思うのですが、残念ながら空白行は除去されてしまいますね…スリーダッシュは苦肉の策っす。