簡介
我們正處於 JavaScript 的第三時代,目前的普遍趨勢是用 Rust 或 Go 編寫 JavaScript 工具,以獲得效能提升。
但是,編寫 JavaScript 工具具有挑戰性,更不用說用 Rust 編寫它們了。我在學習這些技術時掙扎了很多,我希望更少的人走上同樣掙扎的旅程。
我希望透過編寫本指南為社群做出自己的貢獻,這樣您就不必經歷我所經歷的相同旅程。
Rust 方面只有少數開發人員,我希望看到您在這裡加入我們,這樣我們就可以為所有人構建更好、更快的工具。
概述
本指南將應用標準的編譯器前端階段
Source Text --> Lexer --> Token --> Parser --> AST
編寫 JavaScript 解析器相當容易,其中 10% 是架構決策,90% 是在細節上的努力。
架構決策主要會影響兩個類別
- 我們解析器的效能
- 我們的 AST 使用起來有多方便
在用 Rust 建構解析器之前了解所有選項和權衡,將使我們的整個旅程更加順利。
效能
高效能 Rust 程式的關鍵是減少記憶體分配和減少 CPU 週期。
只要尋找堆積分配的物件(例如 Vec
、Box
或 String
),就可以清楚地知道在哪裡進行記憶體分配。推理它們的使用情況會讓我們了解程式的執行速度 - 我們分配越多,程式的執行速度就越慢。
Rust 賦予我們零成本抽象的力量,我們不必太擔心抽象會導致效能降低。注意我們的演算法複雜性,我們就會一切順利。
資訊
您也應該閱讀 Rust 效能書。
Rust 原始碼
每當無法推斷函數呼叫的效能時,請不要害怕點擊 Rust 文件中的「原始碼」按鈕並閱讀原始碼,它們通常很容易理解。
資訊
在瀏覽 Rust 原始碼時,搜尋定義就像尋找 fn function_name
、struct struct_name
、enum enum_name
等。這是 Rust 中具有恆定文法的一個優勢(與 JavaScript 相比😉)。