Conduits
Conduits allows the creation of extended packages that may dynamically share symbols with other packages, thus extending them. The extended packages are called "conduits", since they serve as conduits for other packages.

An example would be:

(defpackage :implementation-package-1
  (:export ...))
(defpackage :implementation-package-2
  (:export ...))

(defpackage :package-to-use
  (:use)
  (:extends :implementation-package-1 :implementation-package-2))

User code can now simply use the PACKAGE-TO-USE package and it will get all the exports of all the implementation packages.

You can also create packages which extend other packages excepting a few symbols, so you can create, for instance, custom CL-like packages, such as subsets, or CL-with-a-few-things-done-differently.

You can also `clone' packages - create another package which shares all (external and internal) symbols with an existing package.

The code was developed by Tim Bradshaw and it may be used for any purpose by anyone. It works with Allegro CL, LispWorks, CLISP, CMUCL and Symbolics Genera. The project page includes some documentation.


Topics: language extension