原文連接:How do I get started with V8 development?
做者:Franziska Hinkelmannc++
你是否有興趣理解更多關於編譯器、虛擬機、JavaScript引擎的知識,或者貢獻V8項目git
你也許曾沒上過編譯原理的課程或者沒有c++編程經驗,可是沒人生來就具備這些知識的,你不須要理解任何編譯器方面知識。這裏有一些資源也許會幫助你。github
可是如今世面上有不多的編譯的書籍,並且也沒發現一本具備現代優化知識的書籍,尤爲是對於JavaScript引擎來講。若是你想學習基礎,能夠去看看龍書(中文版《編譯原理》,如今已經出到了第二版)編程
這裏有幾個關於V8的 博客:瀏覽器
Official V8 blog v8project.blogspot.comapp
benediktmeurer.de (V8 compiler and benchmarks)框架
ripsawridge.github.io/ (V8 compiler)ide
medium.com/@tverwaes (V8 runtime)函數
mrale.ph/ (Not on the V8 team anymore.)工具
若是你比較喜歡看視頻學習,這裏也有一些不錯的視頻:
Breaking the Speed Limit from 2012 by Daniel Clifford, V8 lead [Slides]
A Trip to the Zoo from 2015 by me, Nordic.js [Slides]
V8, modern JavaScript, and Beyond from 2016 by Seth Thompson
A little on V8 and WebAssembly from 2016b by Ben Titzer [Slides]
JS Engines — how do they even? from 2017 by me JSConfEU [Slides]
不幸的是,在這些高級資源和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的運行方式或添加新特色,那必定是騙人的。可是任何人不得不從某處開始,也許你堅持,會在將來看到來自你的變動記錄。