WebAssembly adalah bahasa assembly berperforma tinggi yang dapat dikompilasi dari berbagai bahasa, termasuk C/C++, Rust, dan AssemblyScript. Saat ini, bahasa ini didukung oleh Chrome, Firefox, Safari, Edge, dan Node.js!
Spesifikasi WebAssembly merinci dua format file, format biner yang disebut Modul WebAssembly dengan ekstensi .wasm dan representasi teks terkait yang disebut format Teks WebAssembly dengan ekstensi .wat.
Konsep Utama
- Modul - Biner WebAssembly yang dikompilasi, yaitu file .wasm.
- Memori - ArrayBuffer yang dapat diubah ukurannya.
- Tabel - Array referensi yang dapat diubah ukurannya yang tidak disimpan dalam Memori.
- Instansi - Instansiasi Modul dengan Memori, Tabel, dan variabelnya.
Untuk menggunakan WebAssembly, Anda memerlukan file biner .wasm dan serangkaian API untuk berkomunikasi dengan WebAssembly. Node.js menyediakan API yang diperlukan melalui objek WebAssembly global.
console.log(WebAssembly);
/*
Object [WebAssembly] {
compile: [Function: compile],
validate: [Function: validate],
instantiate: [Function: instantiate]
}
*/
Membuat Modul WebAssembly
Tersedia beberapa metode untuk membuat file biner WebAssembly, termasuk:
- Menulis WebAssembly (.wat) secara manual dan mengonversinya ke format biner menggunakan alat seperti wabt
- Menggunakan emscripten dengan aplikasi C/C++
- Menggunakan wasm-pack dengan aplikasi Rust
- Menggunakan AssemblyScript jika Anda lebih suka pengalaman seperti TypeScript
Beberapa alat ini tidak hanya membuat file biner, tetapi juga kode "lem" JavaScript dan file HTML terkait untuk dijalankan di browser.
Cara menggunakannya
Setelah Anda memiliki modul WebAssembly, Anda dapat menggunakan objek Node.js WebAssembly untuk membuat instance-nya.
// Assume add.wasm file exists that contains a single function adding 2 provided arguments
const fs = require('node:fs');
// Use the readFileSync function to read the contents of the "add.wasm" file
const wasmBuffer = fs.readFileSync('/path/to/add.wasm');
// Use the WebAssembly.instantiate method to instantiate the WebAssembly module
WebAssembly.instantiate(wasmBuffer).then(wasmModule => {
// Exported function lives under instance.exports object
const { add } = wasmModule.instance.exports;
const sum = add(5, 6);
console.log(sum); // Outputs: 11
});
Berinteraksi dengan OS
Modul WebAssembly tidak dapat mengakses fungsionalitas OS secara langsung. Alat pihak ketiga Wasmtime dapat digunakan untuk mengakses fungsionalitas ini. Wasmtime menggunakan API WASI untuk mengakses fungsionalitas OS.
Resources
0 Comments