Comment #3 on issue 3648 by marianopeck: A "Stratified" proxy in smalltalk
http://code.google.com/p/pharo/issues/detail?id=3648Hi Igor. I remember you showed me this implementation once I was asking
about how to do proxies for classes. It works, but there is something I
don't like: having to do the shallow copy of the class.
createHandler
" This method will create a handler - an anonymous class, which will
receive the
#handleMessage:forProxy: message.
To get a proxy object, you must instantiate a handler instance by sending
#basicNew to it.
See my subclasses for examples "
^ self shallowCopy
methodDict: nil;
superclass: self
I don't like that because for EACH proxy, I have to instantiate a new class
(an object with a lot of intsVars) and an instance of that class.
In my case, I want to create a lot of proxies and the memory is important,
so that solution doesn't scale. What we did is to use the same proxy as the
metaclass. So we defined for example:
ProtoObject subclass: #ClassProxy
instanceVariableNames: 'superclass methodDict format fileName'
classVariableNames: ''
poolDictionaries: ''
category: 'Proxies'
ClassProxy >> initialize
super initialize.
superclass := ProxySuperclass.
methodDict := nil.
fileName := nil.
ProxySuperclass >> cannotInterpret: aMessage
^ ClassProxyHandler mareaHandleCannotInterpret: aMessage for: aMessage
lookupClass receiver: self
Anyway, if you are interested, take a look to the package Proxies in
http://www.squeaksource.com/Marea