> Am 28.07.2016 um 12:56 schrieb Esteban Lorenzano <esteba...@gmail.com>: > > I do not like either the “virus” name. > not just because is negative in a subjective way… also it hides what it does > inside a fantasy name, and that IMO is negative to self discovery of the > system. > > I mean… a framework can have a fantasy name… but a class? A method name? > (#infect:… come on!) > > I know is “cool", but if I read the code below, I have NO CLUE of what is > going to happen, and that’s not good. > +100
Norbert > Esteban > >> On 28 Jul 2016, at 12:33, Steven Costiou <steven.cost...@kloum.io >> <mailto:steven.cost...@kloum.io>> wrote: >> >> Hi, >> >> I think i am missing something. >> >> For example in the following code (took from the tests): >> >> | victim virus actual | >> virus := GHObjectVirus behaviour: GHGhostBehaviourStub new. >> >> victim := 0@0 corner: 3@4. >> virus infect: victim. >> victim corner >> >> The evaluation is trapped by the send:to: method in the behavior (i've put a >> halt there). However if i replace the "corner" message by an inspect of the >> victim, and if i evaluate "self corner", then the message is processed >> without going through the send:to: method of the behavior. It is not halted >> and the victim responds immediately to the message. I have also tried to add >> a new method in the Rectangle class that calls "self corner". When called in >> the playground, my new message is trapped but not the "corner" sent to self. >> >> From what i understand it could be related to the behavior i use, but i >> don't see what's missing. >> >> >> Le 2016-07-28 11:35, Denis Kudriashov a écrit : >> >>> 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 >>> <mailto:dionisi...@gmail.com>>: >>> Hi >>> >>> 2016-07-27 22:19 GMT+02:00 Steven Costiou <steven.cost...@kloum.io >>> <mailto: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. >>> >