Как организовать исходный код Common Lisp так, чтобы символы правильно распределялись между библиотеками?
Допустим, у нас есть следующие предпосылки:
(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. Что бы это было?