作者回复: 很棒!
作者回复: 是的哈,从目前的实现来看,为了保证 JS 与 Wasm 的互操作性,浏览器基本都是在现有的 JS 引擎基础之上来增加对 Wasm 字节码的支持的。而 Chrome,Firefox 以及 Safari 也都已经支持 Wasm 的 MVP 标准了。
作者回复: 会的,但某些情况下也可能会直接解释执行这些字节码。这个依照具体 JIT 引擎的设计实现来看。
作者回复: 最后一句可以反过来哈,Wasm 是一种字节码格式。
作者回复: 答案是 20,具体执行过程可以参考另一位同学画的栈图哈。累加器机模型实际上是一种十分古老的计算机模型,放在这里讲其实是考虑到内容的完整性。实际上,据我所知没有使用累加器机模型设计的虚拟机字节码(语言)。而比如像 “MOS 6502” 这类早期的硬件微处理器,实际上是采用了累加器模型这种结构来进行设计的。
作者回复: 实际上,从技术角度来看,Java 字节码和 Wasm 都可以被归类为同一种技术实现。即平台 Independency(写中文被判断成敏感词,无语),并且需要由宿主(虚拟机)执行。但由于两者发展的目的,以及所处时代不同,所以与它们配套的工具和基础设施本质上也有一些区别。比如 Wasm 最开始出现在 Web 上,并且在 Web 有一定的应用范畴。但 Java 由于之前 Java Applet 的淘汰,导致 Oracle 也没有在 Web 端恢复 Java 生态的打算。更进一步来看,Wasm 也支持更多源语言。并且 Wasm 字节码和 Java 字节码在设计上也有着很大区别。但最重要的一点是,当两个技术的形态比较类似时,大多数情况下,哪个会被应用的更加广泛实际上完全取决于社区整体的状态,而非技术本身。
作者回复: 对的,可以这样类比。
作者回复: WASM 作为一套新的字节码,本身并不提供对 socket 这类宿主功能的支持。相对的,这部分功能由 WebAssembly System Interface 来抽象和定义,可以看看这里:https://github.com/WebAssembly/wasi-sockets
作者回复: Wasm 本质上是一套抽象的字节码格式,它不对应于任何物理体系,因此如何去执行这些字节码,标准中并没有规定。所以你能够看到现在有很多各种各样的独立虚拟机引擎(比如 WAVM、wasmtime 等)都可以去执行这些字节码。当然,浏览器在 V8 引擎里也构建了一套可以执行 Wasm 的虚拟机,使得它们可以与 JS 环境交互,来完成 Web 应用的相关功能需求。
作者回复: 可以再想想哦。