探索 alisp 1.6:Common Lisp 實作的新里程碑

Lisp 實作的格局常被長期存在的巨頭所主導,但 alisp 1.6 的出現顯示,實作 Common Lisp 標準的動力仍然十分旺盛。由 Andrea Monaco 開發,並託管於 Savannah,alisp 旨在提供一個強健的 Common Lisp 實作,能載入實際系統,包括必備的 ASDF(Another System Definition Facility)。

版本 1.6 代表了此專案成熟度的一大步前進,重點在於精練核心資料結構、擴充標準函式庫,以及修正物件系統中的關鍵錯誤。此更新凸顯了語言實作的迭代特性,架構重新設計常常以犧牲即時功能為代價,以換取長期穩定性。

版本 1.6 的關鍵技術更新

重新設計專用陣列

此版本最具影響力的變更之一是對專用陣列的全面重新設計。在 alisp 1.6 中,字串與位元向量現在被視為位元組陣列的實例。此架構轉變旨在為未來針對不同大小整數的專用陣列鋪路。

然而,此重新設計帶來了一個暫時的回退:因為字串現在基於位元組,Unicode 支援目前無法使用。開發者指出,Unicode 支援將在未來的版本中恢復,並以不同的機制實作。

強化物件系統(CLOS)

Common Lisp 物件系統(CLOS)是標準中最複雜的部分之一。版本 1.6 針對多個關鍵領域進行了改進:

  • Structure Slots: 現在支援結構槽的初始化表單,允許更彈性的物件建立。
  • DEFCLASS Bug Fixes: 已解決 DEFCLASS 的 Lisp 實作中的錯誤。先前,存取方法未帶有類型專化子,導致當不同類別共享相同存取名稱但對應不同欄位時產生微妙錯誤。這對高度依賴此模式的 ASDF 尤為問題。
  • Generic Functions: 現在的實作加入了 SLOT-MISSINGSLOT-UNBOUND 通用函式,提升了物件系統內的錯誤處理與內省功能。

標準函式庫與語言擴充

此版本填補了 Common Lisp 標準中多個缺失的部分:

  • Package Management: DEFPACKAGE 現在支援 :SHADOWING-IMPORT-FROM 選項,使套件系統更接近完整規範的相容性。
  • MAKE-SEQUENCE: 已加入此用於建立列表與向量的必要函式。
  • Integer Operations: INTEGER-LENGTHLOGCOUNT 現已可用於位元與數值分析。
  • Core Logic Migration: LAMBDAIN-PACKAGE 兩者已從核心引擎移至 Lisp 程式碼,可能簡化了維護者對這些功能的迭代工作。
  • Property List Fixes: 先前損壞的 (SETF GETF) 已修復,且新增了 (SETF GET)

社群觀點與未解決的問題

雖然此發行是一項技術成就,社群仍持續探討專案的長期目標與架構。一位 Hacker News 使用者提出了關於專案結構與競爭定位的疑問:

"我想知道你們如何在這個龐大的全功能 main.c 中追蹤所有內容。你們是否計畫達到 100%?是否有列出實際缺少的項目以及哪些相關專案依賴這些缺失部分的清單?與例如 ECL 或 CLISP 相比,核心優勢是什麼?"

這些問題觸及任何新 Lisp 實作的核心挑戰:在簡潔的單體程式碼庫與可擴充的模組化架構之間取得平衡,以及相較於已建立的實作如 ECL(Embeddable Common Lisp)或 CLISP 的價值主張。

結論

alisp 1.6 不僅僅是一次版本升級;它是對語言內部表示的精緻化,也是朝向更廣泛相容 Common Lisp 生態系的推進。透過成功載入 ASDF 並處理 DEFCLASS 的細節,alisp 正將自己定位為對 Lisp 實作內部感興趣或尋求標準新視角的使用者,一個可行且輕量的替代方案。

Sources