By encapsulating aspects of language semantics within a set of default classes and allowing the programmer to derive new versions, object-oriented languages whose semantics con be tailored to the needs of individual programmers have been provided. The degree to which such languages are simultaneously flexible and efficient is an open question. We describe our experience with using this technique to incorporate support for persistence into the Common Lisp Object System (CLOS) via its metaobject protocol. For many aspects of our implementation, the metaobject protocol was perfectly suitable. In other cases, we had to variously extend the protocol, pay an unacceptable performance penalty, or modify the language implementation directly. Based on our experience, we propose some improvements to the protocol. We also present some performance measurements that reveal the need for improved language implementation techniques. >
['Arthur H. Lee', 'Joseph L. Zachary']
Using metaprogramming to add persistence to CLOS