asm.jsの変数

いちごパック > asm.jsの解説 > asm.jsの変数

変数

asm.jsに対応した関数を用意し、その関数がasm.js対応であると宣言することで、 高速化の恩恵を受けられるようになります。 この関数は外部から呼び出す形で使います。また、外部の関数を呼び出すこともできます。 したがってasm.jsの周辺には、次の変数が存在することになります。
種類内容
関数グローバルの変数int,double,float,特定のデータ配列,ライブラリ関数,外部関数
関数の引数int,double,float
関数内部の変数int,double,float
関数の戻り値double,signed,float,void

変数の型

変数は次のいずれかの型を持ちます。 本来はint,float,doubleのみを扱いたいのですが、 Javascriptとの互換性を保つための型がいくつか追加されています。 追加された型を元の型に戻すためには、次に説明する型変換を利用します。
暗黙の変換が可能な型内容
fixnumsigned,unsigned,int,intish0〜0xffffffffの定数です。数値に応じて変換されます。
signedint,intish32ビット符号つきであると確定している数です。
unsignedint,intish32ビット符号なしであると確定している数です。
intintish符号は不明ですが、32ビットであると確定している数です。
intishなし32ビット整数表現できる可能性は高いものの、オーバーフローが起こりうる数です。
doubledouble?double(64ビット浮動小数値)であることが確定しているです。
double?なしdoubleの可能性は高いものの、undefinedの可能性がある数です。配列アクセスで発生します。
floatfloat?,floatishfloat(32ビット浮動小数値)であることが確定しているです。
float?floatishfloatの可能性は高いものの、undefinedの可能性がある数です。配列アクセスで発生します。
floatishなしfloat表現できる可能性は高いものの、オーバーフローが起こりうる数です。

関数内部の変数の型指定

関数内部の変数は、次の表に示す式を初期化時に与えることにより、 型を指定して初期化する必要があります。 asm.jsでは、関数中で変数の型を変えることはできません。
初期化時に与える値変数の型
ピリオドつきの数値double
- 0x80000000 〜 +0xffffffffの数値int
fround(ピリオドつきの数値)float
これ以外の値で初期化すると、asm.jsに対応していないスクリプトとして扱われます。

変数の型変換

intishやdouble?など、Javascriptとの互換性のために生まれた型をそのまま使うと、 Javascriptとしては正しく動作しますが、asm.js対応のスクリプトとして扱えなくなります。 asm.js対応のスクリプトでは、次の方法により、型を明示的に変換する必要があります。
以下に、型を明示的に変換する方法を表にまとめました。 fround()はライブラリ関数Math.fround()です。
変換前の型変換後の型変換式
任意signedx = x|0;
任意intx = x|0; (signedと同じです)
任意doublex = +x;
任意floatx = fround(x);