UIOP 无法识别本地昵称关键字
UIOP does not recognize local-nicknames keyword
我正在尝试用 uiop/package:define-package
制作一个 Lisp 包。我正在使用 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
是我制作的另一个包,工作正常,但碰巧没有使用本地昵称)。
我发现的 the uiop/package
source 似乎表明这不应该发生?这样做,它应该可以工作,或者有一个特定的错误消息表明本地昵称不受支持(如果 uiop:featurep
不准确或发生变化),但它不应该给出通用的未知关键字错误。在这一点上,我不确定我可能做错了什么。
sbcl
版本中包含的 asdf
版本基于 asdf
版本 3.3.1(2017 年 11 月),除了仅捆绑到两个(更大的)lisp 文件中(一个用于 asdf
,一个用于 uiop
),而不是像 asdf
的官方版本中那样有意地分解它们。 asdf
在 3.3.3.2(2019 年 8 月)中添加了 #+sbcl
对包本地昵称的支持,并在 3.3.4.1(2020 年 4 月)中切换到更通用的 #+package-local-nicknames
(最新 release 版本是 3.3.4,所以无论如何都还没有)。所以这“只是”从上游拉动的延迟。按照 upgrading ASDF did the trick – extract the latest release tarball 上的说明将 ~/common-lisp/asdf
和 运行 (load (compile-file #P"~/common-lisp/asdf/build/asdf.lisp"))
一次,以后的 shell 将使用更新的版本。
我正在尝试用 uiop/package:define-package
制作一个 Lisp 包。我正在使用 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
是我制作的另一个包,工作正常,但碰巧没有使用本地昵称)。
我发现的 the uiop/package
source 似乎表明这不应该发生?这样做,它应该可以工作,或者有一个特定的错误消息表明本地昵称不受支持(如果 uiop:featurep
不准确或发生变化),但它不应该给出通用的未知关键字错误。在这一点上,我不确定我可能做错了什么。
sbcl
版本中包含的 asdf
版本基于 asdf
版本 3.3.1(2017 年 11 月),除了仅捆绑到两个(更大的)lisp 文件中(一个用于 asdf
,一个用于 uiop
),而不是像 asdf
的官方版本中那样有意地分解它们。 asdf
在 3.3.3.2(2019 年 8 月)中添加了 #+sbcl
对包本地昵称的支持,并在 3.3.4.1(2020 年 4 月)中切换到更通用的 #+package-local-nicknames
(最新 release 版本是 3.3.4,所以无论如何都还没有)。所以这“只是”从上游拉动的延迟。按照 upgrading ASDF did the trick – extract the latest release tarball 上的说明将 ~/common-lisp/asdf
和 运行 (load (compile-file #P"~/common-lisp/asdf/build/asdf.lisp"))
一次,以后的 shell 将使用更新的版本。