【譯】如何學習V8開發

yuyurenjie發表於2017-08-12

原文連結:How do I get started with V8 development?
作者:Franziska Hinkelmann

你是否有興趣理解更多關於編譯器、虛擬機器、JavaScript引擎的知識,或者貢獻V8專案

你也許曾沒上過編譯原理的課程或者沒有c++程式設計經驗,但是沒人生來就具有這些知識的,你不需要理解任何編譯器方面知識。這裡有一些資源也許會幫助你。

但是現在世面上有很少的編譯的書籍,而且也沒發現一本具有現代優化知識的書籍,尤其是對於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的執行方式或新增新特點,那一定是騙人的。但是任何人不得不從某處開始,也許你堅持,會在未來看到來自你的變更記錄。


歡迎訂閱掘金專欄知乎專欄,關注個人部落格

相關文章