跳到主要内容

Rust

2024年12月19日
柏拉文
越努力,越幸运

一、认识


Rust 是另一种广泛用于编写高性能 WebAssembly 模块的语言。Rust 的官方工具链也支持直接编译到 WebAssembly

二、安装 Rust 工具链


2.1 安装 Rust 工具链

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2.2 安装 WebAssembly 目标

为了支持 Rust 编译为 WebAssembly,你需要安装 wasm32-unknown-unknown 目标:

rustup target add wasm32-unknown-unknown

2.3 安装 wasm-pack 工具

wasm-pack 是一个用于简化 RustWebAssembly 编译过程的工具,它可以自动生成可以直接在 JavaScript 中使用的 .wasm 文件和包装代码。

cargo install wasm-pack

三、编写 Rust 源代码


// src/lib.rs

#[wasm_bindgen]
pub fn count_primes(start: u32, end: u32) -> u32 {
let mut count = 0;
for num in start..=end {
if is_prime(num) {
count += 1;
}
}
count
}

#[wasm_bindgen]
fn is_prime(num: u32) -> bool {
if num <= 1 { return false; }
for i in 2..=(num as f64).sqrt() as u32 {
if num % i == 0 {
return false;
}
}
true
}

这里我们使用了 wasm_bindgen 来暴露 Rust 函数到 JavaScript

四、编译为 WebAssembly


使用 wasm-pack 来编译 Rust 代码并生成 .wasm 文件:

wasm-pack build --target web

该命令会生成一个 pkg 目录,里面包含了编译后的 *.wasm 文件和可以在 JavaScript 中使用的包。

五、在 JavaScript 中使用 WebAssembly


在生成的 pkg 目录中,你会得到 .wasm 文件和封装的 JavaScript 文件。你可以通过以下方式在 JavaScript 中加载和使用:

import init, { count_primes } from './pkg/your_package.js';

async function run() {
await init(); // 初始化 WebAssembly
const primes = count_primes(1, 100);
console.log(`Prime count in range [1, 100]: ${primes}`);
}

run();