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上运行。