【譯】如何學習V8開發
原文鏈接: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)
- http://ripsawridge.github.io/ (V8 compiler)
- https://medium.com/@tverwaes (V8 runtime)
- http://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的運行方式或添加新特點,那一定是騙人的。但是任何人不得不從某處開始,也許你堅持,會在未來看到來自你的變更記錄。
歡迎訂閱掘金專欄和知乎專欄,關注個人博客
推薦閱讀:
※前端與SQL
※每周一書-《Bootstrap基礎教程》
※業內說的大前(大前端)和小前,在職責上有什麼區別?
※如何在懂得不是很多,公司只有一個前端的情況下,更好的鍛煉自己?
※前端周刊第62期:學習學習再學習