Something needs to happen with shared, and soon.

Dmitry Olshansky dmitry.olsh at gmail.com
Sat Nov 17 08:36:14 PST 2012


11/17/2012 5:22 PM, Michel Fortin пишет:
> On 2012-11-16 18:56:28 +0000, Dmitry Olshansky <dmitry.olsh at gmail.com>
>> Or wait a sec. Even simpler idiom and no extra features.
>> Drop the idea of 'access' taking a delegate. The other library idiom
>> is to return a RAII proxy that locks/unlocks an object on
>> construction/destroy.
>>
>> with(lock(object_by_id))
>> {
>>     ... do what you like
>> }
>>
>> Fine by me. And C++ can't do it ;)
>
> Clever. But you forgot to access the variable somewhere. What's its name
> within the with block?

Not having the name would imply you can't escape it :) But I agree it's 
not always clear where the writes go to when doing things inside the 
with block.

>Your code would be clearer this way:
>
>      {
>          auto locked_object_by_id = lock(object_by_id);
>          // … do what you like
>      }
>
> And yes you can definitely do that in C++.

Well, I actually did it in the past when C++0x was relatively new.
I just thought 'with' makes it more interesting. As to how access the 
variable - it depends on what it is.

>
> I maintain that the "synchronized (var)" syntax is still much clearer,
> and greppable too. That could be achieved with an appropriate lowering.

Yes! If we could make synchronized to be user-hookable this all would be 
more clear and generally useful. There was a discussion about providing 
a user defined semantics for synchronized block. It was clear and useful 
and a lot of folks were favorable of it. Yet it wasn't submitted as a 
proposal.

All other things being equal I believe we should go in this direction - 
amend a couple of things (say add a user-hookable synchronized) and 
start laying bricks for std.sharing.


-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list