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
是一个用于简化 Rust
到 WebAssembly
编译过程的工具,它可以自动生成可以直接在 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();