通常,您必须看到初学者如何尝试Common Lisp,然后抱怨无法正常使用它。 通常,这是由于他们不了解如何建立一个可以在开发环境中提供相同“快速响应”的过程,所以当您更改功能,对其进行编译并且更改立即开始在已经运行的程序中使用时,重新启动它。
您可以通过在youtube上观看演示Common Lisp上的交互式开发的视频来了解它的外观。
今天,我想展示如何为此类开发建立开发环境。 在2018年,由于不断改进调音,它变得非常简单。
对于以下视频在Asciinema中录制,我深表歉意,Habrahabr不支持此视频。 单击控制台的屏幕截图以观看视频。
首先,安装SBCL , Roswell和Emacs 。 我将讨论在OSX中安装所有内容的示例,如果您在评论中分享了在Windows和Linux上的经验,我将感到高兴。 然后,我可以用所有三个平台的示例来补充本文。
SBCL是Common Lisp的许多实现之一。 在开源方面,最快。 如果需要,您可以在SBCL上以与C ++代码相当的速度运行代码,但同时具有来自快速交互开发的所有好处。
Roswell是用于安装和运行Common Lisp程序的实用程序。 其中包括她知道如何运行预配置的Emacs,以及如何收集二进制文件中的程序。
您可能知道Emacs-这种也具有代码编辑器的操作系统。 您可以使用Common Lisp或任何其他编辑器进行编写,但是如今Emacs具有对代码的语义编辑的最佳集成和支持。 与他在一起,您不必指望括号,他会为您做所有事情。
因此,如果您使用OSX,则需要
brew install roswell emacs
在brew冲破磁盘并放入所需的所有内容后,只需在终端中运行:
ros run
此命令将自动为您提供最新版本的SBCL并启动Lisp repl,您可以在其中输入代码:

但事实并非如此,并非如此设计。 因此,让我们配置Emacs进行全面开发:
ros emacs
该团队将在控制台中启动Emacs并配置Commonlisp的软件包管理器Quicklisp。
但是在继续之前,让我们配置终端,emacs和OSX,以便它们可以很好地协同工作。
首先,您需要在OSX和iTerm中更改一些设置
使CapsLock像Control一样工作。 在Emacs中,无处不在:

然后在MissionControl的快照中禁用所有与使用Control和箭头相关的组合:

然后将iTerm2放在配置文件设置中,将Alt行为从Normal切换到Esc +:

之后,为Emacs创建一个具有最低配置的文件~/.emacs.d/init.el
:
(package-initialize) (require 'package) (add-to-list 'package-archives '("MELPA" . "http://melpa.milkbox.net/packages/") t) (defun install-package (package) (unless (package-installed-p package) (package-refresh-contents) (package-install package))) (install-package 'paredit) (install-package 'expand-region) (defun setup-lisp-mode () (require 'paredit) (paredit-mode) (define-key paredit-mode-map (kbd "Cw") 'paredit-backward-kill-word)) (add-hook 'lisp-mode-hook 'setup-lisp-mode) (add-hook 'emacs-lisp-mode-hook 'setup-lisp-mode)
之后,再次运行ros emacs,按Alt-X
并输入slime
命令。 结果,我们得到了用于输入lisp命令的命令行:

现在您已经可以编写代码
但我们不会在重播中输入命令,最好立即开始开发微服务。 如果只需要一个API,那么使用Ningle的最简单方法。 如果您需要更高级的框架(例如丛林),则可以尝试Radiance或Caveman2 。 但是现在我们不会做任何复杂的事情,但是我们将激发一个简单的HTTP cookie。
在Emacs中打开server.lisp
文件( Cx Cf server.lisp
)并开始编写代码。 像这样:

结果,将在您的实例内部启动一个Web服务器,您可以在其中添加路线并在旅途中重新定义视图。
这是整个代码,对于懒惰的人:
在Lisp中,括号内的构造称为“形式”。 位于顶部且未嵌套在其他表单中的表单称为顶层。 当光标位于此类表单内时,可以通过单击Cc Cc
来编译此类表单。 如果在ontrol
上重新绑定CapsLock
,则按此组合键非常方便。
编译表单后,该函数的新版本将立即生效,并且不需要重新启动服务器。 因此,调试和修复错误非常方便。 此外,您可以在编译部分代码后立即配置自动测试运行,但这是一个完全不同的故事。
如果您对其他主题感兴趣,请在评论中写下,我也会尝试发表有关它们的文章。