Win32最後のバージョンと囁かれていたDelphi7ですが、先がある事が、私の中で確信になりました。
それは、これから始まりました。 IDE Integration pack for Delphi 8 & C#Builder 1.0という、C#BuilderやDelphi8のIDEであるBDS用のIDE拡張パッケージを書く為に必要なファイル群です。 その後、開発にDelphi7のIDEを用いるためのアドインまで登場しています。
さて、この中の、dcc32.exeが問題です。 起動してみると…。
C:\>"c:\Program Files\Borland\Delphi7\d8bin\DCC32.EXE" Borland Delphi for Win32 compiler version 16.0 Copyright (c) 1983,2003 Borland Software Corporation Syntax: dcc32 [options] filename [options] -A= = Set unit alias -B = Build all units -CC = Console target -CG = GUI target -D = Define conditionals -E = EXE output directory -F = Find error -GD = Detailed map file -GP = Map file with publics ...以下略...
これに反応しなければ、ObjectPascal Magic Programmingの看板が泣くというものでしょう。 私が追求せずして、誰が追及してくれるのでしょうか!?*1
IDE拡張パッケージを書く為以外に使ってはいけないと注意書があります。 また、Delphi8付属のパッケージの再配布は禁じられています。
…でも、実験ぐらいは勝手でしょう? 実用には使いません。 再配布もしません。 ここに誓います。
*.dcuは、SysInit.dcuしか用意されていません。 後は*.dcpのみで、これは、C:\Program Files\Borland\BDS\2.0\Bin\*71.bplに対応しています。 Delphi8のIDE拡張パッケージの開発用なのですから当然ですよね。
…でも、rtl71.bplと、vcl71.bpl(に含まれるユニット)があれば、相当のことができそうな気がしませんか?
論より証拠。
class helperを使ったコンソールアプリケーションです。
やり方は簡単で、単に実行時パッケージを使って構築にチェックを入れて、余計なものは消してrtl;vcl
とするだけでした。
当たり前ですが、コンパイラにDelphi7のライブラリを食わせてもバージョン違いで跳ねられます。
パッケージのみ、ってわけですが、(半年ぐらい前に配られていた.NET previewならぬ)Win32 previewと考えることができそうです。
さあ、どこまで、.NET拡張が、ネイティブ側に実装されているか、試してみましょう!
まずはやっぱりこれでしょう!
新しいコードの開発時に使用する設計方法とは考えないでください。クラスヘルパーは,言語とプラットフォームの RTL を結合するという本来の目的でのみ使用してください。
Delphi8のヘルプにはこんな風に書かれていますが、誰がどう見たって、Java→MixJuiceに相当する核弾頭機能にしか見えません。 class helperの前には、C#に予定されているpartial classすら霞んでしまいます。 無論私もDelphi8 for .NETでは使い倒すつもりですが、これがimplementsと排他なのは辛すぎます。 Win32側にさえサポートされたら、ilの都合なんてものは無くなるので、最強のオブジェクト指向言語(まいなすてんぷれーと)の誕生なんですが…でも、.NETのObjectクラスやComponentクラス等を、Delphiのそれとソースコード互換にするためだけに実装されたっぽいしなあ…
…なんて思って、半分あきらめてたのですが。
コンパイル通ります。 マジです。
結論から書けば、非仮想メソッドのみ可能でした。 TClassHelperBaseはTInterfacedObjectからの派生の様ですが、仮想メソッドを作ろうとすると、IInterfaceのメソッドが要求される上に、@GetHelperIntfがまともに実装されていないみたいで、アクセス違反で落ちます。 非仮想メソッドのみ=単なる構文糖…ですが、@GetHelperIntfのエントリが用意されているということは、正式発表の折にはフルサポートを…期待してもいいのか!? 勝手に期待してますよ!
次はこれです。 単にわかり易い以上の意味は何も持たないのですが、ライブラリをグループ分けできるのは、省略だらけの混沌としたDelphi7以前のRTL/VCLのユニット名から考えれば、かなり嬉しいです。
で、結果は、単にユニット名に"."を使えるようになっていただけです。 programの後に書いたらデフォルトの名前空間で、"."が含まれていないユニット名はデフォルトの名前空間に属する~みたいなルールはありませんでした。 また、namespaces指令も未サポートというよりはナニソレ状態でした。
でも、ユニット名が区切れるようになっただけでも大きな進歩です。 とりあえずD言語のそれ並には使えるわけです。
機能します。 JavaにあってDelphiになかったものがようやく、です。
機能します。 でも、有り難みは特に無しですが。
だめでした。
だめでした。 宣言はできるのですが、呼び出しでエラーになります。
同じく、宣言はできるのですが、呼び出しでエラーになります。
operatorキーワードを受け付けてくれません。
ネイティブ版にはobject型がありますから{$IFDEF}
で何の問題も無いのですが。
それ以外の項目も、発見次第、逐次追加予定。 なお、あくまでIDE Integration用のコンパイラを私が勝手にテストしただけですので、この結果をもってどうこう言わないように。 心の中で拍手喝采だけしておきましょう。
2004-03-08 | できたものは仕方ないでしょっ |
2004-05-08 | Delphi7 update1では、バージョンがまだ15であることと、 拡張構文が使えないことを確認 |
*1 誇張があります。