CMU Common Lisp
原作者 | 卡內基·梅隆大學 |
---|---|
首次發佈 | 1980年 |
當前版本 | 21d[1](2018年12月8日 ) |
原始碼庫 | |
作業系統 | 遵守POSIX的OS |
平台 | 跨平台 |
語言 | Common Lisp |
類型 | 編譯器和運行時系統 |
許可協議 | 公有領域 |
網站 | www |
CMU Common Lisp(CMUCL),是自由的Common Lisp實現,最初在卡內基·梅隆大學開發。
CMUCL運行在大多數類Unix平台上,包括Linux和BSD;也有試驗性的Windows移植。Steel Bank Common Lisp派生自CMUCL。Scieneer Common Lisp是CMUCL的商業衍生品。
歷史
它的最早實現先於Common Lisp,派生自出現在大約1980年的Spice Lisp。在1985年,Rob MacLachlan開始重寫編譯器,它後來成為「Python」編譯器,並且CMUCL被移植到Unix工作站,比如IBM PC RT、MIPS和SPARC。早期的CMUCL發行不支持Intel的x86架構,由於它缺乏寄存器。CMUCL嚴格的分離有類型標記的類型和中間數據類型,而垃圾回收器依賴於,已知一半的CPU寄存器只持有有標記的類型,而另一半只持有無標記的。它沒有為「Python」後端留下足夠的寄存器。
在CMU取消了這個項目(將某些CMUCL編譯器基礎用於了Dylan實現)之後,維護由一組志願者接管。在1996年他們在自己的下部構造上製作了正規發行。
大約同時完成了到Intel的x86架構的移植,最初運行在FreeBSD上,後來運行在Linux上。缺乏寄存器的問題,通過採用新的保守垃圾回收器解決了。這個新垃圾回收器,接受在寄存器中的任何類型的任何值,並把可以是指針的任何東西當作指針處理,用途是不回收或移動它的目標。
編譯器和其他代碼執行單元
- CMUCL的特徵是主要用於REPL的一個解釋器,但是它可以用來快速裝載不需要編譯的Lisp文件。
- 解釋(從編譯器發出的)緊緻字節碼的一個機器。這在現在很少使用了,但是在早期CMUCL發行中很流行,因為在互聯網下載帶寬很低的時代,這可以大幅縮減映像的大小。
- 叫做「Python」(不要混淆於Python程式語言)的本機代碼編譯器。如果Common Lisp原始碼具有適當的聲明,並且在組建時考慮到了速度,「Python」編譯器生成的代碼,相比於用C++編譯的代碼沒有更多的開銷。一些低效的東西比如函數調用接口,和缺乏用戶定義數據類型的無指針數組,是Common Lisp標準主導造成的,仍然需要解決(比如通過內聯更多和使用宏來建造,看似用戶定義結構的構造,而實際上訪問在預先分配的特殊數組中的字段)。「Python」編譯器的特徵是有強力的類型推論,通過要麼自動推論出類型,要麼對錯過的優化機會的提示,幫助編程者書寫無開銷的代碼。
特徵
- 分代垃圾回收和在x86移植上的多處理能力。
- 外界函數接口,允許同C代碼和系統庫進行交互,包括在多數平台上的共享庫,和對Unix系統調用的直接訪問。
- 支持進程間通信和遠程過程調用。
- CLOS的一個實現,Common Lisp對象系統包括了多方法和元對象協議。
- 圖形的原始碼級別調試器,使用了Motif接口,和一個代碼剖析器。
- 到X11窗口系統的接口(CLX),和一個複雜的圖形組件庫(Garnet)。
- 編程者可擴展的輸入和輸出串流。
- Hemlock,用Common Lisp實現的一個類Emacs的編輯器。