newsence

Show HN: GDSL – 800 行內核:500 行實現 Lisp 子集,1300 行實現 C 子集

Hacker News·21 天前

我挑戰了現代編譯器動輒數百萬行的複雜性,透過編寫一個極簡內核,僅用幾千行代碼就實現了 C 和 Lisp 的子集。這個項目探索了如何在不依賴龐大架構的情況下,重新構建出既快速又實用的語言編譯器。

背景

這篇文章介紹了名為 GDSL 的專案,作者 FirTheMouse 試圖挑戰現代編譯器動輒數百萬行程式碼的現狀,透過僅約 800 行的共享核心(Kernel),分別實現了 500 行的 Lisp 子集與 1300 行的 C 語言子集。作者認為編譯器之所以臃腫,往往是為了處理各種歷史包袱與複雜層級,而 GDSL 則是在短短三週內重新建構語言本質的嘗試。

社群觀點

Hacker News 的討論主要圍繞在「極簡編譯器」的定義、實作細節以及對程式語言底層架構的哲學思考。部分資深開發者如 akkartik 對此專案表示讚賞,並分享了類似的極簡系統專案 Mu,認為這類研究底層運作的「MIX 層」是程式最純粹的實質內容。作者 FirTheMouse 在回應中進一步闡述其理念,認為現代語言如 Python 雖然提供了易用的語法糖,但卻讓使用者遠離了底層理解;他希望 GDSL 能在易用的語法與底層控制之間找到平衡,讓使用者能透過不到一萬行的程式碼,從高階語法一路鑽研到最基礎的執行邏輯。

然而,社群中也出現了針對技術實作的嚴厲批評。有評論者指出,GDSL 標榜的行數可能帶有誤導性,因為它是使用 C++ 及其標準模板庫(STL)編寫的,這意味著它依賴於極其龐大的外部基礎設施。此外,該專案目前尚未達成「自我託管」(Self-hosting),即無法用自己編寫的編譯器來編譯自身,這在編譯器開發領域通常被視為一個重要的里程碑。評論者 ptspts 甚至舉出僅有 700 行且能自我託管的 C 語言編譯器 xcc700 作為對比,認為 GDSL 目前的狀態更像是解釋器而非真正的編譯器。

針對這些質疑,作者坦承 GDSL 目前確實還處於早期階段,目前的展示主要是透過抽象語法樹(AST)進行直接執行,尚未具備生成機器碼或組合語言的能力。他解釋專案標題中的「Kernel」是指共享的處理核心而非作業系統核心。儘管目前功能尚不完整,作者仍認為這種模組化的架構嘗試具有分享價值,並邀請對後端發射器有興趣的開發者共同參與。這場討論反映了開發者社群對於「簡潔」的不同定義:一方追求概念上的優雅與教育意義,另一方則堅持工具必須具備實質的自給自足能力與產出效能。

延伸閱讀

  • Mu: 由 akkartik 開發的極簡系統專案,旨在建立可理解的運算層級。
  • xcc700: 一個僅約 700 行、具備自我託管能力的 C 語言子集編譯器。
  • GDSL GitHub 倉庫: 讀者可在此查看專案原始碼與目前的開發進度。
https://firthemouse.github.io/