Как включить все объявления функций и пакетов в файл с именем all.lisp для системы asdf-inferred-package

Итак, в руководстве/документации asdf в разделе 6.5 расширения package-inferred-system пример использует файл all.lisp для определения пакетов (который, как я/мы предполагаю, будет содержать всю информацию о функциях и пакетах для этого соответствующего пакета). подкаталог).

Что я хочу знать, так это то, каким будет "правильный" способ включения всех объявлений функций и пакетов в этот файл all.lisp. Могу ли я сделать что-то вроде включения всех объявлений функций для этого подкаталога в файл all.lisp, а затем использовать функцию register-system-packages в файле asdf. Или я мог бы опустить файл all.lisp и позволить компилятору вывести пакеты из файлов (но должен ли я использовать функцию register-system-packages для каждого отдельного файла, который я добавляю в эту систему).

Меня просто больше интересуют особенности использования этой системы и файлы и объявления, которые необходимо делать при добавлении нового файла в систему.

Извините за непрозрачность вопроса; Я не могу понять специфику этой системы


person A Waouwa    schedule 02.06.2015    source источник
comment
Вы смотрели fare.tunes.org/files/asdf3/asdf3- 2014.html? Есть упоминание о concatenate-source-op и пакетных операциях. Это то, что вам нужно?   -  person coredump    schedule 03.06.2015


Ответы (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.

person Faré    schedule 06.06.2015

Как я понимаю, вы бы просто сделали так, чтобы пакет, определенный в all.lisp, зависел от пакетов, определенных в других файлах этой системы. Тогда это в некотором роде точка входа для графа зависимостей в эту систему. Я ожидаю, что all.lisp будет содержать определения записей высокого уровня, которые, естественно, зависят от других файлов.

Например, если вы создаете систему с (под)системой для предоставления веб-интерфейса, файл/пакет webinterface/all.lisp будет содержать функции для настройки, запуска и остановки веб-сервера. Эти функции будут зависеть от определений обработчиков в других файлах/пакетах, которые, в свою очередь, будут зависеть от других файлов/пакетов, предоставляющих данные или выполняющих основную часть обработки запросов.

person Svante    schedule 03.06.2015