Great work!

I am so looking forward to use this :). Please keep us posted when we can play 
with it and how to load it.

Cheers,
Doru


On 13 Mar 2011, at 10:48, Stéphane Ducasse wrote:

> Thanks a ***LOT*** 
> It is really important for pharo.
> 
> Stef
> 
> On Mar 13, 2011, at 2:08 AM, Henrik Sperre Johansen wrote:
> 
>> Barring a few update problems, they changes Igor and I made today should
>> be ready for general review/inclusion shortly.
>> Here's a few points about the most important differences to the current
>> implementation:
>> 1. Now supports action blocs with 0, 1 or 2 arguments (announcement and
>> receiver).
>> This should allows us to:
>>   1.1 Write blocks with strict guarantees for expiry and removal
>> without keeping strong references to announcers in subscriber, by using
>> the announcer arg to unsubscribe if action is invalid. (Not very nice
>> resulting code, but necessary if altering outside-accessible state)  
>>   1.2 use suspendWhile: equivalent from blocks where announcer is not
>> kept in context when such protocol is added.
>>   1.3 Not use :ann argument for action blocks in which you don't
>> really care.
>>   1.4 Provide an upgrade path from events by replacing them with 0-arg
>> MessageSend announcements under the hood if we want.
>>       (Would requires some nasty bits with objects as announcers though).
>> 
>> 2. Support weak subscriptions for message send type of announcement.
>>    Block action requires ephemeron support in VM to correctly
>> unsubscribe automatically, and trying to create them currently raises an
>> error.
>> 
>> 3. Reify Subscriptions (which are returned by #when:do: and friends),
>> which can be made weak with #makeWeak.
>>   However, for thread-safety reasons this is done using   
>> #becomeForward:.
>>    If weakness can be determined at subscription time, the recommended
>> way would be to use:
>>        announcer weak when:send:to:
>>    The weak send creates a wrapper which will instantiate the
>> subscription as weak from the get-go.
>> 
>> 4. The SubscriptionRegistry is thread-safe, in the sense that add:
>> remove: and deliver: are protected by a Monitor.
>>   (so you can remove: in action block without a deadlock, see 1.1).
>>   Rather than block for the entire deliver: process, we chose to only
>> protect the copy of subscriptions.
>>   This implies that the following may happen:
>>       Thread 1 starts delivery of announcement.
>>       Thread 2 interrupts after copy is created, then removes a
>> subscription and carries on doing its stuff
>>       Thread 1 resumes, and delivers announcement to remaining
>> subscriptions, potentially including that removed by Thread2.
>>       Don't think this is likely to be a common scenario where
>> protecting the entire delivery would have made a difference.
>>   If you think otherwise, and can provide a good use case, please
>> speak up and we may change it.
>> 
>> if you want to browse the changes, they are available for perusal in the
>> changesets attached to:
>> http://code.google.com/p/pharo/issues/detail?id=3814
>> (Split in two to take care of migrating existing subscriptions)
>> Don't try to load them though, as they depend on changes in other
>> issues, and the comment changes cause errors.
>> 
>> Feedback would be appreciated.
>> 
>> Cheers,
>> Henry
>> 
>> PS. We forgot to include #on:do:for: & friends, which allow you to
>> specify another subscriber than the object block belongs to.
>> This is an oversight and will be corrected before inclusion. Just in
>> case you were following Tudor's tweets and were wondering where they had
>> gone.
>> 
>> 
> 
> 

--
www.tudorgirba.com

"One cannot do more than one can do."




Reply via email to