14. 単純な計算をする関数
function Module(stdlib, foreign, heap) {
“use asm”;
var abs = stdlib.Math.abs;
function f(a, b) {
a = +a;
b = +b;
var c = 0.0;
c = +abs(a) + +abs(b);
return c;
}
return {
f: f
};
}
var module = Module(window);
module.f(0.5, -1.2);
グローバル変数
引数の型宣言
ローカル変数宣言
Coercion(戻り値の型宣言)
int: x | 0
double: +x
14
20. WebAssemblyが解決すること
function asmModule($a,$b,$c){
'use asm';
var a=new $a.Int8Array($c);
var b=new $a.Uint8Array($c);
var c=new $a.Int16Array($c);
var d=new $a.Uint16Array($c);
var e=new $a.Int32Array($c);
var f=new $a.Uint32Array($c);
var g=new $a.Float32Array($c);
var h=new $a.Float64Array($c);
var i=$a.Math.imul;
var j=$a.Math.fround;
var $d=$a.Math.acos;
var $e=$a.Math.asin;
var $f=$a.Math.atan;
var $g=$a.Math.cos;
var $h=$a.Math.sin;
var $i=$a.Math.tan;
var $j=$a.Math.exp;
var $k=$a.Math.log;
var $l=$a.Math.ceil;
var $m=$a.Math.floor;
var $n=$a.Math.sqrt;
var $o=$a.Math.abs;
var $p=$a.Math.min;
var $q=$a.Math.max;
var $r=$a.Math.atan2;
var $s=$a.Math.pow;
var $t=$a.Math.clz32;
var $u=$a.NaN;
var $v=$a.Infinity;
function $w(k,l,m){
k=k|0;l=+l;m=j(m);
}
function $x(){
}
function $y(){
}
return {one:$w,two:$x};
}
77 61 73 6d 26 03 00 00 00 00 00 02 03 03 00 02
01 03 00 00 00 00 00 00 00 00 00 03 00 01 01 00
80 00 80 00 80 00 01 02 6f 6e 65 00 00 74 77 6f
00 01
理想
現実コンパイルの
オーバーヘッド
ファイルサイズの増大
による通信量の増加
asm.js WebAssembly
ファイルサイズの縮小
パースの簡略化
減少
増加
20