问题标签 [wasmtime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
207 浏览

go - 从 wasm 函数返回多个值

我有一个在本地运行并连接到 wasm 模块的 Golang TCP 服务器。目前,我可以从 wasm 函数返回一个值。通过这个博客,我注意到应该有可能返回多个值而不是一个。但是,在我的 Go TCP 服务器中,我没有从 wasm 函数中得到任何响应。

这就是我返回一个值的方式,它工作正常:

在 Go 服务器中:

以下是我如何尝试从 wasm 函数返回多个值:

在 Go 服务器中,我添加了以下代码行:

其余的和以前一样:

我使用命令编译了 wasm 模块cargo wasi build,它编译得很好。但是,当向与 wasm 模块对话的 Go 服务器发送请求时,我收到一个错误,提示got 2 expected 3 arguments. 我不明白第三个论点应该是什么。

0 投票
2 回答
98 浏览

rust - 有没有办法检查 wasm 模块的导入

让我解释一下我在做什么。我有一个应用程序,我正在嵌入一个 wasm 引擎(特别是 wasmtime)并用 Rust 编写 wasm。目标不是一个浏览器,所以我没有使用 wasm-bindgen。我正在尝试从主机环境中导入两个函数。我已经让它工作了,但有一点黑客,我想删除黑客。这是我遇到的问题。我已经能够弄清楚如何让 Rust 在 wasm 输出中生成导入语句。问题是,如果不使用这些函数,则不包含 wasm 中的 import 语句。Wasmtime 似乎要求传递给 wasm 实例的导入数量与导入语句的数量相匹配。有意义的是,如果 wasm 模块需要导入,那么如果您不提供它们就会出现问题。问题是,如果您提供导入但未使用它们,这也是一个错误。

所以我看到了两种解决方法,要么我需要弄清楚如何让 Rust 包含 import 语句,即使它们没有被使用(现在黑客是调用函数但忽略结果,它基本上是不-op) 或找到一种方法来内省 wasm 以弄清楚它期望什么样的导入,并且只传递它所要求的。

我的问题是正确的方法,如果是这样,你怎么做?

0 投票
1 回答
48 浏览

rust - 在 Rust 中分配字段之前从闭包访问 Impl 字段?

我是 Rust 的新手,这可能很明显。

基本上我有这个场景,你可以在下面看到,我创建了一个添加了闭包的新类型,但是这个闭包需要访问尚未创建的数据。数据将在闭包被调用时创建,但在最初创建闭包时,数据尚不可用。

最好的处理方法是什么?

如果我的闭包不是闭包,而是我的实现中的私有函数,我也很好奇,我将如何访问该数据?这个闭包/函数是来自 WasmTime 的回调,需要一个显式的方法签名,它不允许我添加 $self 到它。那么如何在函数参数中不引用 $self 的情况下获取实现的实例字段呢?

0 投票
1 回答
42 浏览

webassembly - Wasmtime WASI 通过 HTTP/sockets 通信

有一个很棒的名为 Wasmtime 的 webassembly 编译器和虚拟机,它提供对执行的支持而无需任何嵌入,它允许从命令行直接运行 WASM 应用程序https://docs.wasmtime.dev/lang-bash.html

不幸的是,没有通过 WASI 执行 HTTP/网络通信的官方方法,因为 WASI 预览快照中不存在 HTTP/套接字,因此通过 Wasmtime 开发任何有用的应用程序都是有问题的

纯理论上不可能运行一些代理网络服务器,它从主机发出真正的 TCP 连接并通过自定义协议通过文件系统与 Wasmtime 应用程序通信,但它似乎过于复杂并且可能会影响性能不佳

有像https://github.com/deislabs/wasi-experimental-http这样的解决方案,但它不适合,因为需要在 Rust 中编写自定义入口点,安装 Rust 工具链并为一堆目标平台编译它,而不是下载独立的 executalbe来自受信任网站的文件https://wasmtime.dev/

几周前我打开了问题https://github.com/bytecodealliance/wasmtime/issues/3483,但不幸的是没有进展或答案

因此,Wasmtime 团队的主要任务是:如果任何通信功能不可用,那么使用 Wasmtime 运行时开发读取世界应用程序意味着什么?同时,像神经网络这样的外来扩展也在积极开发中,但是 HTTP/原始套接字支持是 MVP 的主要部分

谢谢