Flex2雑感

お仕事その他で(その他(^^;)?)最近、Adobe Flex2を使っています。
Adobe Flex2は、Flash9に準拠したSWFファイルを吐くコンパイル環境のことで、コンポーネントを使った一般的なアプリケーションをxmlとECMAScript4準拠の独自仕様ActionScriptで記述できるようになっています。
とりあえず、Flashが元から持っていたタイムラインなどのアニメーションを実現するための機能は隠蔽され、イベントに対する応答という形でアプリケーションを記述することができます。
ActionScriptECMAScriptに準拠しているにも関わらず強い型付けが行われ(なにせ、コンパイル時に静的型が指定されていないと軒並みエラーになる)、Flash9のプレイヤは可能な限りJITをかけようとするのでスクリプトのパフォーマンスはかなり高く使えます。


っていうのが、まずは前提。純粋にFlashだと思うとかなり肩すかしを食らう、ただのプログラミング環境です。実行する環境としてFlashを使っているだけで、CLRJavaなんかとにたようなものです。


で。
感想としては。

思ったよりも速いけど、期待してたほどは速くない

これですね。
プログラムはバイトコードに落とされ、バイトコードJITがかかるので、そこそこ早く動作します。ですが、きちんと計ってはいませんがほぼ同等のアルゴリズムでかかれたJava6のアプリに比べると1/2から1/3くらいの動作速度です。
また、ネットワークやファイルからのロード動作が妙に遅いです。URLStreamというクラスがSymbianの非同期コネクションに似たリスナーの登録によるストリームからの読み込みなのですが、ロードしたものを片っ端から読み捨てるようにしてもこれがなぜか妙に遅いという……。なんだろうなぁ、何かうまくやる方法があるのかなぁ。
あ、ただ、ヒープは論理メモリの限界まで使い倒せることは判りました。さすがマルチメディアコンテンツ用実行環境。JavaAppletみたいにサンドボックスが小さいってこともありません。……って、しみじみ考えるとなんかこれ自体はやばそうだけど(^^;)>無制限にヒープ使える
ま、とはいえ、Javaにできていたことはたいがいできるくらいには強力な開発環境ですので、クライアント向けアプリケーションとしてはいいんじゃないでしょうか。
なにせ、JavaAppletと違い、今時は実行環境の普及率は段違いですし、最初に起動する際もVMの初期化でしばらく待たされるなんてこともありません。一般人向けのアプリではこの辺のストレスのなさが重要ですしね。


……でも、単にアプリを作って張り付けるだけなら、Swingを使ったJavaAppletの方が圧倒的に強力です。配布バイナリも小さいし、実効速度もずっと速いし、何よりだいぶ作りやすいです。強い型付けを強要するECMAScriptって、あの文法おかしくない? varやfunctionキーワードが激しくじゃまだし、型付けが強いくせにメソッドのオーバーライドはないし……。
ま、しばらくつきあってみます。