メイン コーダーズルーム【スクリプト系】 switch や if での場合分けの上限数 | 投稿するにはまず登録を |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
Fla4man | Åê¹ÆNo.28896 投稿日時: 2006-9-24 18:47 |
職人 居住地: かまくら 投稿: 517
使用環境:
|
Re: switch や if での場合分けの上限数 とりあえず元スレの話はもっぱらコンポーネント関連だということでおちついたことなので
質問の文字通りの説明をさせてもらいます。 命令のブロック長をあらわすaction_lengthが16bitということでバイトコードが16bitということではありません。 無論「クラスのバイトコード」という概念も存在しません。 オープンソースであるFlash movie formatのバイトコードは基本1byteで各種構造体で定義しています。 スクリプトブロックもまず1byteで定義されます。 リンク先のサイトは「ASを組むうえでの結果論」としてはある程度参考になりますが 基本的なコーディング能力を伴なった論議は皆無といっていいので ほとんど参考にはならないと思います。(ex.メモリ関連のはなしなど) そもそもFlash move Formatはいわゆるバイトコードエンジンではありません。 純然たるバイトコードエンジンたるアドビVM2用のバイナリーを吐き出すFlex2とは全く別の存在で AS3とはテキストで表現された言語でありバイトコードマシンとセットではありますがAS3自体現状のFlashに展開できる事を考えると AS3=VM2用バイトコードという等号は成り立たないと思います。 従ってフォーマットとしてみてFlash Movie Formatのスクリプトとは全く関係ないので「拡張」という単語は不適切です。 話を戻します。 リンク先の話は命令ブロック長の16bit制限に基づく話なわけですが if文とswitch文については別の16bit制限があります。 基本的にSWF movie formatにはswitch文は存在しません。 全てif文同様branch文とbranchiftrueに展開されます。 branch命令はオペランドが16bit型なので±32kbyteまでしかジャンプできないという問題があります。 これはラベルの数でも命令の数でもなくバイトの長さ直接です。 前後に自由に飛べます。 ゆえにFlashlite1.0はFlash4互換なのにfor やswitchが言語としては可能だったわけです。 ジャンプはラベル数でも命令数でもなくてバイト長なので 実際に直接文字列の長いものが挿入されるとエラーになります。 Flash4だと定数を使わないので変数に長文を入れればエラーがでやすいのですがエラーコードは出さず間違ったコードを吐き出します。 Flash5以降は文字列は原則インスタンスの先頭で定数宣言するので1バイトないしは2バイトで表現します。 switch文を展開した場合 しょっぱなの比較文からブロックの終わりまでが32kbyteあると FlashIDEが利口でなければ多分うまく動くコードを吐かないかエラーになるかだと考えられます。 つまり最悪if文1個でもうまくコードが生成できない可能性があるということです。 しかしコンパイラが妥当にコードを組む能力があれば長い文字列長がなければ branch命令で継ぎ足して長さはいくらでも増やすことが出来ます。 また比較処理のブロックを関数化すれば比較文自体短く出来ます。 この方法は特に多数を均一にアクセスするswitchの実実装に使えますが 管理しやすさやや速度アップの点からも複雑な構成のムービーでは使用を考慮すると良いと思われます。
|
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
switch や if での場合分けの上限数 | kumakuma | 2006-9-21 20:19 |
Re: switch や if での場合分けの上限数 | kurage | 2006-9-21 23:23 |
Re: switch や if での場合分けの上限数 | kumakuma | 2006-9-22 0:15 |
Re: switch や if での場合分けの上限数 | kurage | 2006-9-22 1:20 |
Re: switch や if での場合分けの上限数 | kumakuma | 2006-9-22 1:36 |
Re: switch や if での場合分けの上限数 | ymori | 2006-9-22 1:58 |
Re: switch や if での場合分けの上限数 | kumakuma | 2006-9-22 14:57 |
Re: switch や if での場合分けの上限数 | ymori | 2006-9-22 15:19 |
Re: switch や if での場合分けの上限数 | kumakuma | 2006-9-22 15:56 |
Re: switch や if での場合分けの上限数 | alpha | 2006-9-24 10:32 |
Re: switch や if での場合分けの上限数 | Fumio | 2006-9-24 10:56 |
Re: switch や if での場合分けの上限数 | kumakuma | 2006-9-24 13:41 |
» Re: switch や if での場合分けの上限数 | Fla4man | 2006-9-24 18:47 |
Re: switch や if での場合分けの上限数 | ymori | 2006-9-22 1:26 |
投稿するにはまず登録を | |