小编eas*_*ons的帖子

为什么使用 wasm-bindgen 编译为 WASM 时,正常运行的 Rust 库会失败并出现无法访问的代码错误?

将此库视为依赖项:

[dependencies]
rustengine = "1.0.60"
Run Code Online (Sandbox Code Playgroud)

针对它编译这个小程序:

[dependencies]
rustengine = "1.0.60"
Run Code Online (Sandbox Code Playgroud)

这将实例化库的主要对象,调用昂贵的计算,然后打印它的统计信息。它输出:

    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target\debug\rustengine.exe`
node(s) 320006 , time 0.47 sec(s) , nps 677.4099 kNode(s)/sec
Run Code Online (Sandbox Code Playgroud)

现在在官方 Rust WASM 示例中使用相同的依赖项

https://developer.mozilla.org/en-US/docs/WebAssembly/Rust_to_wasm

并修改greet函数以针对相同的库依赖项执行相同的两个命令:

use rustenginelib::uci::*;

fn main() {
    let mut uci = create_default_uci();

    uci.process_uci_command("perft 4".to_string());
}
Run Code Online (Sandbox Code Playgroud)

编译时不会出现警告或错误,npm 包已构建,在 localhost:8080 上提供,WASM 可执行文件运行并失败并出现错误

Uncaught (in promise) RuntimeError: unreachable
    at wasm-function[117]:0x1459f
    at wasm-function[188]:0x1636d
    at wasm-function[232]:0x16792
    at wasm-function[9]:0x6692
    at wasm-function[52]:0xf068
    at Module.greet (webpack:///./node_modules/@easychessanimations/chessengine-wasm/chessengine_wasm_bg.js?:87:68)
    at eval (webpack:///./index.js?:3:6)
Run Code Online (Sandbox Code Playgroud)

一旦注释掉昂贵的计算(但不是库对象的初始化),该示例就可以工作:

    Finished …
Run Code Online (Sandbox Code Playgroud)

unreachable-code rust webassembly

5
推荐指数
0
解决办法
1623
查看次数

标签 统计

rust ×1

unreachable-code ×1

webassembly ×1