Flash Player の作り方 小林 悠  (yukoba)
自己紹介 <ul><li>JavaScript 上で動く処理系をいろいろ作ってきました。 </li></ul><ul><ul><li>Java </li></ul></ul><ul><ul><li>Ruby </li></ul></ul><ul...
Open Screen Project <ul><li>2008年5月1日 – Adobe Open Screen Project にて、 Flash の仕様書を読んだ人も Flash Playerを作ってもよくなりました。 </li></ul...
Flash Playerの要素 <ul><li>以下の3つが Flash Player を作るうえでの肝 </li></ul><ul><ul><li>AVM (ActionScript Virtual Machine) </li></ul></...
互換性の問題 <ul><li>ドキュメント化されていない部分に、バグとしか思えない仕様が多数あります。 </li></ul><ul><li>互換性維持のため、Flash 5用にパブリッシュしたら、Flash 5のバグぽい部分もFlash Pla...
with <ul><li>AVM2 (ActionScript3) の場合 </li></ul><ul><ul><li>var a = 456; </li></ul></ul><ul><ul><li>with({a: 123}) { </li>...
JavaScriptのJIT <ul><li>JavaScriptにJITがのり、劇的に高速化されました。 </li></ul><ul><ul><li>Firefoxは次の3.1から </li></ul></ul><ul><ul><li>Saf...
AVM2 on JS with JIT <ul><li>ActionScript 3のソースコード </li></ul><ul><li>-> SWFファイル by Flex 3 </li></ul><ul><li>-> ActionScript...
作り方 <ul><li>ABC </li></ul><ul><ul><li>pushshort 5 </li></ul></ul><ul><ul><li>pushshort 3 </li></ul></ul><ul><ul><li>multip...
ベンチマーク
ベンチマーク
ベンチマーク(イメージ)
Flash 11 への希望 AVM1 AVM2 LLVM AS1,2 AS3 C/C++ Flash Player 11 CPU GPU
Thank you!
URL <ul><li>ブログ </li></ul><ul><ul><li>http:// d.hatena.ne.jp /yukoba/ </li></ul></ul>
Upcoming SlideShare
Loading in …5
×

Flash Playerの作り方

11,020 views

Published on

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
11,020
On SlideShare
0
From Embeds
0
Number of Embeds
374
Actions
Shares
0
Downloads
21
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Flash Playerの作り方

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

×