摘要:如果不行的話,不用擔心,當你審查錯誤時會學習到知識的。但是任何人不得不從某處開始,也許你堅持,會在未來看到來自你的變更記錄。
如何學習v8開發本文轉載自:眾成翻譯
譯者:yu-wj
鏈接:http://www.zcfy.cc/article/3963
原文:https://medium.com/dailyjs/how-do-i-get-started-with-v8-development-17e976ebe4af
你是否有興趣理解更多關于編譯器、虛擬機、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的運行方式或添加新特點,那一定是騙人的。但是任何人不得不從某處開始,也許你堅持,會在未來看到來自你的變更記錄。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84931.html
摘要:對于每個前端程序員來講都有一個終極理想,那就是搞懂引擎是如何工作的。性能經過了兩次飛躍第次飛躍是年發布,第次則是年的。從去年底開始連載源碼分析,記錄一下自己學習源碼的點點滴滴。月星期六晚點和大家一起聊聊引擎前端程序員應該懂點知識講堂。 對于每個前端程序員來講都有一個終極理想,那就是搞懂 javascript 引擎是如何工作的。 從我的網絡 ID(justjavac)可以看出來,當我開始...
摘要:第二篇文章將深入谷歌的引擎的內部。引擎可以實現為標準解釋器,或者以某種形式將編譯為字節碼的即時編譯器。這個引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復雜的優化編譯器,生成高度優化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運行時和調用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內部。 想閱讀更多優質文章請猛戳GitHu...
摘要:第二篇文章將深入谷歌的引擎的內部。引擎可以實現為標準解釋器,或者以某種形式將編譯為字節碼的即時編譯器。這個引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復雜的優化編譯器,生成高度優化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運行時和調用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內部。 想閱讀更多優質文章請猛戳GitHu...
摘要:文章的第二部分涵蓋了內存管理的概念,不久后將發布。的標準化工作是由國際組織負責的,相關規范被稱為或者。隨著分析器和編譯器不斷地更改字節碼,的執行性能逐漸提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 譯者:Chor showImg(https://segmentfault.com/img...
摘要:調用棧是一種單線程編程語言,這意味著它只有一個調用堆棧。調用棧是一種數據結構,它記錄了我們在程序中的位置。而且這不是唯一的問題,一旦你的瀏覽器開始處理調用棧中的眾多任務,它可能會停止響應相當長一段時間。 本文是旨在深入研究JavaScript及其實際工作原理的系列文章中的第一篇:我們認為通過了解JavaScript的構建塊以及它們是如何工作的,將能夠編寫更好的代碼和應用程序。我們還將分...
閱讀 891·2023-04-26 01:37
閱讀 3368·2021-09-02 15:40
閱讀 955·2021-09-01 10:29
閱讀 2887·2019-08-29 17:05
閱讀 3418·2019-08-28 18:02
閱讀 1181·2019-08-28 18:00
閱讀 1484·2019-08-26 11:00
閱讀 2603·2019-08-26 10:27