DEV Community

Phil IPS
Phil IPS

Posted on

Intro To Webassembly With Rust

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
Enter fullscreen mode Exit fullscreen mode

Then install wasm-pack:

cargo install wasm-pack
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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)