3

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

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

我只是想知道更多关于使用这个系统的细节以及向系统添加新文件时必须做出的文件和声明。

抱歉问题不透明;我似乎无法掌握这个系统的细节

4

2 回答 2

1

1- 看看它是如何在lisp-interface-library/*/all.lisp, usinguiop: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-develASDF 问题可以在邮件列表中找到更快的答案。

于 2015-06-06T17:03:25.937 回答
0

正如我所解释的那样,您只需将包定义为all.lisp依赖于该系统其他文件中定义的包。然后,在某种程度上,它是依赖图进入该系统的入口点。我希望all.lisp包含自然依赖于其他文件的高级条目定义。

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

于 2015-06-03T19:20:55.860 回答