🦕🦀用 Rust 编写 WebAssembly 并在 Deno 中运行它!

2025-06-07

🦕🦀用 Rust 编写 WebAssembly 并在 Deno 中运行它!

要求

您需要遵循机器上安装的工具:

  • rustc
  • 生锈
  • 货物
  • 德诺

这些是你在开发 Rust 和使用 Deno 时通常使用的标准工具。
现在我们需要安装 Rust 的 wasm 专用工具。
首先,我们需要添加一个编译器目标,如下所示:

rustup target add wasm32-unknown-unknown

我们还需要wasm-gc工具

cargo install wasm-gc

我正在使用 Visual Studio Code 进行开发,并且针对这个项目我还安装了以下扩展:

  • 更好的 Tomlbungcip.better-toml
  • rust-lang.rust

创建一个 Rust 库

对于 Rust 部分,我们需要创建一个小型的 Cargo 库。
我们可以使用以下命令来完成:

cargo new --lib wasm_deno_example
cd wasm_deno_example

接下来,我们可以在 VSCode 中打开项目
,并且我们需要将 wasm 的依赖项添加到我们的Cargo.toml.

[lib]
crate-type =["cdylib"]

cdylib使我们的项目可以与其他语言(例如 C 或本例中的)一起使用wasm。它还删除了 Rust 所需的所有特定内容。

我们的小锈功能

我们现在将src/lib.rs文件更改为以下代码:

#[no_mangle]
pub extern "C" fn square(x: u32) -> u32 {
    x * x
}

这是一个简单的函数,它接受一个数字并返回一个数字。
这里重要的是,我们添加了extern关键字,以便可以在 Deno 代码中导入此函数。当你阅读类似这篇文章时,你应该明白这一点x * x😉

将 rust 编译为 wasm

现在我们可以将 Rust 代码编译为 Wasm 代码了。
首先,我们需要使用以下命令进行编译和构建:

$ cargo build --target wasm32-unknown-unknown

我们还需要删除所有不需要的内容。这将删除所有不需要的代码wasm,并使文件更小。

wasm-gc target/wasm32-unknown-unknown/debug/wasm_deno_example.wasm

就是这样,我们现在有一个wasm二进制文件可以加载到 Deno 中并执行。

使用 Deno 运行

我们现在需要创建一个main.ts。 的名称其实并不重要,我在这里只使用这个。

当我们需要在文件中添加如下代码时。

const wasmCode = await Deno.readFile("./target/wasm32-unknown-unknown/debug/wasm_deno_example.wasm");
const wasmModule = new WebAssembly.Module(wasmCode);
const wasmInstance = new WebAssembly.Instance(wasmModule);
const {
    square,
} = wasmInstance.exports;

console.log(square(1));
console.log(square(2));
console.log(square(3));
console.log(square(4));

让我们来看看这些步骤。

  • 1.简单加载原始文件。
  • 2. 从我们的文件中创建一个 wasm 模块。这样我们就可以使用它了。
  • 3. 创建模块的实例,以便我们可以使用这些功能。
  • 4. 我们正在将我们的wasm square()函数导入到我们的 Deno 代码中。
  • 5. 我们正在控制台记录不同数字的平方数。

现在让我们用以下代码执行此代码

deno run --allow-read main.ts

输出应如下所示:

1
4
9
16

回购

您可以在以下Repo中找到代码

你想看更多 Deno 内容吗?请告诉我!我想写更多关于 Deno 的帖子和内容!

👋打个招呼! Instagram | Twitter | LinkedIn | Medium | Twitch | YouTube

文章来源:https://dev.to/lampewebdev/writing-web assembly-in-rust-and-runing-it-in-deno-144j
PREV
React + Mapbox 初学者教程 Mapbox 和 React
NEXT
🚄Node On Rails:查找后端服务器:探索 NestJS 第 1 部分!