我想在我的包中分析一些代码。如果我在REPL中(require :sb-sprof)
(来自默认的CL-USER
包),它就可以了。但是,如果我把它放在我的包中的代码中,我会得到Package SB-SPROF does not exist
错误。
如果我将(:import-from #:sb-sprof with-profiling)
指令放在我的defpackage
中,则会导致The name "SB-SPROF" does not designate any package
。
那么,我该如何启用分析?
答案 0 :(得分:3)
在执行自己的程序包require
之前,需要先评估defpackage
。 defpackage
为您赢得了require
SB-PROF
模块。将require
视为某种"幻想" load
,它将模块加载到图像中。在加载过程中,会创建模块的包,之后只能在defpackage
内或通过阅读器(sb-sprof:with-profiling
)引用它们。
通常情况下,当我对do it right过于懒惰时(或者如果它是"一次性"解决方案),我会使用一个小的" loadup.lisp"脚本,它确保所有依赖项都存在,然后加载我自己的代码。这也确保了图像可以从新鲜的lisp中可靠地再现。
的内容
;; Make sure, the dependencies are present
(ql:quickload '(whatever)) ;; Load a dependency via Quicklisp
(require :sb-something-else) ;; ... or via some implementation-dependent repository
(asdf:oos 'asdf:load-op 'some-module) ;; ... or via ASDF or ... or ... or ...
;; Now, load my own stuff
(load "packages")
(load "something-important-1")
...
这些操作的顺序很重要;在正确加载这些模块之前,您无法在自己的包声明中引用依赖模块中的任何包。