言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

ScreamingDonkey

http://screamingdonkey.hurlant.com/

むかし、Flash で使われている ActionScript が次期 Javascript になるのではという話がありました。その計画は頓挫しましたが、もしもブラウザで ActionScript が使えたらこうなるという雰囲気を楽しむのが ScreamingDonkey です。ScreamingDonkey では、HTML ファイルの script タグに書かれたActionScript を実行する事が出来ます。サンプルでは、Javascript の代わりに ActionScript エンジンを使って Canvas 要素に Processing.js の図形を描いています(作者の言う通り Flash の描画エンジンを使わないでわざわざ Canvas を使うというのはかなりオタク的です)。

ScreamingDonkey の面白い所は、Tamarin の esc を使ってスクリプトコンパイルする部分です。普通 ActionScriptJavascript と違って実行時にコンパイル出来ませんが、esc を使うと可能なのです。

私は ActionScript の仕組みに興味があって、特にバイトコードから Flash Player にアクセスする部分はどうなっているか調べたいと思っていました。最初同じ作者の http://eval.hurlant.com/ を使っていたんだけど、ソースコードをビルド出来なかったので ScreamingDonkey を試してみました。

ビルド手順

実行手順

ScreamingDonkey.swf は js/ ディレクトリにあるスクリプトを使って 呼び出す事になっています。evalui/index.html にサンプル用の HTML がありますが、どういう訳か SecurityError: Error #2060: Security sandbox violation というエラーが出るので、ウェブサーバー経由で見る必要があります。適当な所にアップするなりローカルのウェブサーバーを使うなりすると、http://screamingdonkey.hurlant.com/demo/evalui/ と同じ画面が現れます。

ソースコードのみどころ

動的に生成した ABC ファイルを実行する部分が面白かったです。http://screamingdonkey.hurlant.com/demo/srcview/source/com/hurlant/eval/ByteLoader.as.html Flash は swf を動的に読み込めるので、abc を出来るだけ単純な swf に埋込んでから読み込みます。また、どういう訳か Tamarin esc のファイルはソースコードじゃ無くて abc バイナリとしてソースツリーに置いてあって、同じ仕組みで実行時に読み込んでいます。