[dmd-concurrency] Defining shared delegates

Robert Jacques sandford at jhu.edu
Tue Jan 19 18:02:57 PST 2010


On Tue, 19 Jan 2010 19:31:04 -0500, Andrei Alexandrescu  
<andrei at erdani.com> wrote:
> Robert Jacques wrote:
>> 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.
>
> I understand now. So is it correct to assess that if we get the rules  
> for classes straight we also have delegates covered?
>
> Andrei

Yes. The only extra things would be to A) implement them in the type  
system and B) allow automatic conversion to less restrictive delegate  
types.


More information about the dmd-concurrency mailing list