Common Lisp/入門/安裝
為了開始使用 Common Lisp 程式設計,您需要獲得一個 Common Lisp 實現。大多數作業系統都有許多可用的實現。既有免費的,也有商業的實現。
開始使用 Common Lisp 的最簡單方法是使用Emacs。Emacs,或者您有時會聽到人們稱之為“原生 Emacs”,是大多數 Lisp 程式設計師首選的編寫 Lisp 的方式。如果您也是 Emacs 新手,那麼以下內容可能會有所幫助,但對於新使用者來說,它們也可能讓人感到不知所措。如果您打算使用 Emacs,您可能還應該安裝slime。Slime 將幫助您編輯 Common Lisp;它包含在以下環境中。
Portacle 是一個便攜且多平臺的 Common Lisp 環境,現在通常推薦給初學者。它將 SBCL、Emacs(具有良好的自定義)、Quicklisp 和 Git 打包在一起。無需安裝,因此它確實是一種簡單易行的方法。
Doom Emacs 是一個流行的預配置版 Emacs,適合初學者和高階使用者。
spacemacs 是另一個流行的預配置版 Emacs,它配備了用於 Common Lisp 的完整功能。
vim 或 neovim 是程式設計師非常常用的文字編輯器。如果您已經熟悉 vim,您仍然可以使用它來編輯 Common Lisp。
slimv 可能是最流行的用於編輯 Common Lisp 的 vim 外掛。
vlime 是 slimv 的一個較新的替代方案,它主要用 viml(vim 的擴充套件語言)編寫。
注意:即使您不想安裝 Portacle,也強烈建議使用 Emacs/SLIME 組合來與這些實現互動。原因是它們提供的文字控制檯使用起來非常笨拙,因此大多數使用者更喜歡 SLIME 提供的更友好的環境。
GNU CLISP 是一種流行的免費實現,可以在 Windows 和大多數類 Unix 系統上執行。如果您使用的是 Windows,則別無選擇,只能使用 CLISP。CLISP 提供了所有 ANSI Common Lisp 特性,並且非常易於安裝。
- 完全的 Unicode 支援
- 本地化的介面和編譯器訊息
- 高度可移植性:幾乎可以在任何地方執行
- 編譯為可移植的位元組碼(大多數或所有其他 Common Lisp 實現都編譯為原生代碼)
- 記憶體佔用小
- 任意精度浮點數運算
- 數字運算速度慢
CMU Common Lisp 是一種高效能的 Common Lisp 實現。
- 非原生執行緒(“綠色”執行緒;僅限 x86)
- 由於其生成原生代碼的最佳化編譯器,因此生成速度快的程式碼
- 編譯器速度快
- 可移植性相對較低(有關支援平臺的列表,請參閱CMUCL 可移植性網頁)
Steel Bank Common Lisp(SBCL)是CMU Common Lisp的一個分支,是一個具有原生程式碼編譯功能的可移植實現。它在CMUCL或CCL無法執行的平臺上很容易成為最流行的Common Lisp編譯器,並且即使在這些平臺上也是一個極好的選擇,主要是因為它具有更好的除錯支援(例如,它的編譯器會產生更多警告,並且據說在ANSI相容性方面更加嚴格)。
- Unicode支援
- 相當便攜:可在類Unix系統(包括Mac OS X和Microsoft Windows)上執行。
- 在基於Intel的平臺上提供原生執行緒支援
- 由於生成原生程式碼的最佳化編譯器,速度很快
- 編譯速度慢(SBCL執行*許多*最佳化,這可能很慢)
Clozure CL(CCL)是適用於PowerPC和AMD64的Common Lisp實現。有一個x86的預釋出版本。它在Mac OS X上很容易成為最受歡迎的選擇,但它在GNU/Linux和FreeBSD/amd64系統上執行得同樣出色;還有一個Windows的測試版。在Mac OS X上,CCL具有Cocoa介面。
- 完全的 Unicode 支援
- 一個快速的編譯器,生成同樣快速的程式碼
- 一個用於Mac OS X GUI開發的Cocoa介面
- 原生執行緒
ECL是一個專注於可移植性和可嵌入性的Common Lisp實現。這些目標是透過將CL轉換為C並將C傳遞給C編譯器(通常是gcc)來實現的。它執行在Linux、FreeBSD、NetBSD、OpenBSD、Solaris和Windows上,執行在Intel、Sparc、Alpha和PowerPC處理器之上。
- Unicode支援
- 將CL轉換為C,生成相對快速的原生程式碼
- 直譯器,可避免緩慢的構建時間
- 按需載入。ECL推遲載入模組,直到需要時才載入
- 能夠輸出可移植的C原始檔,這些檔案可以在其他架構上編譯
- 從Lisp呼叫C,並從C呼叫Lisp(即ECL可以用作任何可以呼叫C函式的程式的擴充套件語言)
- 原生執行緒
- 編譯方法相對緩慢(gcc速度慢,也許如果你使用更快的C編譯器)
- 錯誤處理相對脆弱(即你很容易讓ECL發生段錯誤)
ABCL是一個在Java虛擬機器上執行的Common Lisp實現。它提供了一個執行時系統、一個將Lisp原始碼編譯為JVM位元組碼的編譯器以及一個用於程式開發的互動式REPL。
- 生成可移植的Java位元組碼
- Java庫可以透明地使用
- 比其他實現慢得多
Allegro、LispWorks和Corman Lisp都有免費試用版,這對學習這門語言很有幫助。它們都可以在Windows上執行。