Как организовать исходный код Common Lisp так, чтобы символы правильно распределялись между библиотеками? - PullRequest
0 голосов
/ 15 февраля 2019

Допустим, у нас есть следующие предпосылки:

(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.Что бы это было?

...