目前看到 Moonbit 采用 FFI 进行交互,而 FFI 交互的局限性较多,即它仅接受和返回少量核心类型(本质上只有整数和浮点数)的函数。更丰富的类型,例如字符串、列表、记录(结构)等处理困难,容易造成性能问题。
WASM 的解决方案是 WIT ,通过 Canonical ABI (Application Binary Interface),进行交互。
Moonbit 是否可以参考 WIT 来做,以解决 FFI 的问题。
是不是可以考虑直接使用 WIT ,复用目前正在制定的 WASI 2 规范,省去很多标准库的设计时间。
可以的,wit-bindgen有moonbit支持。
anuoua
3
嗯,看到这个项目了,但是这个似乎只是解决了 WASM 和 moonbit 两者之间的交互。
我更关心 moonbit 如何通过 WIT 定义标准库,并且同时兼容三个后端?
感觉缺少一套基础设施来做这个工作?
显然兼容三个后端并不现实,因为三个后端的实现各自不同。
只能根据你的具体需求进行实现。
那么现在的标准库主要侧重是哪个端? WASM 吗?或者是 native?
我觉得 mbt 需要一个侧重端,作为主力生态位。
目前的标准库不侧重任何一个后端,或者你可以认为是pure的部分,类似Haskell非IO Monad的那部分。