想了解南昌javascript嗎?想了解新手上路學(xué)習(xí)JavaScript引擎實(shí)現(xiàn)——路線圖?? 嗎?......本文帶你一探究竟。
1.新手上路學(xué)習(xí)JavaScript引擎實(shí)現(xiàn)——路線圖
最近在知乎接連看到幾個(gè)相關(guān)的問題:如何閱讀 的代碼?新手應(yīng)該如何讀Google V8引擎源代碼?Kinoma XS6 是一款怎樣的 引擎?這些問題都是試圖從閱讀源碼著手去學(xué)習(xí)引擎的實(shí)現(xiàn)的。然而,對(duì)新手而言,直接從一個(gè)復(fù)雜的實(shí)現(xiàn)的源碼著手,不可避免的是事倍功半的做法。要學(xué)習(xí)引擎的實(shí)現(xiàn),就跟學(xué)習(xí)其它東西一樣,*是循序漸進(jìn)的來,先打好基礎(chǔ),再去結(jié)合現(xiàn)實(shí)學(xué)習(xí)主流實(shí)現(xiàn)。我推薦的學(xué)習(xí)路線是:臨摹:先找個(gè)比較簡(jiǎn)單語言的簡(jiǎn)單解釋器實(shí)現(xiàn),以它為模子,自己抄一個(gè)解釋器出來。這個(gè)過程中可以學(xué)習(xí)到編程語言的解釋器的基本構(gòu)造,特別是其組成部分的劃分,以及這些組成部分在工作流程中各自處于什么位置。整個(gè)流程串起來之后,思路就會(huì)清晰許多,接下去學(xué)習(xí)就可以有針對(duì)性了。鞏固:臨摹的時(shí)候必然只能一個(gè)解釋器的各部分的一種特定的簡(jiǎn)單實(shí)現(xiàn)。然而其背后的原理是怎樣的,同一個(gè)組件是否有別的更先進(jìn)(或不同取舍)的做法,就需要進(jìn)一步學(xué)習(xí)了。此時(shí)可以針對(duì)各部分去讀不同的書,例如編譯原理、GC、對(duì)象模型等方面。學(xué)習(xí)原理,鞏固基礎(chǔ),拓展視野。規(guī)范:到此有足夠基礎(chǔ)可以著手學(xué)習(xí)/實(shí)現(xiàn)真正的引擎了。但在動(dòng)手之前,應(yīng)該熟讀規(guī)范,了解到底語言所要求的語義是怎樣的,解決“是什么”的問題。覺得新的 2015太復(fù)雜的話,從 5.1學(xué)習(xí)是個(gè)不錯(cuò)的開始。有個(gè)帶注解的 5.1規(guī)范特別適合學(xué)習(xí):Annotated 5.1。另外,更喜歡閱讀中文文檔的同學(xué)可以看@呂康豪大大在評(píng)論區(qū)推薦的 ES5 - HTML5 Chinese Interest Group Wiki,那是他的怨念喔。接軌:把前面學(xué)習(xí)的知識(shí)都結(jié)合起來,按照規(guī)范實(shí)現(xiàn)自己的簡(jiǎn)單的引擎;或者此時(shí)也可以去閱讀現(xiàn)成的比較簡(jiǎn)單的引擎的實(shí)現(xiàn),但還是自己動(dòng)手寫過一次能有更深刻的理解。進(jìn)階:到這個(gè)階段,再去閱讀現(xiàn)實(shí)中主流的、高性能的引擎的源碼,就可以做到有的放矢了??焖匍喿x一下官方文檔,瀏覽一下代碼組織結(jié)構(gòu),就應(yīng)該能大概掌握一個(gè)實(shí)現(xiàn)的大致架構(gòu)。然后再抓住引擎實(shí)現(xiàn)可能存在的重要設(shè)計(jì)點(diǎn)去看看,就可以知道這個(gè)實(shí)現(xiàn)在每個(gè)部分都選擇了哪些實(shí)現(xiàn)方式。其實(shí)就像搭積木一樣,每個(gè)部分能有什么選擇都了然于心,這樣再去深入到細(xì)節(jié)讀代碼,就可以事半功倍的提取出自己想要知道的信息了。很多時(shí)候看目錄結(jié)構(gòu)和源碼文件名就能大概猜到需要的信息在哪個(gè)文件里,進(jìn)去確認(rèn)一下就好。我推薦這個(gè)學(xué)習(xí)路線,是因?yàn)樯厦娴碾A段我全都走過一遍了,親測(cè)有效。國(guó)內(nèi)有不少?gòu)氖乱嫜邪l(fā)的同行們,不知道大家的學(xué)習(xí)路線又是怎樣的呢?以Kinoma XS6的討論為例,我從看到問題到開始閱讀源碼,到寫完整個(gè)回答,總共只用了幾分鐘。這個(gè)回答就包含了我在閱讀一個(gè)引擎實(shí)現(xiàn)時(shí)會(huì)首先關(guān)注的設(shè)計(jì)點(diǎn),抓住這些點(diǎn)去閱讀源碼就可以很快的了解這個(gè)實(shí)現(xiàn)的全貌、其大體的設(shè)計(jì)思路和取舍方向。換言之,我并不需要為了了解它的概況而需要去從細(xì)節(jié)開始學(xué)習(xí)很多新的知識(shí),而只要在已有知識(shí)里印證這個(gè)實(shí)現(xiàn)在可能的實(shí)現(xiàn)方式里到底選擇了哪些。另外也想提一下大大的lv5 引擎(/iv · GitHub)。它的發(fā)展歷程見證了的成長(zhǎng),也跟上面的學(xué)習(xí)路線中“規(guī)范-接軌-進(jìn)階”的過程完全吻合——一開始lv5是作者邊讀ES5規(guī)范邊用最直觀的方式把規(guī)范實(shí)現(xiàn)出來的。整個(gè)流程走通之后,他就開始從開源的主流引擎學(xué)習(xí)先進(jìn)的做法,并逐步實(shí)現(xiàn)到lv5當(dāng)中,漸漸將其發(fā)展成一個(gè)頗為實(shí)在的、現(xiàn)代的實(shí)現(xiàn)。我在這里也提到過lv5:準(zhǔn)大三,計(jì)算機(jī)專業(yè)如何確定工作方向? - 的回答我從2012年開始其實(shí)也有斷斷續(xù)續(xù)積累一些文字,希望能規(guī)整到一個(gè)系統(tǒng)的知識(shí)體系下寫成一本書,以便更好的把這些相關(guān)知識(shí)傳播給大家。不過目前這個(gè)計(jì)劃還在早期階段,暫時(shí)不接受催稿謝謝…雖然書離成形還尚遠(yuǎn),但我曾經(jīng)試過把積累的內(nèi)容的一部分匯總起來發(fā)出來:[鏈接帖] 各引擎的簡(jiǎn)介,及相關(guān)資料/博客收集帖,歡迎大家參考和提建議。這系列帖子已好久沒更新就是了…話說回來,萬事開頭難,按照上面的路線,得找個(gè)最初的臨摹對(duì)象來學(xué)習(xí)??梢赃x擇的對(duì)象有很多,不過這里我還是想再次推薦『プログラミング言語を作る』(中文版《自制編程語言》)一書。我在這里發(fā)過一個(gè)簡(jiǎn)介帖:《自制編程語言》集中討論帖其中的Crowbar語言及其解釋器實(shí)現(xiàn),就是我想推薦作為入門臨摹的對(duì)象。欲知它究竟是怎樣設(shè)計(jì)與實(shí)現(xiàn),且看下回分曉 ^_^
上述文章了解到關(guān)于新手上路學(xué)習(xí)JavaScript引擎實(shí)現(xiàn)——路線圖?? ,讓我們對(duì)南昌javascript 有一個(gè)直觀的認(rèn)知。我們發(fā)現(xiàn),作為一個(gè)優(yōu)秀的Java程序員是多么的自豪。