Delphi 3.0 に関する個人的メモ

正常進化を遂げたDelphi 3.0



ライブラリ・言語仕様
パッケージ
新たにパッケージというコンパイル単位が登場した。 これはクラスライブラリを含んだ一種のDLLであり、 VCLもいくつかのパッケージにまとめられた版が用意されている。 このパッケージを呼び出すことにしてコンパイルすると、 従来(VCLを使った場合)最低でも百数十KBにはなった実行形式が、 単純なものならわずか10KB!になる。
ただしVCLの主要部(DB関係除く)を集めたパッケージのVCL30.DPLだけで1MBを超えるので、 Delphiで開発したプログラムが沢山ある場合以外、 パッケージを使用するかどうか判断に苦しむところである。 実行ファイルサイズが大きくなりがちなDB関係のプログラムならば、 パッケージを使用するメリットは大きいだろう。
もちろん、VBのランタイム等とは違い、 ユーザーが新たなパッケージを定義することも出来る。
ActiveXサポートに伴う言語仕様変更
これは今回のバージョンの売りのひとつであるが、 DelphiのコントロールやフォームをまるごとActiveXのパーツ化することができる。
ちなみにActiveXコンポーネントの利用と作成を容易にするため言語仕様レベルで変更が加わっており、 予約語interfaceは役目が増えるわsafecallなんて修飾子は増えるわActiveX関係だけ多重継承もどきが出来るようになるわ...
パッケージのサポートもActiveXコントロールのサイズを小さくするのが本来の目的と思われる。
US版からのIMEサポート
各入力コントロールには、 US版からIMEの存在を考慮したコードとプロパティが追加されている。 この変更で、 これから新規に作成される海外産のコンポーネントについては、 再コンパイルせずに使用できる率が大幅に向上したと思われる。 おそらく日本側の修正が反映されたのだと思うが、ありがたいことである。
また、従来日本語版でMBUtils unitに入っていた関数の多くは、 相当するものがSysUtilsに含まれている。
Assert
真面目なCプログラマには馴染み深いASSERTマクロに相当する、Assert手続きが追加されました。 あとは__FILE__, __LINE__, __DATE__あたりが実装されれば完璧かも。
(しかしexitとかbreakとかもそうだけど、手続きと言い張るのは苦しいよなあ)
TList, TStringListの性能改善
大きなリストを抱えた時の速度低下とメモリ消費がかなり改善されている。
細かいことだがTStringList大好きな私にとっては大事な項目なので。
メモリリークの減少
Delphi 1.0からこまごまとあったライブラリでのメモリリークが、 ほとんど退治されている模様。
あとは各種バッファのサイズの小ささ(TIniFileとかTOpenDialogの複数選択とか)をなんとかして欲しいところ...
かなり使えるTeeChart(Pro版以上?)
コンパイラの付属コンポーネントの分際でここまで出来ていいのかと思うほど 高機能なグラフ表示用コンポーネントが付属している。 同名の市販コンポーネントのサブセットなのだが、 ここまで使えれば御の字である。
多次元データ回析用Decision Cube(C/S版のみ)
これ、用途によってはかなり便利なんだけど文章で説明するのは難しい...
他にもいろいろ増えたコンポーネントたち
パネルとパネルの間などに配置して実行時にサイズを変えることが出来る TSplitter(世界中で同様のコンポーネントを作ったのが数十人はいるだろう)とか、 日付入力を楽にするTDateTimePickerとか、 気の利いたコンポーネントが増えている。
IDE
賢くなったエディタ
'オブジェクト名.' まで打って少し待つと、 そのオブジェクトに対して有効なメソッド/プロパティ名の候補リストが カーソル位置にポップアップする。 また、関数・手続き名のあと左括弧をタイプした場合も、 引数として有効な型名が表示される。 それも、ついさっき定義したばかりのクラスや関数に対してもだ。
これが出来るということは、 編集中常時クラス定義のレベルまで構文解析を行っているようだ。 長いプロパティ名の途中の一文字が抜けてコンパイルエラー、 などというつまらないミスはこれで激減するだろう。 ただ、最初に全体の構文解析をするための分か、 エディタでファイルを開くのにかかる時間は長くなったようだが。 (そういえば統合環境自体の起動も遅くなった)
また、forやwhileまで打ってCtrl-Jを叩くと、 想定されるブロック構造を含んだ候補がやはりポップアップする。
あのBriefを元にしたエディタなのだから、 このくらい出来て当然という感じもあるが。
ここまで来たら、 次のバージョンではぜひ自由なキーアサインを許して欲しい。
ちなみに、エディタウィンドウの初期サイズが変更されており、 2.0のようにレジストリにDefaultWidthとDefaultHeightを設定する必要はあまりなくなった。
DLLのデバッグ
DLLを呼び出す側のexeファイルを指定する事により、 DLLもソースコードを見ながらデバッグ可能になっている。 これまでは単独のexeとしてテストした後でDLLに変更する必要があった。
強化されたCPUウィンドウ
非公開機能として以前から実装されていた CPUウィンドウだが、その内容がずいぶんと充実し、 レジスタ表示やスタック表示などTDに近いものになっている。
データベース関係
BDEを介さないデータベースアクセス
データベース回りのクラス階層が変更されたことにより、 BDE(Borland Database Engine)を使用しないデータベースへアクセスが可能になった。 もちろんそれなりのインターフェースドライバは必要だが。
特にTClientDataSetを使用して実データはRPCで取得させるようにすると、 アプリケーション実行側のマシンには一切DB関係のドライバをインストールせずにすむようになる。
サポートするデータベースの追加
接続可能なデータベースの種類が追加され、 上はDB2から下はMS-AccessのMDBファイルまで (MSのJETエンジンがインストールされている場合) 各種のDBがODBCを経由せずに操作可能になっている。 (主にC/S版)
良いことばかりでも‥‥
Delphi 3で一度でも触ったformがD1,D2で開けない
これはformを使い回す場合には結構やっかいな問題。 Delphi 3で一度でもセーブしたformと従来の物を delphi\bin\convert.exeでテキストファイルに変換して比較すると、
Delphi 1.0, 2.0のもの
object Form1: TForm1
  Left = 200
  Top = 102
  Width = 435
  Height = 300
  Caption = 'Form1'
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'System'
  Font.Style = []
  PixelsPerInch = 96
  TextHeight = 18
