03 | WebAssembly 是一门新的编程语言吗?
堆栈机模型
- 深入了解
- 翻译
- 解释
- 总结
WebAssembly(Wasm)是一种基于堆栈式虚拟机的二进制指令集,被设计成为一种编程语言的可移植编译目标。本文从堆栈机模型、寄存器机和累加器机模型的角度探讨了WebAssembly的运行原理。通过对比这三种计算模型,读者可以更好地理解WebAssembly的特点和运行机制。文章还介绍了ISA与V-ISA的区别,以及Wasm作为一种V-ISA指令集的设计原因。最后,通过展示一段标准的Wasm指令,读者可以对Wasm的执行方式有了更深入的了解。总的来说,Wasm是一种基于堆栈机模型设计的V-ISA指令集,具有助记符形式和二进制字节码形式,适用于高级编程语言的最终编译目标。文章以此为基础,引出了对WebAssembly的认识和定位的讨论。
《WebAssembly 入门课》,新⼈⾸单¥29
全部留言(13)
- 最新
- 精选
- IV0id我觉得应该是20啊,命令执行每一行命令之后stack状态如图 i32.const 1 | 1 i32.const 1 | 1,1 i32.eq | 1 i32.const 10 | 1,10 i32.const 10 | 1,10,10 i32.add | 1,20 i32.mul | 20
作者回复: 很棒!
2020-09-09525 - 奕wasm 就是一种可以在虚拟机上执行的字节码。 对于 JS 引擎 v8 , SpiderMonkey, JavascriptCore 是不是都支持直接执行 wasm 字节码了?
作者回复: 是的哈,从目前的实现来看,为了保证 JS 与 Wasm 的互操作性,浏览器基本都是在现有的 JS 引擎基础之上来增加对 Wasm 字节码的支持的。而 Chrome,Firefox 以及 Safari 也都已经支持 Wasm 的 MVP 标准了。
2020-09-1026 - 军秋和汇编的区别是wasm最终是字节码,汇编的最终是机器码。字节码最后会被浏览器转成机器码吗?
作者回复: 会的,但某些情况下也可能会直接解释执行这些字节码。这个依照具体 JIT 引擎的设计实现来看。
2020-09-233 - 大土豆说个最能让大家快速理解的说法,就是Java虚拟机,执行的是字节码,不管是什么jvm语言,Java,kotlin等,最后生成字节码就行,字节码就是WASM
作者回复: 最后一句可以反过来哈,Wasm 是一种字节码格式。
2020-09-093 - 风请教老师,如果想实现wasm的目的,能否直接使用jvm,而不是另外开发一套V-ISA.
作者回复: 实际上,从技术角度来看,Java 字节码和 Wasm 都可以被归类为同一种技术实现。即平台 Independency(写中文被判断成敏感词,无语),并且需要由宿主(虚拟机)执行。但由于两者发展的目的,以及所处时代不同,所以与它们配套的工具和基础设施本质上也有一些区别。比如 Wasm 最开始出现在 Web 上,并且在 Web 有一定的应用范畴。但 Java 由于之前 Java Applet 的淘汰,导致 Oracle 也没有在 Web 端恢复 Java 生态的打算。更进一步来看,Wasm 也支持更多源语言。并且 Wasm 字节码和 Java 字节码在设计上也有着很大区别。但最重要的一点是,当两个技术的形态比较类似时,大多数情况下,哪个会被应用的更加广泛实际上完全取决于社区整体的状态,而非技术本身。
2022-01-102 - pedro最后的结果应该是 110,错了请指正。 这节可以说完全道出了 webassembly 的本质,它并不是一种新的编程语言,因为你只需要编写其他的语言,例如 c++ 和 rust 从而生成对应的字节码。 对于栈模型的语言太多了,例如 Java,寄存器模型有 lua,请问一下老师累加器模型的编程语言有哪些了?
作者回复: 答案是 20,具体执行过程可以参考另一位同学画的栈图哈。累加器机模型实际上是一种十分古老的计算机模型,放在这里讲其实是考虑到内容的完整性。实际上,据我所知没有使用累加器机模型设计的虚拟机字节码(语言)。而比如像 “MOS 6502” 这类早期的硬件微处理器,实际上是采用了累加器模型这种结构来进行设计的。
2020-09-0922 - Geek_175b82这是不是类似于Java 的.class字节码文件?
作者回复: 对的,可以这样类比。
2020-10-171 - 严敏请问WASM中对在浏览器中对socker支持的如何
作者回复: WASM 作为一套新的字节码,本身并不提供对 socket 这类宿主功能的支持。相对的,这部分功能由 WebAssembly System Interface 来抽象和定义,可以看看这里:https://github.com/WebAssembly/wasi-sockets
2023-03-11归属地:浙江 - only有一点不明白,是浏览器集成了wasm的虚拟机还是操作系统集成了wasm虚拟机?
作者回复: Wasm 本质上是一套抽象的字节码格式,它不对应于任何物理体系,因此如何去执行这些字节码,标准中并没有规定。所以你能够看到现在有很多各种各样的独立虚拟机引擎(比如 WAVM、wasmtime 等)都可以去执行这些字节码。当然,浏览器在 V8 引擎里也构建了一套可以执行 Wasm 的虚拟机,使得它们可以与 JS 环境交互,来完成 Web 应用的相关功能需求。
2022-05-04 - sheeeeep我的答案 1,1 1 1,10,10 1,110 110
作者回复: 可以再想想哦。
2020-09-092