Wide Classes
If you browse to WideClass
and WideClassTest
on How to access the SCG visualworks store there is a simple implementation of wide classes. The idea of wide classes is based on work by Manuel Serrano, please refer to his ecoop paper on wide classes. A wide class is a class that can become larger when needed and shrink again later. As we have tons of empty inst vars in Moose models, that might help us to save some megas on large case studies.
How does it work?
Sending #wide:<! >put: to some object will install an instance var and accessors on the receiving instance.
o := Object new.
o widen: 'foo'.
o foo: #whatever.
o foo
and even better, if you implement in a class #foo and #foo: as follows
foo ^nil
foo: arg self wide: #foo put: arg
upon first execution of #foo: the foo inst var is installed in a per-instance base and both methods get properly overriden with simple accessors. Wide classes and objects should work with the inspector as well. There is no DNU hack anywhere, thanks to Travis for pointing me to the right implementation.
self changeClassTo: Array.
self become: (self copyWith: nil).
self changeClassTo: wideclass