【发布时间】:2017-12-08 21:13:17
【问题描述】:
我想对我的网络应用程序的每一帧的大量数据进行计算。 JavaScript 只会使用其中的一个子集,因此与其每帧在 WebAssembly 和 JavaScript 之间来回发送整个数据集,不如在我的 WebAssembly 模块内部维护数据。
在 C 中,类似这样的工作:
#include <emscripten/emscripten.h>
int state = 0;
void EMSCRIPTEN_KEEPALIVE inc() {
state++;
}
int EMSCRIPTEN_KEEPALIVE get() {
return state;
}
在 Rust 中是否可以实现同样的事情?我试着用这样的static 来做:
static mut state: i32 = 0;
pub fn main() {}
#[no_mangle]
pub fn add() {
state += 1;
}
#[no_mangle]
pub fn get() -> i32 {
state
}
但似乎static 变量不能是可变的。
【问题讨论】:
-
但静态变量似乎不能是可变的。 - 你为什么这么说?错误消息明确告诉你如何使用它们:“使用可变静态需要不安全的函数或块”。现在,这是否是一个好主意是一个不同的问题......
-
这是blog post of someone who successfully used
lazy_static!for this purpose。请注意,他们需要将其包装在 Mutex 中以使编译器满意,因此我不知道性能影响是什么。而且他们没有使用 emscripten,而是使用了wasm32-unknown-unknown编译器目标。
标签: rust webassembly