ChatGPT | AI自制編程語言-實現JavaScript編譯器
隨著當前各種編程 ??Agent???,??MCP??? 的層出不窮,大模型的正在加速進化,于是又開始探索,不過這次的目標是用 ??golang??? 實現 ??JavaScript?? 引擎(目標是完成 ES5.1 的全部功能)。
1. 回顧 JS 編譯器的實現過程

如上是總結的 ??V8?? 大體的實現方式,編程語言的實現已經經歷了幾十年的發展,包括 V8,Lua等語言基本都采用類似實現步驟:
- 詞法分析
- 語法分析
- 語義解析和優化
- 虛擬機
- 通過 JIT 實現性能優化
- ...
2. 如何選擇工具鏈和知識庫

2.1 AI 編碼助手
AI 編碼助手有很多,但是用的順手的卻不多,我個人經常使用如下:
- Trae 海外版本,使用 Builer 模式
優點:各種模型免費(不過有時候需要排隊),對于 web 開發友好,調試器比較方便
缺點:界面與 VSCode 差異大,代碼提示不太友好,合并代碼經常會出現 bug,工具鏈不齊全
- Windsurf,使用 Cascade:
優點:有些模型會現實免費,基于 VSCode 實現,使用習慣差異不大,界面清晰,代碼提示和 bugfix 可以讓 AI 自動執行
缺點:提示有時候有點亂,如果思考時間過長,會經常超時,不能添加自定義模型
- Cursor:
優點:社區完善,自由選擇模型,支持 MCP 市場,方便添加各種 rules
缺點:太貴,功能太多導致新手了解有一定的門檻,多文件之前上下文切換不太流暢
2.2 知識庫
要實現 JavaScript 編譯器,首先開發者要了解編譯器實現方案(參考上圖),然后讓 AI 了解實現方案(雖然 AI 本身已經有編譯器的實現原理,但是開發者需要按照場景提示 AI 按照哪種方案實現),最好要有簡單的樣例給到 AI 編碼助手,這里提供一些知識庫的資料:
- https://github.com/linkxzhou/mylib/tree/master/c%2B%2B/simplejs 非常簡單的 JS 編譯器實現
- https://github.com/wren-lang/wren wren 腳本語言源碼,大約 4000 行代碼
- 書籍:《用 Go 語言自制解釋器》和《用 Go 語言自制編譯器》
- 書籍:《編譯器設計(第二版)》和《自己動手構建編程語言》
- JS 測試用例集合:https://github.com/tc39/test262
如果您實現的不是 JS 編譯器,也可以作為知識庫,讓 AI 參考源碼按照你想要的方式實現(比如:用 Rust 實現 JS ...)。
3. 解決思路
針對 ??simplejs?? 實現的項目總結如下:
- 制定明確的項目規則,我們要實現?
?Javascript?? 引擎,從以往的經驗上看,項目至少超過 3000 行,所以先要將功能拆解為規則(各種 Prompt),而不是直接輸入[實現Javascript引擎] - 在提示詞中明確指出技術棧、期望行為和約束條件,就像提供規范說明書,約束模型的邊界
- 讓 AI 拆解功能,以小型、功能為單位劃分文件來生產,測試和功能驗證
- 測試驅動開發:先可以根據你描述的功能,生成測試用例,驗證 AI 是否遵循了你的功能要求,然后生產功能邏輯后,盡可能多的再生產測試用例,最后保證測試用例100% 通過
- 控制質量:AI 輸出的任何功能,要了解邊界條件,并且提示 AI,輸出的代碼需要保持可讀性,甚至可以讓 AI 不斷重構當前的功能,以保證按照最少代碼實現
- 控制上下文:如果上下文很多,我們不需要按照整個工程提問,而是按照某個文件,或者某個文件的某些行擴展
- 有時候需要人工:報錯比較明確,或者歧義的代碼,建議開發者直接上手改代碼修復
- 必要時候切換模型:有些問題用 DeepSeek 可以快速回答,就不需要用 Claude-3.7,當某些模型不能解決當前問題時,建議手動切換不同模型嘗試(模型的邊界比較模糊,有些時候 Claude-3.7 不能解決,GPT-4o 卻可以解決)
- 如果有文檔,可以單獨建立 docs 目錄,記錄你想要的功能或者 API,甚至需要鏈接的知識庫等
- 調試代碼多加日志:打印比較多的日志,基于日志的上下文讓 AI 修復 bug,能更快的分析問題并解決問題,而不是依賴 AI 對整個功能分析
4. 總結(完成第一個版本)
代碼已經開源(simplejs): https://github.com/linkxzhou/mylib/tree/master/go/simplejs
通過 AI 實現代碼詳細如下:
- 測試用例:?
?2316?? 行 - 功能代碼:?
?3556?? 行 - 代碼覆蓋率:?
?coverage: 74.9% of statements??

后續需要完成的工作:
- 測試完整的 JS 測試集:tc39https://github.com/tc39/test262。
- 增加性能優化:
解決尾遞歸問題
編譯預計算
嘗試通過 AI 實現少量的 `JIT` 功能
...
- 執行?
?Benchmark???,運行壓測,讓??AI 分析 ??profile,找到性能優化點。
本文轉載自??周末程序猿??,作者:周末程序猿

















