08|基于TypeScript的虚拟机(一):实现一个简单的栈机
宫文学
你好,我是宫文学。
上一节课,我们已经探讨了设计一个虚拟机所要考虑的那些因素,并做出了一些设计决策。那么今天这一节课,我们就来实现一个初级的虚拟机。
要实现这个初级虚拟机,具体来说,我们要完成下面三方面的工作:
首先,我们要设计一些字节码,来支持第一批语言特性,包括支持函数、变量和整型数据的运算。也就是说,我们的虚拟机要能够支持下面程序的正确运行:
第二,我们要做一个字节码生成程序,基于当前的 AST 生成正确的字节码。
第三,使用 TypeScript,实现一个虚拟机的原型系统,验证相关设计概念。
话不多说,开搞,让我们先设计一下字节码吧!
“设计”字节码
说是设计,其实我比较懒,更愿意抄袭现成的设计,比如 Java 的字节码设计。因为 Java 字节码的资料最充分,比较容易研究,不像 V8 等的字节码,只有很少的文档资料,探讨的人也很少。另外,学会手工生成 Java 字节码还有潜在的实用价值,比如你可以把自己的语言编译后直接在 JVM 上运行。那么我们就先来研究一下 Java 字节码的特点。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了基于TypeScript的虚拟机实现的技术挑战和设计方案。作者借鉴了Java字节码的设计,提出了自己的字节码设计方案,并通过代码示例展示了字节码生成过程。文章详细介绍了虚拟机执行引擎的实现原理,以及函数调用和返回的过程,涵盖了调用约定和ABI的相关概念。通过对字节码设计的讨论,读者能够深入了解基于TypeScript的虚拟机实现的技术特点和实现思路。本文为技术人员提供了宝贵的实践经验和思路,对于理解虚拟机实现过程具有重要参考价值。文章还提到了设计并实现了一个简单的基于栈机的虚拟机,介绍了栈机指令、字节码生成过程以及虚拟机执行引擎的运行原理。通过对BCModule中的常量表和函数符号的讨论,读者可以思考函数符号作为常量的潜在用途。整体而言,本文内容丰富,对于虚拟机实现和字节码设计感兴趣的读者具有重要参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- ifelse学习打卡2022-09-13归属地:浙江
- 罗 乾 林看了老师后面的课程来回答一下: 可以在运行期来显示错误信息 把函数名称和函数签名的信息加进去,会有利于我们实现多模块的运行机制。也就是说,如果一个模块中的函数要调用另一个模块中的函数,那么我们可以创造一种机制,实现模块之间的代码查找。2021-09-02
- 有学识的兔子函数符号被看作常量,是不是因为函数符号类似于函数地址,跟字符串常量和数字常量一样都不可以被更改? 这些符号信息是不是在需要调试或追踪程序运行信息时,方便了解程序运行的上下文信息?2021-08-29
- 奋斗的蜗牛回答一下思考题,符号表信息可以实现函数式编程的支持2021-08-26
- bjuthang赞👍2021-08-25
收起评论