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

Posted

技术标签:

【中文标题】UIOP 无法识别本地昵称关键字【英文标题】:UIOP does not recognize local-nicknames keyword 【发布时间】:2021-03-15 22:36:12 【问题描述】:

我正在尝试使用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 是我制作的另一个包,效果很好,但没有使用本地昵称)。

我对@9​​87654321@ 的发现似乎表明这不应该发生?这样一来,它应该可以工作,或者有一个特定的错误消息表明本地昵称不受支持(如果 uiop:featurep 不知何故不准确或正在更改),但它不应该给出一般的未知关键字错误。在这一点上,我不确定我可能会出错。

【问题讨论】:

【参考方案1】:

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(最新版本不过,版本是 3.3.4,所以无论如何都不会出现)。因此,这“只是”从上游拉动的延迟。按照upgrading ASDF 上的说明成功了——将the latest release tarball 提取到~/common-lisp/asdf 并运行(load (compile-file #P"~/common-lisp/asdf/build/asdf.lisp)) 一次,以后的shell 将使用更新的版本。

【讨论】:

以上是关于UIOP 无法识别本地昵称关键字的主要内容,如果未能解决你的问题,请参考以下文章

NumberFormatter 在 Swift 中无法识别来自不同本地的数字 [关闭]

为啥我的本地主机无法识别其目录中的 htdocs?

不知道这样的主机——无法识别本地主机

Xcode 无法识别新的本地化

本地 Bootstrap 5 中无法识别“手风琴”类

无法识别本地发行人