Warm tip: This article is reproduced from serverfault.com, please click

package-UIOP无法识别本地昵称关键字

(package - UIOP does not recognize local-nicknames keyword)

发布于 2020-12-03 20:54:51

我正在尝试使用制作Lisp软件包uiop/package:define-package我正在使用SBCL,并且已经确认应该支持程序包本地昵称:

* *features*
(:QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX
 :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :X86-64 :GENCGC :64-BIT :ANSI-CL
 :COMMON-LISP :ELF :IEEE-FLOATING-POINT :LINUX :LITTLE-ENDIAN
 :PACKAGE-LOCAL-NICKNAMES :SB-CORE-COMPRESSION :SB-LDB :SB-PACKAGE-LOCKS
 :SB-THREAD :SB-UNICODE :SBCL :UNIX)
* (uiop:featurep :package-local-nicknames)
T

但是,当我尝试定义具有本地昵称的程序包时,它不起作用:

(uiop/package:define-package #:foo
  (:use #:cl)
  (:local-nicknames (#:b #:binparse)))

debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {1001878103}>:
  unrecognized define-package keyword :LOCAL-NICKNAMES

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(UIOP/PACKAGE:PARSE-DEFINE-PACKAGE-FORM #:FOO ((:USE #:CL) (:LOCAL-NICKNAMES (#:B #:BINPARSE))))
   source: (ERROR "unrecognized define-package keyword ~S" KW)
0] 0    

(这binparse是我制作的另一个程序包,效果很好,但并没有使用本地昵称)。

uiop/package消息源中发现的东西似乎表明这不应该发生?顺便说一句,它应该可以工作,或者有一条特定的错误消息,指出本地昵称的不支持性(如果uiop:featurep不正确或正在更改),但不应给出一般性的未知关键字错误。在这一点上,我不确定我可能会出错。

Questioner
Vivian
Viewed
0
Vivian 2021-01-03 13:31:04

的发行版本中asdf包含的版本sbcl基于asdf3.3.1版本(2017年11月),但仅捆绑到两个(较大)的Lisp文件(一个用于asdf,一个用于uiop)中,而不是像正式发行版那样有意地将它们分解的asdf在3.3.3.2(2019年8月)中asdf增加了#+sbcl对程序包本地昵称的支持,并#+package-local-nicknames在3.3.4.1(2020年4月)中切换到了更通用的名称(不过最新发行版本是3.3.4,因此尚未发布)反正)。因此,这只是从上游撤军的延迟。继上的说明升级ASDF的伎俩-提取最新的发行tar包~/common-lisp/asdf和运行(load (compile-file #P"~/common-lisp/asdf/build/asdf.lisp))一次,以后的Shell将使用更新的版本。