WebAssembly - Nodejs ile Çalışma
Javascript, wasm koduyla çalışabilen bir sürü API'ye sahiptir. API, nodejs'de de desteklenmektedir.
NODEJS'i sisteminize kurun. Bir Factorialtest.js dosyası oluşturun.
C ++ Faktör kodunu aşağıda gösterildiği gibi kullanalım -
int fact(int n) {
if ((n==0)||(n==1))
return 1;
else
return n*fact(n-1);
}
Şu adreste bulunan Wasm Explorer'ı açın https://mbebenita.github.io/WasmExplorer/ aşağıda gösterildiği gibi -
İlk sütun C ++ faktöriyel işlevine sahiptir, 2. sütun WebAssembly metin biçimine ve son sütun x86 Assembly koduna sahiptir.
WebAssembly Metin biçimi aşağıdaki gibidir -
(module
(table 0 anyfunc)
(memory $0 1) (export "memory" (memory $0))
(export "_Z4facti" (func $_Z4facti)) (func $_Z4facti (; 0 ;) (param $0 i32) (result i32) (local $1 i32)
(set_local $1(i32.const 1)) (block $label$0 (br_if $label$0 (i32.eq (i32.or (get_local $0)
(i32.const 1)
)
(i32.const 1)
)
)
(set_local $1 (i32.const 1) ) (loop $label$1 (set_local $1
(i32.mul
(get_local $0) (get_local $1)
)
)
(br_if $label$1
(i32.ne
(i32.or
(tee_local $0 (i32.add (get_local $0)
(i32.const -1)
)
)
(i32.const 1)
)
(i32.const 1)
)
)
)
)
(get_local $1)
)
)
C ++ işlevi gerçeği, "_Z4facti"WebAssembly Metin formatında.
Factorialtest.js
const fs = require('fs');
const buf = fs.readFileSync('./factorial.wasm');
const lib = WebAssembly.instantiate(new Uint8Array(buf)).
then(res => {
for (var i=1;i<=10;i++) {
console.log("The factorial of "+i+" = "+res.instance.exports._Z4facti(i))
}
}
);
Komut satırınızda, factorialtest.js komut düğümünü çalıştırın ve çıktı aşağıdaki gibidir -
C:\wasmnode>node factorialtest.js
The factorial of 1 = 1
The factorial of 2 = 2
The factorial of 3 = 6
The factorial of 4 = 24
The factorial of 5 = 120
The factorial of 6 = 720
The factorial of 7 = 5040
The factorial of 8 = 40320
The factorial of 9 = 362880
The factorial of 10 = 3628800