SBCL ASDF 问题与 CCL 回复:Circular Ref?
SBCL ASDF problem vs. CCL Re: Circular Ref?
这在 ccl 上编译良好,但因循环引用而失败。 SBCL 错误:
kp.asd:
(in-package :asdf)
(defsystem kp
:components
((:module "utils"
:components
((:file "utils")
))
))
(load-system :kp)
------------------------
utils.lisp:
(defpackage :utils)
(in-package :utils)
(defvar *kp-version-utime* (get-universal-time))
------------------------
Error reported by SBCL:
debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR in thread #<THREAD "main thread" RUNNING {10005E85B3}>: Error while trying to load definition for \
system kp from pathname /var/www/ai/insights/kp.asd: Circular dependency: ((#<DEFINE-OP > . #<SYSTEM "kp">) (#<LOAD-OP > . #<SYSTEM "kp">) (#<LOAD-OP\
> . #<MODULE "kp" "utils">) (#<LOAD-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREPARE-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREP\
ARE-OP > . #<MODULE "kp" "utils">) (#<PREPARE-OP > . #<SYSTEM "kp">))
(看起来您的 post 主要是代码;请添加更多详细信息。)
(load-system :kp)
你不应该在 ASDF 声明中有这个。最好不要将系统定义视为 Lisp 程序,而只是作为声明依赖项的声明方式。
如果在系统声明期间,您还需要加载另一个系统,则该系统成为依赖项。最有可能发生的情况是,SBCL 在评估文件时将文件视为一个整体,并且在加载 kp
时,您要求它加载 kp
,这确实是一个循环依赖。也许CCL默默地认为文件已经加载了,我不知道。
如果删除它,在 REPL 中输入 (ql:quickload :kp)
就可以正常工作。此外,(in-package :asdf)
是无用的(如果提供,它应该是 asdf-user
)
您的 .asd 无效,活该。
您是否有带有 ASDF 3.2 或更早版本的旧 CCL?然后它无法检测到您的 .asd 中的错误。 ASDF 3.3 正确检测加载 .asd 文件时的循环依赖。
这在 ccl 上编译良好,但因循环引用而失败。 SBCL 错误:
kp.asd:
(in-package :asdf)
(defsystem kp
:components
((:module "utils"
:components
((:file "utils")
))
))
(load-system :kp)
------------------------
utils.lisp:
(defpackage :utils)
(in-package :utils)
(defvar *kp-version-utime* (get-universal-time))
------------------------
Error reported by SBCL:
debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR in thread #<THREAD "main thread" RUNNING {10005E85B3}>: Error while trying to load definition for \
system kp from pathname /var/www/ai/insights/kp.asd: Circular dependency: ((#<DEFINE-OP > . #<SYSTEM "kp">) (#<LOAD-OP > . #<SYSTEM "kp">) (#<LOAD-OP\
> . #<MODULE "kp" "utils">) (#<LOAD-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREPARE-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREP\
ARE-OP > . #<MODULE "kp" "utils">) (#<PREPARE-OP > . #<SYSTEM "kp">))
(看起来您的 post 主要是代码;请添加更多详细信息。)
(load-system :kp)
你不应该在 ASDF 声明中有这个。最好不要将系统定义视为 Lisp 程序,而只是作为声明依赖项的声明方式。
如果在系统声明期间,您还需要加载另一个系统,则该系统成为依赖项。最有可能发生的情况是,SBCL 在评估文件时将文件视为一个整体,并且在加载 kp
时,您要求它加载 kp
,这确实是一个循环依赖。也许CCL默默地认为文件已经加载了,我不知道。
如果删除它,在 REPL 中输入 (ql:quickload :kp)
就可以正常工作。此外,(in-package :asdf)
是无用的(如果提供,它应该是 asdf-user
)
您的 .asd 无效,活该。
您是否有带有 ASDF 3.2 或更早版本的旧 CCL?然后它无法检测到您的 .asd 中的错误。 ASDF 3.3 正确检测加载 .asd 文件时的循环依赖。