Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

IDEにおける背景変更機能の導入による開発効率への影響とその考察。

これはDelphi Advent Calendar 2012の参加記事です(9日ぶり2度目)。


真面目な記事だと思った?残念、痛IDEちゃんでしたー!

IDEというのは、痛車と同じ発想でIDEを二次元的なアレで飾っちゃおうぜ☆というアレなアレです。
VisualStudioやEclipseなど有名どころの開発環境にはそういった機能がすでに存在してますが、
Delphi(RAD Studio)では今まで不可能だったため、一部の開発者の作業効率が大きく落ちていたとの噂も。

というわけで

IDEプラグインです。
痛IDEプラグイン for RAD Studio Ver.0.02をダウンロード(追記:Ver.0.03を公開しました
VS2010の痛IDE拡張から遅れること丸3年というのがいかにもDelphiらしいですがそんなところでDelphiらしさを発揮しなくてもいいと思うの。
現在はDelphi6, 7, 及び RAD Studio 2007, 2010, XE2に対応してます。
最新のXE3は未対応ですが、それは単純にXE3を持ってないからなので、誰か買ってくれるのであれば物凄く早く起きてご飯を食べ仕事へ行き、帰ったらまたご飯を食べて十分な睡眠を取った後にゆっくり対応します。
ちなみにTwitterで先行公開した0.01のバグが修正されてたり、Delphi6で背景が透過しないとか言ってたのも気合で対応しました\(^o^)/

技術的なおはなし

やってることは至ってシンプルなJMP命令の書き込みによるフックです。
背景の描画は文字の描画に伴って行われるんですが、
色の設定で「コメント」「予約語」「識別子」等々と細かく設定できることから分かるように、
文字はかなり細かいパーツにわけて1画面だけで何百回と描画されていたりします。
その細かい描画の範囲と描画したい背景の範囲が被った時に被った部分だけを描画している関係上、
単純にCanvas.Draw(X, Y, Image)を1回呼ぶだけ!みたいにいかないので、処理としては重いです。
さらにアルファブレンドをしているので、画像サイズを大きくするほど目に見えてカックカクになります。
XE4ではOpen Tools APIが拡張されてこの辺が簡単に作れるようになるといいなぁ。

吸引力の変わらないただひとつのコンパイラ

やっていて面白かったのは、IDEの持つ背景描画メソッドがDelphi6とXE2で全く同じということですね。
この全く同じというのは、機械語レベルで同等ということです。
コードの配置アドレスが変わるのでCALL命令などのオフセットは当然変わってますが、
これだけ時代が変わっても同じというのは、コンパイラの最適化がちっとも進歩してない当時から完成度が高かったことが窺い知れます。