我是Common Lisp的新手。这是我用其他语言开发程序的方式,也是我现在用Common Lisp开发程序的方式:
sbcl --script myprog.lisp
)这是大多数编程语言的常规写编译运行开发周期。但是,在Lisp世界中,我听到了诸如“交互式开发”和“基于图像的开发”之类的东西,而且我感到我错过了Common Lisp的一个重要功能。如何执行“基于图像的开发”而不是“写编译运行的开发”?
有人可以提供“基于图像的开发”的分步示例吗,类似于我上面描述的“写-编译-运行开发”吗?
(注意:我正在使用SBCL)
在典型的Common Lisp实现中,运行时,编译器,部分开发环境以及要开发的程序位于同一程序中,并共享相同的对象空间。在您开发程序时,编译器始终可用,并且可以逐步开发程序。开发工具可以访问所有对象,并可以检查其状态。也可以从正在运行的程序中取消定义/删除,替换,增强功能。
从而:
程序错误的修复程序也可以作为已编译的Lisp文件提供给用户,该文件会加载到提供的程序中并随后更新代码。
假设您将 SBCL 与 Emacs 和 SLIME 一起使用(例如通过 Portacle)。
M-x slime
) — 这会在后台启动一个“普通”的 Lisp 进程,并将 slime 提供的编辑器功能连接到它;然后给你一个 REPL,它也连接到这个过程(图像)foo.lisp
)C-c C-k
编译文件并将其加载到正在运行的 Lisp 进程中这只是非常基本的用法。更多的事情要做/学习
C-c C-c
)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).