09|基于TypeScript的虚拟机(二):丰富特性,支持跳转语句
宫文学
你好,我是宫文学。
在上一节课里,我们已经实现了一个简单的虚拟机。不过,这个虚拟机也太简单了,实在是不够实用啊。
那么,今天这节课,我们就来增强一下当前的虚拟机,让它的特性更丰富一些,也为我们后续的工作做好铺垫,比如用 C 语言实现一个更强的虚拟机。
我们在这一节课有两项任务要完成:
首先,要支持 if 语句和 for 循环语句。这样,我们就能熟悉与程序分支有关的指令,并且还能让虚拟机支持复杂一点的程序,比如我们之前写过的生成斐波那契数列的程序。
第二,做一下性能比拼。既然我们已经完成了字节码虚拟机的开发,那就跟 AST 解释器做一些性能测试,看看性能到底差多少。
话不多说,开干!首先,我们来实现一下 if 语句和 for 循环语句。而实现这两个语句的核心,就是要支持跳转指令。
了解跳转指令
if 语句和 for 循环语句,有一个特点,就是让程序根据一定的条件执行不同的代码。这样一个语法,比较适合我们人类阅读,但是对于机器执行并不方便。机器执行的代码,都是一条条指令排成的直线型的代码,但是可以根据需要跳转到不同的指令去执行。
针对这样的差异,编译器就需要把 if 和 for 这样结构化编程的代码,转变成通过跳转指令跳转的代码,其中的关键是计算出正确的跳转地址。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
基于TypeScript的虚拟机的丰富特性和对跳转语句的支持是本文的重点。文章首先介绍了对虚拟机的简单实现不够实用的问题,并设定了增强虚拟机特性的目标。详细讲解了跳转指令的概念和在编译器中的应用,以及对if语句和for循环语句的支持所需的跳转指令。作者通过Java示例程序展示了if语句的字节码生成过程,并解释了有条件跳转指令和无条件跳转指令的作用。此外,文章还提到了goto语句的底层机制和与协程实现的关联。在升级字节码虚拟机方面,文章介绍了对跳转指令的支持和性能比拼,展示了TypeScript栈机在斐波那契数列计算中的性能提升。最后,文章提出了对虚拟机性能测试结果的思考,并鼓励读者分享和讨论。整体而言,本文深入浅出地介绍了虚拟机的丰富特性和对跳转语句的支持,为读者提供了深入理解虚拟机内部实现的知识。文章内容涵盖了虚拟机的设计、编译器的应用、跳转指令的生成和虚拟机性能测试等方面,适合对字节码虚拟机感兴趣的读者阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 惜心(伟祺)从计算机执行的指令来看语言设计2022-11-17归属地:上海
- ifelse满意,学习打卡2022-09-13归属地:浙江
- chris文中关于分支和跳转指令的麻烦, 其实都是源于跳转目标是一个绝对地址, 如果设计成一个相对偏移的话, 其实就不存在了. 并且java字节码ifxxx和goto后面跟的也都是相对偏移. 这里不知道老师为什么要设计成绝对地址, 出于什么考虑?2021-09-011
- 闫志刚念念不忘,必有回响2021-09-01
- pedro虚拟机的本质就是:在软件层面上再造物理机。 Java 字节码可以看作是对汇编的一种模仿、简化和实现。2021-08-29
- 有学识的兔子是不是和老师提示的那样,使用C/C++来编写虚拟机,以获得转译和运行字节码上性能的提升。2021-08-29
- qinsi因为最终是编译成js运行的,可以用node —prof看下有没有明显的性能瓶颈2021-08-28
收起评论