継続こそ力

11月から始めたSwingアプリケーション向けフレームワークの実装、DIコンテナの実装が完了したのは日記で報告したが、そもそもの目標であった「年内で画面を表示する所まで辿り着く」にぎりぎり到達できそうだ。といってもDIコンテナで必要なクラスのインスタンスを生成し、標準的なUI(ツールバー、ステータスバー、ボタン)を構築する所まで、といった所だ。
ここまで一ヶ月だが、.NET版を開発した時と比べて6倍の速さで実装したことになる。これは何もJavaの生産性がC#に比べて突出して良い訳でも、私の能力がサイヤ人のように向上した訳でも無い。単に既に形になっている.NET版フレームワークの要件と設計をまんま踏襲しているからだ。例えるならば既に設計図はあり、使う建材も同じ、方法だけがちょっと違うだけなので、仕事が早くて当然なのである。

実際にSwingベースのアプリケーションプロトタイプが出来てみて思ったのは

「Java SE6のSwingアプリケーションは今までに無く軽く速い」

ということだ。仮に同程度の複雑さを持つGUI構成であれば、NET 2.0 C#で書いたWindowFormsアプリケーションよりも平均起動時間は速いこともあるだろう。ハードウェアアクセラレーションを使えるようになり動作も極めて軽いし、Java SE6ではなんと日本語フォントのレンダリングにおけるサブピクセルアンチエイリアスまで自力でやってのけるのである。※1
なんというか、執念というか、複雑で大規模(過ぎる)ツールキットを諦めずによくもここまで磨き上げたものだと思う。

恐らくWindows上で動作するGUIアプリケーションでMicrosoftの開発プラットホームがたった一点であってもJavaの後塵を拝することなど今まで無かったのではないだろうか。それに、なんといってもSwingアプリケーションはそのまんまでLinuxでもMacでも動くのである。これは.NETもうかうかしていられないところだろう。

※1 Windows Vista Ultimate + Java SE 6 Update N Early Access(最新ビルド)で実行したアプリケーションでの話しだが、特に変わったことはしていない。せいぜいサブピクセルアンチエイリアスを有効にするために、JVM起動オプションに"awt.useSystemAAFontSettings=on"を追加している位。