如何将所有函数和包声明包含在名为all.lisp的文件中,以用于asdf包推理系统

时间:2015-06-02 23:09:32

标签: common-lisp asdf

因此,在package-inferred-system扩展的6.5节中的asdf手册/文档中,该示例使用all.lisp文件来确定包(我/我们假设它将包含所有函数和包信息)对于相应的子目录)。

我想知道的是"适当的"在all.lisp文件中包含所有函数和包声明的方法。我是否会在all.lisp文件中包含该子目录的所有函数声明,然后在asdf文件中使用register-system-packages函数。或者我可以省略all.lisp文件,让编译器从文件中推断出包(但是我必须对我添加到该系统的每个文件使用register-system-packages函数)。

我只是想了解更多关于使用此系统的细节以及在向系统添加新文件时必须进行的文件和声明。

对不起问题的不透明度;我似乎无法掌握这个系统的具体细节

2 个答案:

答案 0 :(得分:1)

1-使用lisp-interface-library/*/all.lisp及其uiop:define-package条款了解如何在:use-reexport中完成。

例如参见pure/all.lisp

(uiop:define-package :lil/pure/all (:nicknames :pure) (:import-from :lil/interface/all) (:use :closer-common-lisp) (:mix :fare-utils :uiop :alexandria) (:use-reexport :lil/interface/base :lil/interface/eq :lil/interface/order :lil/interface/group :lil/pure/empty :lil/pure/collection :lil/pure/iterator :lil/pure/map :lil/pure/set :lil/pure/alist :lil/pure/tree :lil/pure/hash-table :lil/pure/fmim :lil/pure/encoded-key-map :lil/pure/queue :lil/pure/iterator-implementation :lil/pure/map-implementation :lil/pure/set-implementation :lil/pure/alist-implementation :lil/pure/tree-implementation :lil/pure/hash-table-implementation :lil/pure/fmim-implementation :lil/pure/encoded-key-map-implementation :lil/pure/queue-implementation ))

2-这些天,我建议使用asdf 3.1而不使用asdf-package-system。要获得最大向后不兼容性,请使用

#-asdf3.1 (error "<my system> requires ASDF 3.1 or later. Please upgrade your ASDF.")

然后在defsystem:class :package-inferred-system

3-我没有密切关注这个论坛。 ASDF问题在asdf-devel邮件列表上找到了更快的答案。

答案 1 :(得分:0)

正如我解释的那样,你只需要在https中定义的包取决于该系统其他文件中定义的包。然后,在某种程度上,依赖图进入该系统的入口点。我希望http包含自然依赖于其他文件的高级条目定义。

例如,如果您构建的系统具有用于公开Web界面的(子)系统,则all.lisp文件/包将包含用于配置,启动和停止Web服务器的功能。这些函数将取决于其他文件/包中的处理程序定义,而这些定义又依赖于提供数据或执行请求处理的其他文件/包。