CMU Common Lisp
CMU Common Lisp(CMUCL),是自由的Common Lisp實現,最初在卡內基·梅隆大學開發。
原作者 | 卡內基·梅隆大學 |
---|---|
首次發布 | 1980年 |
當前版本 | 21d[1](2018年12月8日 ) |
原始碼庫 | |
作業系統 | 遵守POSIX的OS |
平台 | 跨平台 |
語言 | Common Lisp |
類型 | 編譯器和運行時系統 |
許可協議 | 公有領域 |
網站 | www |
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」編譯器的特徵是有強力的類型推論,通過要麼自動推論出類型,要麼對錯過的優化機會的提示,幫助編程者書寫無開銷的代碼。