原文連結:How do I get started with V8 development?
作者:Franziska Hinkelmann
你是否有興趣理解更多關於編譯器、虛擬機器、JavaScript引擎的知識,或者貢獻V8專案
你也許曾沒上過編譯原理的課程或者沒有c++程式設計經驗,但是沒人生來就具有這些知識的,你不需要理解任何編譯器方面知識。這裡有一些資源也許會幫助你。
但是現在世面上有很少的編譯的書籍,而且也沒發現一本具有現代優化知識的書籍,尤其是對於JavaScript引擎來說。如果你想學習基礎,可以去看看龍書(中文版《編譯原理》,現在已經出到了第二版)
這裡有幾個關於V8的 部落格:
Official V8 blog v8project.blogspot.com
benediktmeurer.de (V8 compiler and benchmarks)
ripsawridge.github.io/ (V8 compiler)
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的執行方式或新增新特點,那一定是騙人的。但是任何人不得不從某處開始,也許你堅持,會在未來看到來自你的變更記錄。