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.

Esteban

> On 28 Jul 2016, at 12:33, Steven Costiou <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.
>>  

Reply via email to