属:解锁包裹

Genera: Unlocking a Package

没有关于 Whosebug 的 Genera 主题,但我想我会抓住机会,世界上使用它的(可能)5 个人之一可能会在这里;尝试没有坏处。

我已经 运行 遇到这样的情况,我正在使用的一些系统使用漂亮的打印,这在 Genera 上没有实现。通过使用漂亮打印的前身 XP,我设法解决了我自己系统中的问题。查看 xp-code.lisp 中的代码并将其与 CCL 中的代码进行比较,很明显 CCL 从哪里获得其漂亮的打印功能。

一个解决方案,现在被证明是不合适的,是有一个顶级评估,它执行 (xp::install :package my-package) 并从重新定义警告中恢复。问题是当其中一个第三方系统被编译时,他们也抱怨没有实现漂亮的打印功能,所以我不得不在这些其他想要漂亮打印的软件包中安装 XP。

真正需要做的是将 XP 安装在 common-lisp 软件包中,因为所有这些其他系统都将 :use :cl 并期望拥有功能齐全的漂亮打印系统。

但这并不容易; CL 包被锁定,每个 XP 符号需要多次确认和类型 'yes',才能将其放入 CL 包。 External-only Packages and Locking 的文档表明:

To set up an external-only package, it can be temporarily unlocked and then the desired set of symbols interned in it

但没有说 如何 解锁包裹,而且文档检查器也没有出现太多。

我也不得不停下来想知道我是不是找错了树。 XP 是为 Genera 编写的,并且在平台代码中有条件化。使用 install 函数安装应该不难;我想知道我是否遗漏了一些明显的东西。

有没有人知道如何解锁 CL 软件包,或者在 Genera 中安装 XP 的正确方法?包含的 XP 说明似乎已过时。

我想通了:

(zl:setf (si:pkg-locked (find-package :cl)) nil)

然后您就可以随心所欲地使用 CL 包了。请注意,没有包限定符的 setf 可能是 cl:setf,这与 zl:setf 完全不同,不会起作用。