Как включить все объявления функций и пакетов в файл all.lisp для asdf package-inferred-system
Таким образом, в руководстве / документации asdf в разделе 6.5 расширения package-inferred-system в этом примере для определения пакетов используется файл all.lisp (который, как я предполагаю, будет содержать всю информацию о функциях и пакетах для этого соответствующего subdirectoty).
То, что я хочу знать, это то, что было бы "правильным" способом включения всех объявлений функций и пакетов в этот файл all.lisp. Буду ли я делать что-то вроде включения всех объявлений функций для этого подкаталога в файл all.lisp, а затем использовать функцию register-system-packages в файле asdf. Или я мог бы опустить файл all.lisp и позволить компилятору выводить пакеты из файлов (но я должен был бы затем использовать функцию register-system-packages для каждого отдельного файла, который я добавляю в эту систему).
Мне просто интересно узнать больше об особенностях использования этой системы, файлах и объявлениях, которые необходимо сделать при добавлении нового файла в систему.
Извините за непрозрачность вопроса; Я не могу понять специфику этой системы
2 ответа
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
список рассылки.
Как я понимаю, вы просто определили пакет в all.lisp
зависит от пакетов, определенных в других файлах этой системы. Это, в некотором смысле, точка входа для графа зависимостей в эту систему. Я бы ожидал all.lisp
содержать определения записей высокого уровня, которые, естественно, зависят от других файлов.
Например, если вы создаете систему, которая имеет (под) систему для предоставления веб-интерфейса, webinterface/all.lisp
Файл / пакет будет содержать функции для настройки, запуска и остановки веб-сервера. Эти функции будут зависеть от определений обработчиков в других файлах / пакетах, которые, в свою очередь, будут зависеть от других файлов / пакетов, которые предоставляют данные или выполняют основную часть обработки запросов.