I think I not understood second part of "self problem" in this paper. But self sends are covered by virus as I described.
2016-07-28 11:30 GMT+02:00 Denis Kudriashov <dionisi...@gmail.com>: > Hi > > 2016-07-27 22:19 GMT+02:00 Steven Costiou <steven.cost...@kloum.io>: > >> Hi, >> >> I use virus from Ghost to intercept messages sent to a given object and >> adapt methods behaviors for this particular object only. However it would >> seems that doing interception this way is subject to the "self problem" >> described in this paper from Stéphane (DUCASSE, Stéphane. Evaluating >> message passing control techniques in Smalltalk. *JOURNAL OF OBJECT >> ORIENTED PROGRAMMING*, 1999, vol. 12, p. 39-50). >> >> I understand i could do instance based adaptation using an other >> technique, but i wonder if there is any way with Ghost to deal with this >> "self problem" problem ? >> > I think "self problem" is only related to classic proxies when objects > stay behind them. But ObjectVirus is not proxy in this meaning. When you > infect your object by virus it is not replaced by somebody else. It is same > original instance but with overridden behaviour. That's why I call it virus > without any relation to proxies. > Any message to infected object is processed by your behaviour. All self > sends are intercepted. But there are few exceptions: > - special messages like ==,ifTrue/ifNil are not intercepted > - meta messages are not intercepted. They processed by Ghost mechanics but > they not passed to your behaviour. Meta messages defined by > #currentMetaLevel of your behaviour. You could implement it like: > > > YourGhostBehaviour>>currentMetaLevel > > ^GHMetaLevel empty > > > Empty meta level means that all messages will be passed to your behaviour. > There is also "GHMetaLevel standard" which is default one. It makes most of > "tool messages" not interceptable. For example #printString, #class, > #instVarAt: will be not intercepted. It's messages which are usually used > by tools like inspector and debugger. > Standard meta level simplifies debugging of new behaviours. If you make > mistake somewhere standard messages will be not broken and you could debug > error by tools. > >