如何不使用wasm-pack将Rust项目编译为Wasm?

时间:2020-04-01 21:05:12

标签: rust webassembly

我想使用python-ext-wasm将Rust程序/项目编译为Wasm,以便在我的Python应用程序中使用。现有教程假定它是针对网络的,并建议使用wasm-pack。有没有JavaScript绑定就可以将Rust编译为Wasm的另一种方法?

例如,如果我有一个Rust程序(myproject/math.rs)。

#[no_mangle]
pub extern fn sum(x: i32, y: i32) -> i32 {
    x + y
}
  1. 如何在没有wasm的情况下将其转换为webpack文件?

  2. 如何获取整个项目(具有库依赖项)并将其全部编译为Wasm?

1 个答案:

答案 0 :(得分:5)

您可以直接使用cargo build --target wasm32-unknown-unknown编译WebAssembly。本质上,这就是围绕wasm-packwasm-bindgen之类的其他工具构建的,如果您不希望这样做(例如,如果您不针对JavaScript),则可以使用它直接编译为WebAssembly

一些警告:

  • WebAssembly模块与主机之间的所有通信都必须使用extern函数进行。这意味着只能使用数量有限的类型,主要是原始类型(整数,浮点数,布尔值和指针)。除非您在顶部使用附加的抽象层(这就是wasm-bindgen的作用),否则您将无法传递复杂的类型。
  • wasm32-unknown-unknown目标不支持标准库的大部分(例如,包括文件系统和网络)。如果您的WebAssembly主机支持WASI(WebAssembly系统接口),则可以使用wasm32-wasi目标来编译具有WASI支持的模块,该模块支持更多标准库。