如何在Common Lisp中进行基于图像的开发?

Flu*_*lux 2 sbcl common-lisp

我是Common Lisp的新手。这是我用其他语言开发程序的方式,也是我现在用Common Lisp开发程序的方式:

  1. 打开文本编辑器(例如vim或emacs)以创建/编辑文本文件。
  2. 将源代码写入文本文件。(如果不确定代码段的行为,并且REPL可用,则在REPL中评估代码段,验证代码段的评估是否符合预期,然后返回编写更多代码。)
  3. 保存文本文件。
  4. 要求编译器/解释器在文本文件中加载并运行源代码。(例如sbcl --script myprog.lisp
  5. 如果需要,请转到步骤1。

这是大多数编程语言的常规写编译运行开发周期。但是,在Lisp世界中,我听到了诸如“交互式开发”和“基于图像的开发”之类的东西,而且我感到我错过了Common Lisp的一个重要功能。如何执行“基于图像的开发”而不是“写编译运行的开发”?

有人可以提供“基于图像的开发”的分步示例吗,类似于我上面描述的“写-编译-运行开发”吗?

(注意:我正在使用SBCL)

Rai*_*wig 6

在典型的Common Lisp实现中,运行时,编译器,部分开发环境以及要开发的程序位于同一程序中,并共享相同的对象空间。在您开发程序时,编译器始终可用,并且可以逐步开发程序。开发工具可以访问所有对象,并可以检查其状态。也可以从正在运行的程序中取消定义/删除,替换,增强功能。

从而:

  • 不要重新启动正在开发的程序。保持连接并更新它。甚至几天,几周或几个月-如果可能的话。
  • 编写代码,以便在必要时可以从头开始复制和构建程序。不时进行构建,并修复所有构建问题。
  • 一旦您使用我们的程序并且出现错误->修正程序中的错误,同时能够检查完整的错误状态
  • 创建一个正在运行的程序是将所有代码一直加载到一个普通的Lisp中,或者是将可执行的映像与加载的代码/数据一起保存

程序错误的修复程序也可以作为已编译的Lisp文件提供给用户,该文件会加载到提供的程序中并随后更新代码。


Sva*_*nte 5

假设您将 SBCL 与 Emacs 和 SLIME 一起使用(例如通过 Portacle)。

  1. 打开 Emacs
  2. 启动 SLIME ( M-x slime) — 这会在后台启动一个“普通”的 Lisp 进程,并将 slime 提供的编辑器功能连接到它;然后给你一个 REPL,它也连接到这个过程(图像)
  3. 打开一个文本文件(例如foo.lisp
  4. 输入一些代码
  5. C-c C-k编译文件并将其加载到正在运行的 Lisp 进程中
  6. 切换到 REPL,试试看
  7. 切换到 Lisp 文件(步骤 4)。

这只是非常基本的用法。更多的事情要做/学习

  • 您也可以只编译和加载单个顶级表单 ( C-c C-c)
  • 了解包
  • Learn about systems (ASDF)
  • Learn how to use Quicklisp to get the libraries you want
  • Learn how to access inline documentation from the REPL

Note that you never need to unload your program, you just modify it, even when downloading and loading new libraries. This makes the feedback cycle instantaneous in most cases. You also never need to switch away from the IDE (Emacs).