#statically #linker #embedding #stop #automating #binaries

nightly macro bin wasmir

用于自动化静态链接 WASM 二进制的库

13 个版本

0.1.13 2021 年 6 月 10 日
0.1.12 2021 年 6 月 9 日

#816WebAssembly

Download history 1/week @ 2024-06-29 6/week @ 2024-07-06 88/week @ 2024-07-27 1/week @ 2024-08-03

89 每月下载量

MIT/Apache

13KB
249

wasmir

一个用于将高性能 WASM 代码直接嵌入 Rust 程序的库。这个包是为那些绝对讨厌编写 JavaScript 的人创建的。这个库的目标是通过自动编译 WASM 模块并将它们静态链接到你的二进制文件中来减少实现 WASM 所需的额外开销。你需要安装 wasm-bindgen。如果你的项目停止构建,请提交一个问题。

使用方法

将 wasmir 添加为 Cargo.toml 的依赖项

wasmir = "0.1.13"

代码必须在模块内声明。典型用法如下

use wasmir::wasmir;

#[wasmir]
mod my_module {
   use wasm_bindgen::prelude::*;
   
   #[wasm_bindgen]
   extern "C" {
      pub fn alert(s: &str);
   }
   
   #[wasm_bindgen]
   pub fn greet(name: &str) {
      unsafe {
         alert(&format!("Hello, {}!", name));
      }
   }
}

一旦 proc_macro 完成其工作,上述模块将包含两个二进制 blob 常量,wasmloader。从 "my_module.js" 服务器加载 loader,从 "my_module_bg.wasm" 服务器加载 wasm。然后,在 index.js 中包含以下代码

import init from './my_module_bg.js';
import {greet} from './my_module_bg.js';

function run() {
   greet(\"World\");
}

init().then(run)

你还可以这样指定 WASM 依赖项

#[wasmir(
[dependencies]
wasm-bindgen = "*"
[dependencies.web-sys]
version = "*"
features = ["Document", "Node", "Element"]
)]

依赖项

~1.9–2.5MB
~54K SLoC