[Pharo-project] Issue 3648 in pharo: A "Stratified" proxy in smalltalk

pharo at googlecode.com pharo at googlecode.com
Mon Feb 21 14:35:20 CET 2011


Comment #3 on issue 3648 by marianopeck: A "Stratified" proxy in smalltalk
http://code.google.com/p/pharo/issues/detail?id=3648

Hi 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






More information about the Pharo-project mailing list