WebAssembly - Làm việc với Nodejs
Javascript có một loạt API có thể hoạt động với mã wasm. API cũng được hỗ trợ trong nodejs.
Cài đặt NODEJS trên hệ thống của bạn. Tạo tệp Factorialtest.js.
Hãy để chúng tôi sử dụng mã Giai thừa C ++ như hình dưới đây:
int fact(int n) {
if ((n==0)||(n==1))
return 1;
else
return n*fact(n-1);
}
Mở Wasm Explorer, có sẵn tại https://mbebenita.github.io/WasmExplorer/ như hình dưới đây -
Cột đầu tiên có chức năng giai thừa C ++, cột thứ 2 có định dạng văn bản WebAssembly và cột cuối cùng có mã hội x86.
Định dạng Văn bản của WebAssembly như sau:
(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)
)
)
Thực tế hàm C ++ đã được xuất dưới dạng “_Z4facti”Ở định dạng Văn bản của WebAssembly.
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))
}
}
);
Trong dòng lệnh của bạn, hãy chạy nút lệnh factorialtest.js và kết quả như sau:
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