新手上路学习JavaScript引擎实现——路线图

对编程语言的设计与实现有浓厚兴趣。喜欢把玩编译器与虚拟机。从事Spark SQL以及Databricks服务的研发;以前从事Java虚拟机与JavaScript虚拟机研发。

1003 👍 / 28 💬

最近在知乎接连看到几个相关的问题:


这些问题都是试图从阅读源码着手去学习JavaScript引擎的实现的。然而,对新手而言,直接从一个复杂的实现的源码着手,不可避免的是事倍功半的做法。

要学习JavaScript引擎的实现,就跟学习其它东西一样,最好是循序渐进的来,先打好基础,再去结合现实学习主流实现。

我推荐的学习路线是:


我推荐这个学习路线,是因为上面的阶段我全都走过一遍了,亲测有效。国内有不少从事JavaScript引擎研发的同行们,不知道大家的学习路线又是怎样的呢?

Kinoma XS6的讨论为例,我从看到问题到开始阅读源码,到写完整个回答,总共只用了几分钟。这个回答就包含了我在阅读一个JavaScript引擎实现时会首先关注的设计点,抓住这些点去阅读源码就可以很快的了解这个实现的全貌、其大体的设计思路和取舍方向。换言之,我并不需要为了了解它的概况而需要去从细节开始学习很多新的知识,而只要在已有知识里印证这个实现在可能的实现方式里到底选择了哪些。

另外也想提一下Constellation大大的lv5 JavaScript引擎(Constellation/iv · GitHub)。它的发展历程见证了Constellation的成长,也跟上面的学习路线中“规范-接轨-进阶”的过程完全吻合——一开始lv5是作者边读ES5规范边用最直观的方式把规范实现出来的。整个流程走通之后,他就开始从开源的主流JavaScript引擎学习先进的做法,并逐步实现到lv5当中,渐渐将其发展成一个颇为实在的、现代的实现。

我在这里也提到过lv5:准大三,计算机专业如何确定工作方向? - RednaxelaFX 的回答



我从2012年开始其实也有断断续续积累一些文字,希望能规整到一个系统的知识体系下写成一本书,以便更好的把这些相关知识传播给大家。不过目前这个计划还在早期阶段,暂时不接受催稿谢谢…

虽然书离成形还尚远,但我曾经试过把积累的内容的一部分汇总起来发出来:[链接帖] 各JavaScript引擎的简介,及相关资料/博客收集帖,欢迎大家参考和提建议。这系列帖子已好久没更新就是了…


话说回来,万事开头难,按照上面的路线,得找个最初的临摹对象来学习。

可以选择的对象有很多,不过这里我还是想再次推荐『プログラミング言語を作る』(中文版《自制编程语言》)一书。我在这里发过一个简介帖:《自制编程语言》集中讨论帖

其中的Crowbar语言及其解释器实现,就是我想推荐作为入门临摹的对象。

欲知它究竟是怎样设计与实现,且看下回分晓 ^_^


专栏:编程语言与高级语言虚拟机杂谈(仮)

探讨编程语言的设计与实现