手把手带你写一门编程语言
宫文学
北京原点代码CEO
新⼈⾸单¥59.9
1239 人已学习
课程目录
已更新 14 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词|让我们来写一门计算机语言吧
免费
课前热身|开始学习之前我们要准备什么?
起步篇:让一门超简单的语言跑起来 (12讲)
01|实现一门超简单的语言最快需要多久?
02|词法分析:识别Token也可以很简单吗?
03|支持表达式:解析表达式和解析语句有什么不同?
04|如何让我们的语言支持变量和类型?
05|函数实现:是时候让我们的语言支持函数和返回值了
06|怎么支持条件语句和循环语句?
07|怎么设计属于我们自己的虚拟机和字节码?
08|基于TypeScript的虚拟机(一):实现一个简单的栈机
09|基于TypeScript的虚拟机(二):丰富特性,支持跳转语句
10|基于C语言的虚拟机(一):实现一个简单的栈机
11|基于C语言的虚拟机(二):性能增长10倍的秘密
12|物理机上程序运行的硬件环境是怎么样的?
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

11|基于C语言的虚拟机(二):性能增长10倍的秘密

你好,我是宫文学。
上一节课,我们初步实现了一个 C 语言版本的虚拟机,让它顺利地跑起来了。你想想看,用 TypeScript 生成字节码文件,然后在一个 C 语言实现的虚拟机上去运行,这个设计,其实和 Java 应用、Andorid 应用、Erlang 应用、Lua 应用等的运行机制是一样的。也就是说,如果退回到智能手机刚诞生的年代,你完全可以像 Android 的发明人一样,用这种方式提供一个移动应用开发工具。
其实,我国最新的自主操作系统 HarmonyOS,也是采用了像我们这门课一样的虚拟机设计机制,而且用的就是 TypeScript 语言,这也是我这门课采用 TypeScript 作为教学语言的原因之一。虽然我还没有看到 HarmonyOS 的虚拟机代码,但并不妨碍我去理解它的实现原理。当然了,你在学完这门课以后,也会更容易理解 HarmonyOS 的开发方式,而且也有助于你阅读它的虚拟机的代码。
好了,对于我们当前成果的吹捧到此打住。让我们回到现实,现实有点残酷:我们当前实现的基于 C 语言的虚拟机,在上一节课的性能测试中,竟然排名倒数第一。这显然不正常,这也说明了在虚拟机的设计中,我们还有一些重要的设计考虑被忽视了。
那这一节课呢,我们就来分析一下导致我们虚拟机性能不高的原因,并且针对性地解决掉这个问题。在这个过程中,你会加深对计算机语言的运行时技术的理解,特别是对内存管理的理解。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
该试读文章来自付费专栏《手把手带你写一门编程语言》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥59.9
立即订阅
登录 后留言

精选留言(3)

  • 大豆
    原来如此,Java,dart中一开始为堆,栈分配固定的内存大小。就是采用的Arena内存管理技术,从而减少了系统调用。
    从计算机硬件角度来看,Arena 内存管理技术能够增加l1,l2,l3的缓存命中率,减少从物理内存的读取次数,从而来提升效率。
    老师,我的想法对吗?
    2021-09-01
    1
  • 奋斗的蜗牛
    想不到c语言版的栈帧还可以怎么减少空间
    2021-09-02
  • qinsi
    目前这个vm的ts版本无论是字节码还是堆栈都是用Array存储的。入栈和出栈操作都是在Array尾部进行的,而Array是会动态调整大小的。一个可能的优化是事先固定Array大小并自己维护栈顶指针;也可以仿照Arena来尝试优化新创建Array的开销;还可以考虑用Buffer/ArrayBuffer替代Array。不过v8是个高度优化的引擎,上述这些优化究竟有没有作用还要看profile的结果。
    2021-09-01
收起评论
3
返回
顶部