# Rust dan WebAssembly di 2026: Panduan Wasm, wasm-bindgen dan Pertanyaan Wawancara > Tutorial Rust WebAssembly dengan wasm-pack dan wasm-bindgen. Pelajari cara membangun, mengoptimalkan, dan menguji modul Wasm dengan contoh praktis. - Published: 2026-08-07 - Updated: 2026-08-07 - Author: SharpSkill - Reading time: 5 min --- Rust WebAssembly (Wasm) menghadirkan performa mendekati native ke aplikasi web dengan mengompilasi kode Rust menjadi format biner yang dapat berjalan di browser dan lingkungan server. Kombinasi jaminan keamanan memori Rust dengan eksekusi sandboxed WebAssembly menciptakan fondasi yang kuat untuk komponen web berkinerja tinggi, mulai dari pemrosesan gambar hingga operasi kriptografi. > **Poin Penting** > > Rust dikompilasi ke WebAssembly melalui `wasm-pack` dan `wasm-bindgen`, menghasilkan modul yang dapat diimpor dan dipanggil langsung oleh JavaScript. Alur kerja melibatkan penulisan fungsi Rust, menambahkan anotasi `#[wasm_bindgen]`, mengompilasi ke `.wasm`, dan mengimpor kode glue JavaScript yang dihasilkan ke aplikasi web manapun. ## Menyiapkan Rust untuk Pengembangan WebAssembly Toolchain Rust memerlukan target `wasm32-unknown-unknown` dan `wasm-pack` untuk membangun modul WebAssembly. Alat-alat ini menangani kompilasi, optimasi, dan pembuatan binding JavaScript secara otomatis. ```bash # install-wasm-tools.sh # Add the WebAssembly target to rustup rustup target add wasm32-unknown-unknown # Install wasm-pack for building and packaging cargo install wasm-pack # Verify installation wasm-pack --version ``` Setelah instalasi, buat library crate baru yang dikonfigurasi untuk output WebAssembly. File `Cargo.toml` memerlukan pengaturan khusus untuk kompatibilitas Wasm. ```toml # Cargo.toml [package] name = "wasm-calculator" version = "0.1.0" edition = "2024" [lib] crate-type = ["cdylib", "rlib"] [dependencies] wasm-bindgen = "0.2.100" [profile.release] opt-level = "z" # Optimize for size lto = true # Link-time optimization ``` Tipe crate `cdylib` menghasilkan library dinamis yang cocok untuk WebAssembly. Optimasi profil release secara signifikan mengurangi ukuran file `.wasm` akhir—sering kali hingga 50% atau lebih dibandingkan build yang tidak dioptimalkan. ## Memahami wasm-bindgen dan Interop JavaScript Crate [wasm-bindgen](https://rustwasm.github.io/docs/wasm-bindgen/) menjembatani Rust dan JavaScript dengan menghasilkan binding type-safe secara otomatis. Fungsi yang dianotasi dengan `#[wasm_bindgen]` dapat dipanggil dari JavaScript, sementara fungsi JavaScript dapat diimpor ke Rust. ```rust // src/lib.rs use wasm_bindgen::prelude::*; // Export this function to JavaScript #[wasm_bindgen] pub fn fibonacci(n: u32) -> u32 { // Base cases for recursion match n { 0 => 0, 1 => 1, // Recursive calculation with tail-call optimization _ => fibonacci(n - 1) + fibonacci(n - 2), } } // Import console.log from JavaScript #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] fn log(s: &str); } // Export a function that uses console.log #[wasm_bindgen] pub fn greet(name: &str) { log(&format!("Hello, {}!", name)); } ``` Blok `extern "C"` mendeklarasikan fungsi JavaScript yang dapat dipanggil oleh kode Rust. Atribut `js_namespace` menentukan objek JavaScript yang berisi fungsi tersebut. Binding dua arah ini memungkinkan integrasi yang mulus antara logika Rust dan API JavaScript. ## Membangun dan Membundel Modul WebAssembly Perintah `wasm-pack build` mengompilasi Rust ke WebAssembly dan menghasilkan kode wrapper JavaScript. Target yang berbeda cocok untuk lingkungan JavaScript yang berbeda. ```bash # build-wasm.sh # Build for bundlers like webpack, Vite, or Rollup wasm-pack build --target bundler --release # Build for native ES modules (browser) wasm-pack build --target web --release # Build for Node.js wasm-pack build --target nodejs --release ``` Setiap target menghasilkan output yang berbeda di direktori `pkg/`. Target bundler bekerja dengan bundler JavaScript modern yang mendukung ES modules dan impor WebAssembly. Target web menghasilkan kode yang dapat dimuat langsung di browser melalui `