摘要:如果不行的話,不用擔(dān)心,當(dāng)你審查錯(cuò)誤時(shí)會(huì)學(xué)習(xí)到知識(shí)的。但是任何人不得不從某處開始,也許你堅(jiān)持,會(huì)在未來看到來自你的變更記錄。
如何學(xué)習(xí)v8開發(fā)本文轉(zhuǎn)載自:眾成翻譯
譯者:yu-wj
鏈接:http://www.zcfy.cc/article/3963
原文:https://medium.com/dailyjs/how-do-i-get-started-with-v8-development-17e976ebe4af
你是否有興趣理解更多關(guān)于編譯器、虛擬機(jī)、JavaScript引擎的知識(shí),或者貢獻(xiàn)V8項(xiàng)目
你也許曾沒上過編譯原理的課程或者沒有c++編程經(jīng)驗(yàn),但是沒人生來就具有這些知識(shí)的,你不需要理解任何編譯器方面知識(shí)。這里有一些資源也許會(huì)幫助你。
但是現(xiàn)在世面上有很少的編譯的書籍,而且也沒發(fā)現(xiàn)一本具有現(xiàn)代優(yōu)化知識(shí)的書籍,尤其是對(duì)于JavaScript引擎來說。如果你想學(xué)習(xí)基礎(chǔ),可以去看看龍書(中文版《編譯原理》,現(xiàn)在已經(jīng)出到了第二版)
這里有幾個(gè)關(guān)于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.)
如果你比較喜歡看視頻學(xué)習(xí),這里也有一些不錯(cuò)的視頻:
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]
不幸的是,在這些高級(jí)資源和V8源碼中還是有挺大的差距,但是你需要邊做邊學(xué)。所以去獲取源代碼然后編譯它。V8在V8/test中有數(shù)萬行代碼。堅(jiān)持在本地運(yùn)行它,否則你需要等待幾個(gè)小時(shí)。跟著V8 Wiki去編譯 and 運(yùn)行 V8。維基百科也有如何提交變更記錄的說明,變更記錄是Chromium中用于拉取請(qǐng)求的術(shù)語(yǔ)。
需要花點(diǎn)時(shí)間去編譯V8
我建議先從簡(jiǎn)單開始。改變一些小地方,比如更改錯(cuò)誤信息的提示語(yǔ)。然后編譯,并在幾行能導(dǎo)致錯(cuò)誤代碼中運(yùn)行它,看看是否能獲取你的錯(cuò)誤信息。這里變更記錄就是改變了一個(gè)錯(cuò)誤信息。就這樣修改代碼,慢慢地就會(huì)熟悉基本代碼和編譯過程。
使用D8運(yùn)行你本地修改后的V8引擎而不是使用瀏覽器。當(dāng)你擅長(zhǎng)V8后,你可以使用git。
變更記錄在 Chromium’s code review tool, Gerrit.
一旦你編輯錯(cuò)誤信息和在D8上看到改變后,就可以 上傳你的代碼然后在V8測(cè)試框架下進(jìn)行所有測(cè)試,你應(yīng)該發(fā)現(xiàn)一些測(cè)試失敗,是因?yàn)槠渲幸恍y(cè)試是檢查錯(cuò)誤信息的。這就要求需要熟悉代碼審查工具和如何在框架中自動(dòng)執(zhí)行測(cè)試,所有當(dāng)你想提交補(bǔ)丁都需要準(zhǔn)備好。如何使用V8審查工具和如何運(yùn)行測(cè)試的細(xì)節(jié)內(nèi)容都在這里
如果你熟悉JavaScript但是不太了解c++,你也許想從V8/src/js.部分開始,這部分都是用JavaScript編寫的,而且在都在這個(gè)目錄下。代碼中大部分都是按照EcmaScript 規(guī)范實(shí)現(xiàn)的。選擇一個(gè)函數(shù)然后查找其規(guī)范。你能理解規(guī)范如何對(duì)應(yīng)于代碼嗎?如果你改變或刪除部分代碼,什么測(cè)試失敗,違反了規(guī)范中哪一步說明?在V8/test, 尤其是 V8/test/mjsunit中有大量的JavaScript代碼。
下一步,你可以閱覽V8 issue tracker。也許你會(huì)發(fā)現(xiàn)一些小問題,試圖去修改。首先檢查你是否能理解,然后復(fù)制錯(cuò)誤。在JavaScript中寫一段小代碼片段,當(dāng)運(yùn)行時(shí)顯示錯(cuò)誤。在代碼中尋找到錯(cuò)誤代碼,然后試圖分解代碼,然后運(yùn)行測(cè)試代碼確保是因?yàn)槟惴纸獯a導(dǎo)致了錯(cuò)誤。玩弄代碼。V8代碼量特別大且復(fù)雜。你需要足夠能力去解決錯(cuò)誤。如果不行的話,不用擔(dān)心,當(dāng)你審查錯(cuò)誤時(shí)會(huì)學(xué)習(xí)到知識(shí)的。
V8中做出大量更改是很困難的,并且需要大量時(shí)間和知識(shí)。如果我告知你可以很容易改變V8的運(yùn)行方式或添加新特點(diǎn),那一定是騙人的。但是任何人不得不從某處開始,也許你堅(jiān)持,會(huì)在未來看到來自你的變更記錄。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84931.html
摘要:對(duì)于每個(gè)前端程序員來講都有一個(gè)終極理想,那就是搞懂引擎是如何工作的。性能經(jīng)過了兩次飛躍第次飛躍是年發(fā)布,第次則是年的。從去年底開始連載源碼分析,記錄一下自己學(xué)習(xí)源碼的點(diǎn)點(diǎn)滴滴。月星期六晚點(diǎn)和大家一起聊聊引擎前端程序員應(yīng)該懂點(diǎn)知識(shí)講堂。 對(duì)于每個(gè)前端程序員來講都有一個(gè)終極理想,那就是搞懂 javascript 引擎是如何工作的。 從我的網(wǎng)絡(luò) ID(justjavac)可以看出來,當(dāng)我開始...
摘要:第二篇文章將深入谷歌的引擎的內(nèi)部。引擎可以實(shí)現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將編譯為字節(jié)碼的即時(shí)編譯器。這個(gè)引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復(fù)雜的優(yōu)化編譯器,生成高度優(yōu)化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運(yùn)行時(shí)和調(diào)用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內(nèi)部。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHu...
摘要:第二篇文章將深入谷歌的引擎的內(nèi)部。引擎可以實(shí)現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將編譯為字節(jié)碼的即時(shí)編譯器。這個(gè)引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復(fù)雜的優(yōu)化編譯器,生成高度優(yōu)化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運(yùn)行時(shí)和調(diào)用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內(nèi)部。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHu...
摘要:文章的第二部分涵蓋了內(nèi)存管理的概念,不久后將發(fā)布。的標(biāo)準(zhǔn)化工作是由國(guó)際組織負(fù)責(zé)的,相關(guān)規(guī)范被稱為或者。隨著分析器和編譯器不斷地更改字節(jié)碼,的執(zhí)行性能逐漸提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 譯者:Chor showImg(https://segmentfault.com/img...
摘要:調(diào)用棧是一種單線程編程語(yǔ)言,這意味著它只有一個(gè)調(diào)用堆棧。調(diào)用棧是一種數(shù)據(jù)結(jié)構(gòu),它記錄了我們?cè)诔绦蛑械奈恢谩6疫@不是唯一的問題,一旦你的瀏覽器開始處理調(diào)用棧中的眾多任務(wù),它可能會(huì)停止響應(yīng)相當(dāng)長(zhǎng)一段時(shí)間。 本文是旨在深入研究JavaScript及其實(shí)際工作原理的系列文章中的第一篇:我們認(rèn)為通過了解JavaScript的構(gòu)建塊以及它們是如何工作的,將能夠編寫更好的代碼和應(yīng)用程序。我們還將分...
閱讀 900·2023-04-26 01:37
閱讀 3373·2021-09-02 15:40
閱讀 965·2021-09-01 10:29
閱讀 2898·2019-08-29 17:05
閱讀 3427·2019-08-28 18:02
閱讀 1184·2019-08-28 18:00
閱讀 1493·2019-08-26 11:00
閱讀 2615·2019-08-26 10:27