[dmd-concurrency] Defining shared delegates

Robert Jacques sandford at jhu.edu
Tue Jan 19 14:42:19 PST 2010


On Tue, 19 Jan 2010 16:20:43 -0500, Andrei Alexandrescu  
<andrei at erdani.com> wrote:
> Michel Fortin wrote:
>> Le 2010-01-19 à 15:20, Andrei Alexandrescu a écrit :
>>
>>> One suggestion about shared delegates: should we take the executive  
>>> decision to not define them at all? There's nothing you can do with  
>>> delegates that you can't do with classes. Although generally delegates  
>>> do justify their existence because they're more comfy than e.g. local  
>>> classes, it doesn't strike me as obvious we'll need comparable  
>>> convenience when dealing with shared classes.
>>  The reason I wrote all this is because I think delegates can be much  
>> easier to work with than classes. That's what I tried to demonstrate.
>>  That's because delegates completely encapsulate the "sharedness" of  
>> what they touch, which means that contrary to other types you can  
>> implicitly convert a shared delegate to a thread-local one. This should  
>> make them much easier to share than most other types, including classes.
>
> I may be missing something, but passing a delegate object across threads  
> begets arbitrary sharing of that delegate's state across threads -  
> because the delegate can do anything to its data. In fact, many  
> functional languages define poor man's classes as delegates that  
> dispatch the action depending on arguments. There are examples in e.g.  
> SICP (http://mitpress.mit.edu/sicp/).
>
> Andrei

Yes, I believe you are. You described a regular delegate that is shared  
between threads. What Michel and I have been talking about is a shared  
delegate, which can be safely passed between thread. A good example of  
what a shared delegate would be is the member function of a shared class,  
while a regular delegate is the member function of a normal class. i.e.  
the delegate's state would be protected in the same way any other shared  
object would be.


More information about the dmd-concurrency mailing list