SlideShare a Scribd company logo
Flash Player の作り方 小林 悠  (yukoba)
自己紹介 JavaScript 上で動く処理系をいろいろ作ってきました。 Java Ruby Browser 版、Flash 版 Scheme
Open Screen Project 2008年5月1日 – Adobe Open Screen Project にて、 Flash の仕様書を読んだ人も Flash Playerを作ってもよくなりました。 前は、 読んでいない人->作ってOK  読んだ人->作っちゃだめ たぶん、ECMAScript 4がActionScript 3ベースにする予定だったためか?(推測)
Flash Playerの要素 以下の3つが Flash Player を作るうえでの肝 AVM (ActionScript Virtual Machine) ActionScript を実行します。 1 と 2 の両方を作る必要あり。 描画 gyuque さんが話すよ! タイムライン この部分が最もドキュメント不足。 Gnash の Wiki が最も情報多いです。 onLoad 、 onUnload 、 onEnterFrame の呼ばれるタイミングなどが不明確。あまりにも難しい話が多すぎて話せません。 全体として、ドキュメントが不十分。仕様不明のため作るのが困難。
互換性の問題 ドキュメント化されていない部分に、バグとしか思えない仕様が多数あります。 互換性維持のため、Flash 5用にパブリッシュしたら、Flash 5のバグぽい部分もFlash Player 10で再現。 Flash 6は変数の大文字小文字区別しないが、Flash 7は区別します。同じAVM1。 Flash Player 10 = 1+2+3+4+…+10 これは作るの、大変…
with AVM2 (ActionScript3) の場合 var a = 456; with({a: 123}) { trace("a = " + a); } 456  と出る。 JavaScript  は  123 。 AVM1 は 静的スコープでなく、動的スコープ movieClip のプロパティとかぶると、 read と write でスコープ解決のルールが変わる Flash Player の完全再現は大変…
JavaScriptのJIT JavaScriptにJITがのり、劇的に高速化されました。 Firefoxは次の3.1から Safariも次から Google Chromeはすでに搭載済み。 JIT (Just in Time)とは、実行時にCPUのネイティブコードに変換すること。
AVM2 on JS with JIT ActionScript 3のソースコード -> SWFファイル by Flex 3 -> ActionScript バイトコードを文字列に変換 by Tamarin -> JavaScript で読み込む ->  ActionScript  バイトコードを  JavaScript  のソースに変換。 -> 高速に実行!
作り方 ABC pushshort 5 pushshort 3 multiply setlocal_1 JS 自前のコンパイラ用のスタックを用意して、 {type: “number”, value: 5} をスタックに積む {type: “number”, value: 3} をスタックに積む {type: “src”, src: “(3 * 5)”} をスタックに積む local1 = (3 * 5);  を出力
ベンチマーク
ベンチマーク
ベンチマーク(イメージ)
Flash 11 への希望 AVM1 AVM2 LLVM AS1,2 AS3 C/C++ Flash Player 11 CPU GPU
Thank you!
URL ブログ http:// d.hatena.ne.jp /yukoba/

More Related Content

Flash Playerの作り方