gpt4 book ai didi

common-lisp - 每次重启都必须重新安装 Quicklisp 包

转载 作者:行者123 更新时间:2023-12-03 18:13:07 25 4
gpt4 key购买 nike

我正在编写一个 (SBCL) Common Lisp 程序,该程序在文件顶部有以下行:

(defpackage :my-package
(:use :cl :cl-who :hunchentoot :parenscript))

我在 MacOS 上运行 Emacs 25、SBCL 和 SLIME。

每当我评估上面的行时,我总是首先得到这个错误:

The name "CL-WHO" does not designate any package. [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

然后,我运行 (ql:quickload "cl-who") 并观察 CL-WHO 软件包的安装。我重复其他两个包。一旦我这样做了,就可以成功地评估表单。

问题是我每次重新启动 Emacs(或 Lisp 进程,我认为在这种情况下大致等效)时都需要这样做。为什么当我使用 Quicklisp 安装某些东西时,下一次 session 不会“记住”它?难道我做错了什么?

这是配置问题还是对它应该如何工作的普遍误解?

最佳答案

Then, I run (ql:quickload "cl-who") and watch the CL-WHO package install. I repeat for the other two packages. Once I have done that, the form can be evaluated successfully.

您可以一次快速加载多个系统:

(ql:quickload '(:cl-who :hunchentoot :parenscript))

[...] each time I restart the Emacs (or Lisp process, which I assume is roughly equivalent in this case).

这里就是这种情况,但请注意,您可以从 shell 启动 Lisp 进程并从 Emacs 连接到它。在这种情况下,您可以退出并重新启动 Emacs 而不会终止 Lisp 进程。从 shell 启动一个新的 REPL 并创建一个服务器:

(ql:quickload :swank)
(swank:create-server :port 5000)

然后,从 Emacs 调用 slime-connect(使用 localhost 和 5000 作为主机和端口参数)。这也可以用来监控正在运行的应用程序。

Why is it that when I install something with Quicklisp it is not "remembered" for the next session?

系统会在您的机器上获取、编译和安装,这就解释了为什么您第二次快速加载项目时速度会更快。但是系统只有在您请求时才会加载到您的环境中,使用 Quicklisp 或 ASDF。

定义一个系统

§6. Defining systems with defsystem有关如何定义系统的介绍。假设您将系统命名为 stackoverflow。最简单的开始方法是创建以下文件:

~/quicklisp/local-projects/stackoverflow/stackoverflow.asd

其中包含:

(defsystem "stackoverflow"
:depends-on ("cl-who" "hunchentoot" "parenscript"))

当你执行(ql:quickload "stackoverflow")时,Quicklisp会加载它所有的依赖。

您只需要加载一个系统,而不是加载所有必需的系统。

要么自动加载这个系统...

Lisp 实现可以在启动时执行代码。一种可能的方法是从配置文件执行代码:[.]ccl-init.lisp.eclrc.lispworks , .sbclrc(你的情况)等。仅当 Quicklisp 本身可用时才执行 quickload:

#+quicklisp
(ql:quickload "stackoverflow")

...或转储一个预加载所有系统的图像

您还可以加载所有必需的系统,并转储可执行镜像。从终端(不是从 Slime)启动一个新的 SBCL,调用 (ql:quickload "stackoverflow"),然后:

(sb-ext:save-lisp-and-die "my-env" 
:executable t
:compression 9)

(压缩是可选的)

然后,应该在同一目录中创建一个名为“my-env”的可执行文件。每次启动它时,您都会获得一个全新的 Lisp 环境,其中包含您在保存图像之前加载的系统。

关于common-lisp - 每次重启都必须重新安装 Quicklisp 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com