end
Delphi 3.0のもの
object Form1: TForm1
  Left = 200
  Top = 102
  Width = 435
  Height = 300
  Caption = 'Form1'
  Font.Charset = SHIFTJIS_CHARSET
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'System'
  Font.Style = []
  PixelsPerInch = 96
  TextHeight = 18
end
とfontにCharsetプロパティが増えているのがわかる。
このテキストファイルからform上のすべてのfontの該当部分を取り除いて再度convert.exeに食わせると、D1やD2で開けるformになる。 幸い、著名な Delphi Hacker の一人であるDr.Bob氏がこのプロパティの削除処理をやってくれるコマンドラインツール convert2.exeをすでに開発済である。
起動が遅い
どうも起動が遅い気がするので時計を見ながら計ってみたら、
DELPHI 1.0J10 sec
DELPHI 2.0J(Dev.)8 sec
DELPHI 3.0J(C/S)15 sec
(いずれもプロジェクトなしの状態で二回起動し二回目の値)
3.0がC/S版なので公平な比較ではないかもしれないが、 実に倍近い時間がかかっていることが判明。 たしかに大きくなってるもんなあ、EXEが。
BDEの下位非互換性
上位バージョンのAPIを呼んでいるのだから当然ともいえるが、 D2付属のBDEしかインストールしていないマシンではD3で作ったDBアプリケーションは動作しない。
ついでにD3ではBDE単独配布用のインストーラがどこを探しても見つからないのだが、 これは探し方が悪いのだろうか....
ドキュメントをよく読んだら
Borland では,インストールプログラムによるボーランドデータベースエンジン ファイルおよびそのサブセット(一部)の配布を認めていますが,それ以外の方法で BDE ファイルを個別に配布することは認めていません。
と書いてありました。 まあわからなくはないけど、InstallShieldってあまり好きじゃないんだよね....
Pascalのくせに型チェック甘くない?
これはD2からの問題だけど、 charとpcharを比較するようなコードでエラーどころか警告も出ない。 文字値とポインタの比較なんてCコンパイラですら警告されるような気がするんだけど。 さすがに代入ではエラーになるけどね。

その昔の「Delphi 2.0 first impression」へ
このページに関する連絡は anakata@mix.or.jp へ。
HOME