上周,我完成了一个名为“编译器编译器”的新 twitch 直播 的三集试播,该直播探讨了 JavaScript 规范,即 ECMA-262,是如何在 SpiderMonkey 中实现的。
JavaScript …… 是一种编程语言。有些人喜欢它,有些人不喜欢。JavaScript 可能有点乱,但很容易上手。它是教会我如何编程并让我接触到更广泛的编程语言世界的编程语言。因此,它在我心中有着特殊的地位。当我自学的时候,我意识到其他人可能也面临着与我相同的许多困难。而这正是“编译器编译器”所要探讨的内容。
该直播中的第一个 bug 是围绕递增/递减的测试失败。如果你想了解目前为止的系列内容,试播集已经发布,你可以在 播放列表 中观看。
未来剧集将 在此安排,并提供描述,方便你查找你感兴趣的特定主题。敬请关注本博客发布的帖子,我们将逐一总结每个 bug 的修复过程。
什么是 SpiderMonkey?
SpiderMonkey 是 Firefox 的 JavaScript 引擎。它与 V8、JSC 等其他实现一起,让 JavaScript 运行起来。由于引擎涉及大量的底层知识,因此为引擎贡献代码可能令人望而生畏。
- 编译器已经过充分研究,但用于学习编译器的现有资料(如 《龙书》 和其他编译器书籍)通常面向大学设置学习,需要大量的专用时间来理解和练习。并非所有人都能获得这种专用时间。
- SpiderMonkey 使用 C++ 编写。如果你来自解释型语言,需要学习一些工具才能真正掌握它。
- 它是 ECMA-262 标准 的实现,该标准定义了 JavaScript。如果你从未阅读过编程语言语法或标准文本,阅读起来可能会很困难。
“编译器编译器”直播旨在让贡献变得更容易。如果你不确定如何开始,它就是为你准备的!
目标和结构
我为这个系列设定了两个目标。第一个也是最重要的目标是通过 SpiderMonkey 向人们介绍语言规范和实现的世界。第二个目标是让 SpiderMonkey 尽可能地符合 ECMA-262 规范,幸运的是,这为第一个目标提供了一个很好的框架。
我将直播组织成一系列包含重复元素的片段,每个片段大约包含 5 集。每个片段将从 ECMA-262 符合性测试套件 (Test262) 中的某个在 SpiderMonkey 上失败的测试开始。我们将花一些时间来理解失败的测试告诉我们关于语言和 SpiderMonkey 实现的信息。然后我们将阅读和理解 ECMA-262 文本中指定的行为。我们将逐步在引擎中实现修复程序,并探索出现的任何其他问题。
每个片段中的每集时长为 1 小时,之后是 30 分钟的自由聊天。如果你有任何问题,请随时提出。我将尝试提前发布资料,以便你在直播前阅读。
如果你错过了系列的某部分,你可以在任何片段的开头加入。如果你观看了之前的片段,新的片段将为你揭示规范中的新部分,重复的元素将更容易让你学习。在每个完成的片段之后,将发布一篇博文总结直播中的信息。
最后但并非最不重要的是,感谢大家
我很幸运能有来自 SpiderMonkey 团队和 TC39 的同事加入聊天。感谢 Iain Ireland、Jason Orendorff 和 Gus Caplan 加入直播并为观众解答问题。感谢 Jan de Mooij 和 André Bargull 的审阅和评论。也要特别感谢 Sandra Persing、Rainer Cvillink、Val Grimm 和 Melissa Thermidor 在制作和启动直播方面提供的支持,以及感谢 Mike Conley 提供的直播技巧。
13 条评论