Thanks nicolas. I cannot remember this by hearth. 

For me this is really strange to have that rely on the way the execution 
engine make subtle differences between similar entity at the language level. 
I'm probably too idiot to understand why language semantics is mixed with 
optimization of the underlying execution engine.


On Dec 31, 2010, at 3:15 PM, Nicolas Cellier wrote:

> 2010/12/31  <[email protected]>:
>> Updates:
>>        Cc: marcus.denker
>> 
>> Comment #4 on issue 3498 by marianopeck: remove:ifAbsent: in linked list
>> leads to interruption/sync problems
>> http://code.google.com/p/pharo/issues/detail?id=3498
>> 
>> Stef, I am not Adrian, but yes, I think that can be the reasons. Just take
>> the example of Andreas. When you do foo == nil, when that's compiled, it put
>> a special bytcode for the == primitive (no method is send).
>> It seems the scheduler can change processes during method sends. In most
>> clases, this may not be a problem. But if you cahnge foo == nil, by foo
>> isNil, it may be a point where it can be preempted. And maybe there are
>> places where this cannot happen, probably the place where the the processes
>> are managed or the code needed for that, like Andras said, process, delay,
>> semaphore, etc.
>> 
>> What I don't understand is that I thought that the compiler replaces foo
>> isNil by foo == nil. And if this is the case, then what has been explained
>> doesn't make sense :(
>> 
> 
> No, only #ifNil: is a selector handled specially by Compiler.
> 
> Nicolas
> 


Reply via email to