要在 Rust 中编写 WebAssembly (WASM) 代码,您需要遵循以下步骤:
安装 Rust 工具链:首先,确保您已经安装了 Rust。这将安装 rustc
(编译器)、cargo
(包管理器)和 wasm32-unknown-unknown
目标(用于生成 WASM 二进制文件)。
创建一个新的 Rust 项目:打开终端,运行以下命令以创建一个名为 wasm_example
的新项目:
cargo new wasm_example --lib
这将在 wasm_example
目录中生成一个包含库文件(lib.rs
)的新项目。
cd wasm_example
lib.rs
文件并编写您的 WASM 代码。例如,以下代码将一个简单的加法函数编译为 WASM:#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
这里,#[no_mangle]
属性确保函数名不会被改编,以便在 WASM 代码中使用。pub extern "C"
表示该函数可以被其他语言调用。
cargo build --target wasm32-unknown-unknown --release
这将在 target/wasm32-unknown-unknown/release
目录中生成一个名为 libwasm_example.wasm
的 WASM 文件。
index.html
的文件,其中包含以下内容:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WASM Example</title>
</head>
<body>
<script>
async function loadWasm() {
const response = await fetch('libwasm_example.wasm');
const bytes = await response.arrayBuffer();
const module = await WebAssembly.compile(bytes);
const instance = await WebAssembly.instantiate(module);
const add = instance.exports.add;
const result = add(1, 2);
console.log('1 + 2 =", result);
}
loadWasm();
</script>
</body>
</html>
这里,我们使用 fetch
API 从服务器获取 WASM 文件,然后使用 WebAssembly.compile
和 WebAssembly.instantiate
API 编译和实例化 WASM 模块。最后,我们调用 add
函数并将结果输出到控制台。
http.server
模块,或者使用其他 Web 服务器软件(如 Nginx 或 Apache)。在项目目录中运行以下命令以启动一个简单的 Web 服务器:
python -m http.server 8000
这将启动一个运行在端口 8000 上的简单 Web 服务器。
http://localhost:8000
,您应该看到控制台输出 “1 + 2 = 3”,表示 WASM 代码已成功运行。这就是使用 Rust 编写和运行 WebAssembly 代码的基本过程。您可以根据需要编写更复杂的 Rust 代码并将其编译为 WASM。