The specialization store system provides a new kind of function, called a store function, whose behavior is determined by the types of objects given as arguments to the store function.

Associated with each store function is a set of specialization objects. Each specialization encapsulates behavior and the domain for which the behavior is defined.

A premise of specialization store is that all specializations should perform the same task. Specializations should only differ in how the task is performed. This premise resolves ambiguities that arise when using types, rather than classes, to select the most specific specialization to apply.

The following list summarizes the major differences between a store function and common lisp's generic function: - Types rather than classes are used to select behavior. - Optional, rest and/or keyword arguments are considered when determining behavior. - Initialization forms for optional and keyword arguments are part of the state of a store function. - Support for compile time optimizations. - No support for method/specialization combination. - No support for argument precedence. - No support for class precedence.

The specialization store system includes a meta object protocol to allow users to change the default implementation.

Great effort has been spent on implementing this system such that it is portable to all implementations. The compile time dispatch functionality makes extensive use of compiler macros and the CLTL2 environment API.

Installation (ASDF)

The specialization store system uses ASDF to the manage compilation and loading of source files.