Intro to WebAssembly with Rust
Introduction
WebAssembly (Wasm) is a binary instruction format for a stack-based virtual machine. It enables near-native-speed execution in web browsers and is increasingly used for performance-critical applications. Rust, with its memory safety guarantees and excellent WebAssembly support, is a perfect language for creating Wasm modules.
Why Rust for WebAssembly?
Rust provides:
- Memory safety without a garbage collector
- Powerful macro system for code generation
- Excellent tooling for WebAssembly via
wasm-pack - Strong community support for Wasm development
Setting Up Your Environment
First, install Rust if you haven't already:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Then install wasm-pack:
cargo install wasm-pack
Creating a Simple WebAssembly Module
Let's create a Rust function that adds two numbers:
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
This function takes two i32 parameters and returns their sum. The #[no_mangle] attribute ensures the function name isn't mangled, and extern "C" makes it callable from JavaScript.
Building the Module
Compile the Rust code to WebAssembly:
wasm-pack build --target web
This creates a pkg directory with the Wasm file and JavaScript bindings.
Using the Module in JavaScript
In your HTML file:
<script type="module">
import init, { add } from './pkg/your_module.js';
async function run() {
await init();
const result = add(5, 7);
console.log('5 + 7 =', result);
}
run();
</script>
</html>
Conclusion
With Rust and WebAssembly, you can create high-performance web applications. This is just a simple example - explore more complex use cases like game engines, image processing, or cryptographic operations. The combination of Rust's safety and Wasm's performance opens up exciting possibilities for web development.
Top comments (0)