在我自己的包中使用SBCL的分析器

时间:2014-06-11 11:09:36

标签: common-lisp sbcl

我想在我的包中分析一些代码。如果我在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

那么,我该如何启用分析?

1 个答案:

答案 0 :(得分:3)

在执行自己的程序包require之前,需要先评估defpackagedefpackage为您赢得了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")
...

这些操作的顺序很重要;在正确加载这些模块之前,您无法在自己的包声明中引用依赖模块中的任何包。