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