トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     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の実実装に使えますが
管理しやすさやや速度アップの点からも複雑な構成のムービーでは使用を考慮すると良いと思われます。


----------------
通常のハンドル名:×○○× ねた回収モードに突入 現在1/100

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   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

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops