By encapsulating aspects of language semantics within a set of default
classes and allowing the programmer to derive new versions, object-or
iented languages whose semantics can be tailored to the needs of indiv
idual programmers have been provided, The degree to which such languag
es are simultaneously flexible and efficient is an open question, We d
escribe our experience with using this technique to incorporate transp
arent support for persistence into the Common Lisp Object System via i
ts' metaobject protocol, an open implementation based on reflection, F
or many aspects of our implementation the metaobject protocol was perf
ectly suitable, In other cases we had to choose among extending the pr
otocol, requiring the application programmer to employ special idioms,
and tolerating a large performance penalty. Based on our experience w
e evaluate the metaobject protocol, propose some improvements and exte
nsions, and present performance measurements that reveal the need for
improved language implementation techniques.