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