Допустим, у нас есть следующие предпосылки:
(quickproject:make-project "lib1")
(quickproject:make-project "lib2")
;;;; Modify lib1/package.lisp like that:
(defpackage #:lib1
(:use #:cl)
(:export #:symbol1))
;;;; Modify lib2/package.lisp like that:
(defpackage #:lib1
(:use #:cl)
(:export #:symbol2))
(quickproject:make-project "project1")
;;;; Edit the project1's asdf:defsystem so that it has the following dependencies:
:depends-on (:lib1 :lib2)
Загрузите project1 и проверьте пакет lib1, и вы заметите, что у вас есть и symbol1, и symbol2 там .
Последствия:
- Различные зависимости могут загрязнять пакеты других зависимостей
- Хуже - одна зависимость может переопределять определения символов другой зависимости и нарушать работу системы.
Возможно, я смогу решить мою текущую проблему, приняв соглашение об именовании пакетов, подобное тому, которое используется в Java (с длинными именами с разделителями).Однако это, похоже, проблема, которая должна решаться сообществом.Нам нужно решение общего назначения, которое будет применяться ко всем библиотекам CL.Что бы это было?