作者回复: 代码会放到实战篇哈。
作者回复: 嗯嗯,我这里讲的可能不太严谨,其实应该是平台相关的代码,比如V8,那就是V8内部用于表示WebAssembly.Module 这个对象的代码组织形式。一般来说会先解释执行字节码来快速启动,然后再由JIT编译成机器码。当然具体实现可能有所不同。
作者回复: 有的哈,诸如 i32.store 等指令对应的立即数都是由 offset 和 alignment 两部分组成的。
作者回复: 关于兼容性可以在 MDN 上对应各个 Wasm API 最下面的兼容性列表中查看哈。目前来看,在最新版的 Nodejs 中,除了 Streaming 相关的 API,其他的应该都有支持的,因此是可以直接使用的。而关于对 WASI 的兼容性,可以参考这里:https://nodejs.org/api/wasi.html
作者回复: 实际上,一个 WebAssembly.Module 对象在浏览器内部是怎样表示的,这个确实要看具体实现。但能够知道的是其内部肯定存放有与对应 Wasm 模块相关的一些信息。可以参考我之前实现过一个 Wasm 引擎(链接在下面),这里的模块对象内部存放有静态的 Wasm 信息,比如各个段的内容、版本等等。而当实例化时,才会对初始化表达式、内存段、数据段、入口地址等做正确的调整,而这个过程就是基于静态模块内的信息来进行的。当然具体情况还是依不同引擎的实现而定。 https://github.com/Becavalier/TWVM/blob/e0e9c263bd33d8d8f32f7986838b57ae35ec9fd1/lib/include/structs.hh#L45
作者回复: 收到,感谢你的反馈!由于这门课已经节课,所以在结构上目前可能无法进行太大的调整,但你的建议我收到了,如果后面这门课还会做改版的话,我会再进行适当的修正。