【发布时间】:2021-08-11 18:43:01
【问题描述】:
我想知道,使用 C(或 C++ 或 Rust)和 javascript,我是否能够对共享数据对象执行 CRUD 操作。使用最基本的示例,这里将是一个示例或每个操作:
#include <stdio.h>
typedef struct Person {
int age;
char* name;
} Person;
int main(void) {
// init
Person* sharedPersons[100];
int idx=0;
// create
sharedPersons[idx] = (Person*) {12, "Tom"};
// read
printf("{name: %s, age: %d}", sharedPersons[idx]->name, sharedPersons[idx]->age);
// update
sharedPersons[idx]->age = 11;
// delete
sharedPersons[idx] = NULL;
}
然后,我希望能够在 Javascript 中做完全相同的事情,并且都能够写入同一个共享的 sharedPersons 对象。怎么可能做到这一点?或者设置是否需要类似于“主从”,其中一个只需要将信息传回给另一个,而主控会执行所有相关操作?我希望有一种方法可以对 webassembly 中的共享数据对象进行 CRUD,任何帮助将不胜感激。
作为参考:https://rustwasm.github.io/wasm-bindgen/contributing/design/js-objects-in-rust.html
【问题讨论】:
-
我只能说 Rust+wasmbindgen 流程,但是由于 webassembly 使用不同的内存空间,所以创建的任何对象都保留在各自的内存中。跨越该边界,仅复制原语(整数、字符串),其他任何内容都使用代理。
-
@kmdreko 我明白了:所以 rust 端无法写入 js 端,反之亦然,也没有共享内存空间之类的东西? “代理”是什么意思?
-
这个的用例是什么?如果你导出你的 CRUD 函数,你可以从 javascript 调用它们;为什么你会需要 javascript 来亲自弄乱内存? (我确定是一个用例,我只是觉得很难想到一个。)
标签: javascript c++ c rust webassembly