探索 XS:一個「通用」程式語言的雄心與爭議

程式語言的領域通常是在功能強大、可移植性與安裝簡易性之間進行權衡。XS 正是如此,這是一種將自己定位為通用工具的新語言:「隨時、隨地、由任何人使用。」XS 聲稱能在單一靜態連結的二進位檔中提供完整的開發生態系統,旨在消除工具鏈安裝與跨平台相容性的摩擦。

從技術角度來看,XS 是一個雄心勃勃的專案。它將編譯器、語言伺服器、除錯器、格式化工具、Linter、測試執行器、效能分析器與套件管理器打包進一個僅 2.9 MB 的二進位檔中。這種「全方位」的方法旨在讓相同的原始碼能在廣泛的環境中直接執行,包括 Linux、macOS、Windows、WASI、iOS、Android、ESP32 與 Raspberry Pi。

技術架構與效能

XS 採用多層次的執行策略來平衡靈活性與速度。根據使用情境,開發者可以從幾種後端中進行選擇:

  • Tree-walk Interpreter (--interp): 主要用於 REPL 與 AST 層級的插件除錯。
  • Bytecode VM (Default): 大多數程式的標準執行路徑。
  • Register-allocating JIT (--jit): 為 x86-64 與 aarch64 優化,若遇到不支援的指令碼則回退至 VM。
  • C Transpiler (--emit c): 生成自包含的 C 原始碼,以實現與現有編譯器最大的相容性。
  • JavaScript Transpiler (--emit js): 目標為 Node.js 或瀏覽器。
  • WASM Runtime (xs.wasm): 一個基於瀏覽器的編譯器版本,包含虛擬檔案系統,允許 XS 程式完全在瀏覽器內進行評估。

在原始效能方面,XS 聲稱具有競爭力。在 fib(30) 的基準測試中,JIT 版本耗時 31 ms,優於 Node 20 (62 ms) 與 CPython 3.13 (71 ms),而 VM 版本則耗時 138 ms。

社群對 AI 「垃圾內容」的爭議

儘管功能清單令人印象深刻,但在 Hacker News 上的反應卻非常尖銳且具批判性。爭議的核心不在於語言的功能,而在於其被察覺到的起源。幾位經驗豐富的開發者指出,該專案可能屬於「AI slop」(AI 生成的垃圾內容)——即由 LLM 生成、且幾乎沒有人工監督的程式碼與文件。

批評者指出了幾個疑點:

  1. 文件風格: 使用者注意到文件使用了高階語言設計術語(例如「algebraic effects」、「semantic analyzer」),卻沒有針對該語言獨特的動機或設計哲學提供實質內容。

  2. 程式碼來源: 部分使用者觀察到 VM 設計與 Crafting Interpreters 專案中的 clox 解釋器非常相似,這暗示它可能是透過 AI agent 進行改編,而非從零開始設計。

  3. 不一致的實作: 技術評論者指出了型別系統中的問題,引用了原始碼中的註解,例如「recursive type: bind anyways」,他們認為這顯示了缺乏嚴謹的人工工程實作。

  4. 提交紀錄: git 提交紀錄的性質與某些提交訊息——特別是那些詳細列出在輔助函數中刪除的程式碼行數的訊息——被描述為「明顯的 LLM 上下文噴發」。

設計批判

除了對 AI 生成的疑慮之外,該語言的設計選擇也引發了辯論。雖然有些使用者稱讚其「有品味」的語法決策與 actor/nursery 設計的加入,但其他人則不以為然。

一位開發者對可變性的處理提出了批評,指出:

"let is immutable (reassignment is a runtime error), var is mutable, and const is identical to let at runtime but signals intent. Tells me all I need to know。"

其他人則質疑「通用」這一說法的實用性。正如一位批評者所言,Linux 上的專業開發者需求與學生或針對 ESP32 的使用者需求大不相同,認為一個針對單一平台優化的語言不可能對所有平台都達到最佳化。

結論

XS 代表了工具鏈整合的一個迷人實驗。一個能處理從 Linter 到 JIT 編譯、且跨越幾乎所有現代作業系統的 3MB 二進位檔,對於開發者體驗 (DX) 來說是一個極具吸引力的願景。然而,該專案也為 AI 時代軟體發布的現狀提供了一個警示。當「承諾的功能」與「設計透明度」之間的差距變得太大時,社群的直覺反應會從好奇轉向懷疑。

Sources