Revamped concurrency API

Jeremie Pelletier jeremiep at gmail.com
Mon Oct 12 19:45:05 PDT 2009


Robert Jacques wrote:
> On Mon, 12 Oct 2009 21:45:20 -0400, Michel Fortin 
> <michel.fortin at michelf.com> wrote:
> 
>> On 2009-10-12 11:45:55 -0400, Andrei Alexandrescu 
>> <SeeWebsiteForEmail at erdani.org> said:
>>
>>> Occasionally people here ask for ways in which they can help D. One 
>>> thing that would be extremely helpful at this point would be to help 
>>> defining and implementing D's new concurrency API. Unfortunately, 
>>> Bartosz has declined to contribute. That leaves Walter, Sean, Don, 
>>> and participants to this group to do it.
>>
>> So Bartosz quit? Not that much surprising given the all too many 
>> missing building blocks.
>>
>> I recently realized that you can easily implement unique in a library. 
>> It can work pretty much the same as auto_ptr in C++. But to guaranty 
>> uniqueness you need either to rely on convention (as in C++), or add 
>> support for lent to the compiler.
>>
>> I know we discussed at length how lent could be implemented, we called 
>> it 'scope' and 'escape analysis' at the time and the conclusion you 
>> (and Walter I guess) came with was that it was too much for D2.
>>
>> Well, without lent (and thus without unique), safe message passing 
>> systems across threads will be limited to immutable data, or copied 
>> data, which not at all useful in many situations.
>>
>> Now if you want a good concurrency API relying on convention, then 
>> that's great: there are plenty of examples to follow out there. But if 
>> you want it to be both safe (enforced) and useful at the same time, 
>> that's a mission impossible with the current set of tools available 
>> from the compiler.
>>
>> That's why I'm not surprised Bartosz declined to implement it.
>>
>> (And sorry if I sound pessimistic.)
>>
>>
> 
> I agree. Particularly about lent. Immutable and mutable weren't 
> considered complete without const, so I'm surprised that local and 
> shared are considered complete without lent. You can even implement it 
> without escape analysis. Strangely, from what I remember of Bartosz's 
> posts, it was unique that was the sticking point, though you can 
> implement both unique and owned as library types (though they do become 
> less efficient).

I may sound ignorant, but that does lent means? I mean the word itself, 
I couldn't find something relevant on google.

Anyways, I agree that we need a type qualifier between unshared (local) 
and shared, just like const sits between mutable and immutable. It would 
make shared handling just so much easier and convenient.

If shared/lent were properly implemented and as easy to use as 
immutable/const, we'd already begin to see concurrency APIs, I tried a 
few times to implement different concurrency models and always failed 
due to shared requiring either too much casts or forces too many 
structures and methods to be shared.

I vote for a 'lent' qualifier to be implemented in the compiler.

Jeremie



More information about the Digitalmars-d mailing list