🦕🦀用 Rust 编写 WebAssembly 并在 Deno 中运行它!
要求
您需要遵循机器上安装的工具:
- rustc
- 生锈
- 货物
- 德诺
这些是你在开发 Rust 和使用 Deno 时通常使用的标准工具。
现在我们需要安装 Rust 的 wasm 专用工具。
首先,我们需要添加一个编译器目标,如下所示:
rustup target add wasm32-unknown-unknown
我们还需要wasm-gc
工具
cargo install wasm-gc
我正在使用 Visual Studio Code 进行开发,并且针对这个项目我还安装了以下扩展:
- 更好的 Toml
bungcip.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