BeInteractive!

«Prev | 1 | Next»
2007年 03月 24日

という選択肢ももはや夢では無いですよね。Tamarinのおかげで、高速、マルチプラットフォーム、オープンソースでガベコレ付きなAS実行環境が誰にでも手に入るようになった訳です。

IT戦記さんの、1月30日のエントリの資料では、ASのコンパイルとTamarinでの実行を実際にやってみた記録が書かれてます。これを見ると、何となく新しい可能性を感じませんか?

そういえばFlex Builder 2.0.1から、やっと独自のメタデータの保持が出来るようになりました。

コンパイラオプションに、

-keep-as3-metadeta Hoge Fuga

と「keep-as3-metadata」オプションに続けて保持させたいメタデータ名を列挙するか、

<?xml version="1.0"?>
<flex-config xmlns="http://www.adobe.com/2006/flex-config">
    <compiler>
        <keep-as3-metadata>
            <name>Hoge</name>
            <name>Fuga</name>
        </keep-as3-metadata>
    </compiler>
</flex-config>

という設定ファイルを「metadeta-config.xml」等の名前で作って、コンパイラオプションで

-load-config+=metadeta-config.xml

とかすれば、

[Hoge(foo = "aaa")]
public class Sample
{
    [Fuga(bar = "bbb", baz="ccc")]
    public var val:String;
}

てな感じでメタデータを書いたときに、それがそのままバイトコードに埋め込まれます。flash.utils.describeTypeを使うと、実行時に取得できます。

「それActionScriptでやる必要あるの?」的なものをあえて実装したい身としては、やっぱりActionScript3でもスクリプトエンジン作りたいよね。で、やるからにはAS3だからこそ出来るモノを作りたい。

そうなると、実はもうやるべきことはほとんど決まってくる。それは、「言語仕様はECMAScript4で、ActionScriptByteCode(ABC)にコンパイルして、ネイティブ実行」。

ECMAScript4は、ご存知ActionScript3.0のベースとなってる言語仕様。

ActionScriptByteCode(ABC)ってのは、その名の通り、ActionScriptで使われてるバイトコード。AS3から採用。FlashやFlexでActionScriptをコンパイルすると、全てこのABCってヤツに変換されるわけです。フォーマットについては、Tamarin参照。つまり、ABCコンパイラを作っておけば、ASとの高い互換性を確保できると。

で、このABCをネイティブ実行。ASでそんなこと出来るの?って思うかもしれないけど、理論的には可能なはず。ABCをSWFで包んで、Loaderに読み込ませて、ApplicationDomainからClassをgetDefinitionすれば、めでたく本物のクラスが取り出せる(はず)。これを利用して、ABCを本物のAVM上で実行する。ただ、念のために自前のAVMも作っておいた方がいいかなぁ。

これが実現できると、まさに「ActionScript3.0上でActionScript3.0が動く」環境が整う。動的コンパイルとか、アスペクトなんかに応用できるんじゃないかなー。

と、妄想を垂れ流しつつ、いつやるかは分からないで終了。やるならSparkのプロジェクトとしてやります。

«Prev | 1 | Next»

カテゴリ

タグ

アーカイブ

最新コメント

最新トラックバック