wasm64-unknown-unknown

层级:3

使用 64 位内存的 WebAssembly 目标,依赖于 memory64 WebAssembly 提案。

目标维护者

  • Alex Crichton,https://github.com/alexcrichton

要求

此目标是交叉编译的。该目标以与 wasm32-unknown-unknown 目标相同的方式支持 std,也就是说它附带标准库,但许多 I/O 函数(如 std::fsstd::net)将简单地返回错误。此外,像 println! 这样的 I/O 操作实际上什么也不做,并且打印不会被路由到任何地方。这与 wasm32-unknown-unknown 目标相同。此目标默认情况下附带一个分配器,目前是 dlmalloc,它被 移植到 Rust

此目标与 wasm32-unknown-unknown 的区别在于它编译为 64 位内存而不是 32 位内存。这意味着 usize 是 8 字节大小,指针也是。不过,权衡是最大内存大小现在是完整的 64 位地址空间,而不是 wasm32-unknown-unknown 的 32 位地址空间限制的 4GB。

此目标不是稳定目标。 memory64 WebAssembly 提案仍在进行中,尚未标准化。这意味着没有多少引擎实现了 memory64 功能,如果它们实现了,它们很可能在标志后面,例如

  • Nodejs - --experimental-wasm-memory64
  • Wasmtime - --wasm-features memory64

还要注意,目前 wasm64-unknown-unknown 目标假设存在其他合并的 wasm 提案,例如(及其 LLVM 功能标志)

wasm64-unknown-unknown 目标旨在与其 "C" ABI 的默认 Clang 目标相匹配,这很可能与 Clang 的 wasm32-unknown-unknown 大致相同。

注意:由于此目标的早期阶段性质,在使用此目标时,您可能会遇到 LLVM 错误。如果遇到断言命中或发现错误,建议在 rust-lang/rust 或理想情况下在 LLVM 本身中打开一个问题。

此目标目前不支持 panic=unwind

构建目标

您可以通过将目标添加到 config.toml 中的 target 列表中来构建支持该目标的 Rust,并且该目标还需要构建 lld 才能工作。

[build]
target = ["wasm64-unknown-unknown"]

[rust]
lld = true

构建 Rust 程序

Rust 尚未为此目标提供预编译的工件。要为此目标编译,您需要启用目标构建 Rust(请参阅上面的“构建目标”),或者使用 build-std 或类似方法构建您自己的 std 副本。

请注意,以下 cfg 指令是为 wasm64-unknown-unknown 设置的

  • cfg(target_arch = "wasm64")
  • cfg(target_family = "wasm")

测试

目前,wasm64-unknown-unknown 的测试支持不是很好,Rust 项目没有为此目标运行任何测试。测试支持有点用,但没有 println!,运行起来并不令人兴奋。

交叉编译工具链和 C 代码

理论上可以使用 C 代码为 wasm64-unknown-unknown 编译 Rust 代码,但目前没有已知的工具链可以做到这一点。在撰写本文时,没有已知的适用于 wasm64-unknown-unknown 的 wasm “libc”,这意味着使用此目标混合 C 和 Rust 实际上无法做到。