【问题标题】:Is there a way to catch the moment when Common Lisp package was defined?有没有办法捕捉定义 Common Lisp 包的时刻?
【发布时间】:2020-03-27 19:04:30
【问题描述】:

我想收集在 ASDF 系统加载过程中定义的所有包。

已经试过了:

  1. 使用系统加载前后(list-all-packages)的区别,但不是很方便,因为有些系统可以作为我正在检查的系统的依赖项加载,我需要进行集合提取.

  2. 试图定义一个initialize-instance :after ((package package) &rest initargs) 方法,但在评估defpackage 表单时它没有被调用。

另外,当我快速加载一个 ASDF 系统时,我在它的输出中看到了 [package dexador]。 quicklisp 是如何做到这一点的?

【问题讨论】:

    标签: common-lisp quicklisp asdf


    【解决方案1】:

    在 Quicklisp 中,我使用了*macroexpand-hook*

    【讨论】:

    • 有趣。我不知道这个钩子!
    • 这项工作很棒!但是你还需要处理 uiop:define-package 宏。这是修复:github.com/quicklisp/quicklisp-client/pull/191
    • 它的目的是提供一些关于进度的视觉反馈,而不是严格正确。由于可以通过多种机制创建包(包括在编译时使用make-package),因此需要更仔细和彻底的方法才能获得准确的结果。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多