D2 Multithreading Architecture

Robert Jacques sandford at jhu.edu
Wed Apr 29 07:14:06 PDT 2009


On Wed, 29 Apr 2009 08:53:16 -0400, Jason House  
<jason.james.house at gmail.com> wrote:

> Robert Jacques Wrote:
>
>> On Tue, 28 Apr 2009 22:12:41 -0400, Daniel Keep
>> <daniel.keep.lists at gmail.com> wrote:
>>
>> >
>> >
>> > Andrei Alexandrescu wrote:
>> >> Robert Jacques wrote:
>> >>> Repost in ascii, since utf-8 has been causing some issues.
>> >>
>> >> You should know that posting a long, serious proposal here has less
>> >> chances than the paper -> bottle -> ocean route. A month from now it
>> >> will be forgotten.
>> >>
>> >> Please post in a wiki/blog/webpage.
>> >>
>> >>
>> >> Andrei
>> >
>> > Mostly because this teeny tiny window I read NG postings through  
>> doesn't
>> > work for long posts.  Plus, Thunderbird doesn't support my
>> > Text-to-speech addon.
>> >
>> > Why not whack it up on the D wiki?
>> >
>> >   -- Daniel
>>
>> I just did. :)
>> http://www.prowiki.org/wiki4d/wiki.cgi?OwnershipTypesInD
>
> A link to an overview of GRFJ would be helpful.
>
> The largest issue I see is using scope as any kind of output parameter.  
> If I pass a variable in as a ref scope parameter, all type information I  
> had must be erased. Any assignment to the head of the scope variable  
> could be an incorrect type. For example, a local variable could be  
> transformed into a shared variable. (both are scope inside the function  
> call). This leads to a cascade of issues I have with the proposal, so  
> I'll stop here and get your thoughts.  Const scope isnot an issue, but I  
> think you aim to handle more than that.

I've adding a link to Bartosz's GRFJ summary:  
http://bartoszmilewski.wordpress.com/2009/03/30/generic-types-for-concurrency/

Indeed I intend to handle more than that. The simple answer is that you  
can not assign to a scope variable except at declaration. This is scope  
rule 2. But this basically prevents output parameters (for exactly the  
reasons you mentioned). However, I think you are referencing to the  
section on the relaxation of rule two, which allows limited use of output  
parameters. This relaxation works by recognizing that the head of scope  
variables _must_ exist on the stack. Thus it is safe (with a few  
exceptions, see scope rule 6) to swap them. However, assigning to anywhere  
off the stack could result in the escape you mentioned and hence is  
illegal:
scope Node ln = myLocalNode;
scope Node sn = mySharedNode;
swap(sn,ln);       // Okay, were are only swapping the local scope  
references that exist on the stack
swap(sn, ln.next); // Error: Cannot take the reference of a scope tail



More information about the Digitalmars-d mailing list