@
mcfog GC 是不可能的,读过 wasm 标准就知道,wasm 连数据类型尚且都只有 3 种( number 、ref 、vector ),连没有原生 string 都没有,更别说什么 gc 了,wasm 的定位并不是 VM ,而是跨平台的汇编语言。
实际上 wasm 和 wasi 从显示角度上来说我认为分家还是比较彻底的,不然 as 也不会和 wasi 决裂,wasi 程序是很难跑在 wasm 环境下的,反之也是如此。
语言层面上面也说了,wasm/wasi 的定位并不是 VM ,所以我认为对于多语言的支持分为解释型语言( Python 、php 等)和基于 VM 的编译型语言( Java )。
对于前者解释型语言很好处理,只要把解释器编译成 wasm 或 wasi 即可,例如 RustPython 做的就很好,CPython 也有了进展,但还是实验性的。
但对于 Java 这种语言来说,本身把 Java 编译成 wasi 是没有意义的,因为 Java 本身的定位就是 write once run everywhere ,Java 虽然也能支持 AOT 编译,但是 Java 框架大量使用反射,并且在 Java 生态这么做的人实在是太少了,所以我认为把 Java 编译成 wasi 现实是不行的,但如果把 JVM 编译到 wasi 又太过于愚蠢。
C#和 Java 类似,
官方具有本身有.NET Native 特性,而且微软积极拥抱 WASM ,Blazor 使用了大量的 WASM ,我还没有太深入研究,我觉得未来肯定是可以编译到 WASI 的。
所以现在 wasi 生态可以用语言:C/C++、Python ( RustPython )、Rust 、Go ( TinyGo ),我认为还是有一定选择的余地的。