Как организовать исходный код 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. Что бы это было?

0 ответов

Другие вопросы по тегам