【译】如何学习V8开发

原文连接:How do I get started with V8 development?
做者:Franziska Hinkelmannc++

你是否有兴趣理解更多关于编译器、虚拟机、JavaScript引擎的知识,或者贡献V8项目git

你也许曾没上过编译原理的课程或者没有c++编程经验,可是没人生来就具备这些知识的,你不须要理解任何编译器方面知识。这里有一些资源也许会帮助你。github

可是如今世面上有不多的编译的书籍,并且也没发现一本具备现代优化知识的书籍,尤为是对于JavaScript引擎来讲。若是你想学习基础,能够去看看龙书(中文版《编译原理》,如今已经出到了第二版)编程

这里有几个关于V8的 博客:浏览器

若是你比较喜欢看视频学习,这里也有一些不错的视频

不幸的是,在这些高级资源和V8源码中仍是有挺大的差距,可是你须要边作边学。因此去获取源代码而后编译它。V8在V8/test中有数万行代码。坚持在本地运行它,不然你须要等待几个小时。跟着V8 Wiki编译 and 运行 V8\。维基百科也有如何提交变动记录的说明,变动记录是Chromium中用于拉取请求的术语。

须要花点时间去编译V8

我建议先从简单开始。改变一些小地方,好比更改错误信息的提示语。而后编译,并在几行能致使错误代码中运行它,看看是否能获取你的错误信息。这里变动记录就是改变了一个错误信息。就这样修改代码,慢慢地就会熟悉基本代码和编译过程。

使用D8运行你本地修改后的V8引擎而不是使用浏览器。当你擅长V8后,你可使用git

变动记录在 Chromium’s code review tool, Gerrit.

一旦你编辑错误信息和在D8上看到改变后,就能够 上传你的代码而后在V8测试框架下进行全部测试,你应该发现一些测试失败,是由于其中一些测试是检查错误信息的。这就要求须要熟悉代码审查工具和如何在框架中自动执行测试,全部当你想提交补丁都须要准备好。如何使用V8审查工具和如何运行测试的细节内容都在这里

若是你熟悉JavaScript可是不太了解c++,你也许想从V8/src/js.部分开始,这部分都是用JavaScript编写的,并且在都在这个目录下。代码中大部分都是按照EcmaScript 规范实现的。选择一个函数而后查找其规范。你能理解规范如何对应于代码吗?若是你改变或删除部分代码,什么测试失败,违反了规范中哪一步说明?在V8/test, 尤为是 V8/test/mjsunit中有大量的JavaScript代码。

下一步,你能够阅览V8 issue tracker。也许你会发现一些小问题,试图去修改。首先检查你是否能理解,而后复制错误。在JavaScript中写一段小代码片断,当运行时显示错误。在代码中寻找到错误代码,而后试图分解代码,而后运行测试代码确保是由于你分解代码致使了错误。玩弄代码。V8代码量特别大且复杂。你须要足够能力去解决错误。若是不行的话,不用担忧,当你审查错误时会学习到知识的。

V8中作出大量更改是很困难的,而且须要大量时间和知识。若是我告知你能够很容易改变V8的运行方式或添加新特色,那必定是骗人的。可是任何人不得不从某处开始,也许你坚持,会在将来看到来自你的变动记录。


欢迎订阅掘金专栏知乎专栏,关注我的博客