bearophile wrote:
Jeremie Pelletier:

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

You may be right, and Bartosz has explained me why and how to use lent. It 
sounds like a nice idea, but it has some costs too (in language complexity, for 
example). But I need to use such things in practice, in real (even small) 
programs to know/understand if I like and understand them enough.

I don't see how heavy that cost is since all of const/immutable/lent/shared are type qualifiers, the semantics are already there for const and immutable, and half there for shared.

I would also much prefer compiler implementations to be a bit more complex and implement lent/shared properly than push that complexity to user code. If we're trying to get rid of data races and deadlocks and whatnot, the last thing we want are complex implementations in library/user code because they lack the proper language primitives.

If we have just those two qualifiers, the rest of the concurrent models can be implemented entirely in the library.

So I'd like to have an experimental version of D where such ideas (like lend, 
nonnull references, and few other things) can be tried, and if they are 
experimentally seen as not good (by me too), they can be discarded and removed. 
For me this is true for nonnull references, but such experimental need is even 
strong for lend.

D2 is already 'experimental' if you consider the state of shared right now :)

It seem all the long discussion regarding nonnull references has gone nowhere. 
That has made me a little sad. Only a bit of flow analysis has being accepted, 
to cover certain cases of a specific bug case of uninitialized objects.

I never liked the Object vs Object? syntax, that would just create ambiguity with the ternary conditional. D already dropped the template syntax from C++ to drop the ambiguity with <> and comparison operators.

I wouldn't mind something like nonnull(Object), ie yet another type qualifier, although that would get cumbersome in a few cases like const(shared(nonnull(Object))) :o)

Bye,
bearophile

Reply via email to