次の前提条件があるとします。
(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 ライブラリに適用できる汎用ソリューションが必要です。それは何でしょう?