2

非常に興味があります。通常のアクション スクリプトよりもバイトコードを使用して SWF を構築する利点はありますか?

私が読んだように、コードを少し高速化する方法がいくつかありますが、as3code でできないことはありますか?

編集: コーディング スタイル、問題、型チェック、および構文に焦点を当てないでください。たとえば、バイトコードで記述された 1 つのクラスを持つ外部 SWF があり、低レベルのコーディングから得られるメリットを知りたいと考えています。

4

2 に答える 2

2

ローランが投稿したものに追加するだけです。ASC は、これまで Adob​​e 製品で使用されていた ActionScript コンパイラです (MXML は ASC のコードを使用し、Flash CS のコンパイラはカスタマイズされたビルドを持っていますが、どちらも実際のコンパイラには大きな影響を与えませんが、フロント エンド/「接着剤」として機能します。リンカーおよびその他のユーティリティ)。

ASC は最適化コンパイラではありません。つまり、低レベル言語にコンパイルするときに通常可能な最適化を行わないということです。生成されたバイトコードを分析して、誤りがないことをほぼ確実にするレベルに限定します。(コンパイラが有効な AS3 コードから誤ったコードを生成する可能性は依然としてあります)。

バイトコードと AS3 で記述できるすべての有効なコードの間には、1 対 1 の対応はありません。つまり、AS3 は、バイトコードで可能なことのサブセットに制限されます。結果のバイトコードで、特定の値がスタック上にある場合に取得する方が簡単であることがわかる可能性は十分にありますが、AS3 にはそこから値を取得するためのツールはありません。たとえば、ループ内の残りのコードが最初のレジスタに対して読み取り/書き込みを行わないことがわかっている場合、最初のレジスタにイテレータが含まれていることに依存するループ イテレータの作成を回避できたはずです。明らかに、バイトコードの処理方法を分析すると、さらに多くの「機能」を発見できます。

ただし、目標がきめ細かく、非常に具体的でない限り、局所的に最適化しても重要なことはほとんど達成されないことを理解することが重要です。たとえば、特定の暗号化アルゴリズムや文字列解析ルーチンなどです。プログラムの大部分を手動で最適化するのは非常に困難です。実際、非常に難しいため、少なくとも実際に最適化していることを確認するためのツールが必要になります。最終的には、このツールを使用して最適化されたコードのバリアントを生成し、それらをテストしていることに気付くでしょう - これがコンパイラの構築方法です:)

于 2012-04-24T10:17:30.540 に答える
2

Flash コンパイラは、Flash プレーヤーで使用できるすべてのオペコードを使用するわけではないため、理論的には、オペコードを「手動で」記述することでパフォーマンスを向上させることができます。

たとえば、Haxe コンパイラは Alchemy OpCodes を利用して、Flash と比較してパフォーマンスを向上させることができます。

Alchemy OpCode にアクセスする

Adobe Alchemy で使用される、SWF プレーヤーに隠されているメモリ割り当て用の OpCodes があります。Haxe にはそれらにアクセスする機能があり、低レベルのメモリ アクセスが可能になり、大幅な速度の向上が可能になります。

http://haxe.org/doc/why

ただし、これらのオペコードを使用することがどれほど安全かはわかりません。これらは公式の Flash コンパイラではサポートされていないため、Flash Player の将来のリリースでは削除される可能性があります。

于 2012-04-24T09:16:15.623 に答える