[static] [shared] [const|immutable]
Lionello Lunesu
lio at lunesu.remove.com
Mon May 18 08:15:28 PDT 2009
Christopher Wright wrote:
> Lionello Lunesu wrote:
>>
>> "Christopher Wright" <dhasenan at gmail.com> wrote in message
>> news:gugs7b$70p$1 at digitalmars.com...
>>> Lionello Lunesu wrote:
>>>> I like shared/const/immutable as much as the next guy, but there are
>>>> now 2x2x3=12 ways to decorate a variable. Furthermore, by either
>>>> declaring the variable globally or locally (stack), we end up with
>>>> 24 possible declaration. See the code at the end of this post.
>>>
>>> The decision to make a variable a static class or module member is
>>> independent of whether to make it shared or not.
>>
>> You're right, of course. I realize now that "static" is a storage
>> class (when used locally) not a type modifier.
>>
>>> Shared and const-level have to do with controlling access to the
>>> variable.
>>>
>>> An immutable variable does not need to be declared shared.
>>
>> So, immutable implies shared.
>
> Immutable is threadsafe. Shared implies automatic locking, I believe;
> immutable variables do not need any locking.
So one has to wonder what code will be generated for "shared
immutable".. an immutable with (useless) locking?
>>> Shared const is for publish-subscribe sort of deals.
>>
>> You mean one thread can change the value, but for another thread it's
>> constant? I can see how it would be useful using reference types, but
>> I don't understand how it would work with value types..
>
> Shared const doesn't really work for value types; it ends up being the
> same as immutable. Unless you have a mutable pointer to the value, in
> which case you can write to the value through that pointer. That is not
> safe -- the compiler is free to see that this variable is const and a
> value type, which means you can't ever write to it, and then put it in
> read-only memory.
>
> Const that doesn't boil down to immutable works a fair bit better with
> object-oriented code. You wrap your value in a class, create a mutable
> instance, and send it to a bunch of other functions or objects or
> threads expecting a const object. They can't use the mutators, but they
> can use the accessors.
Got it. Thanks..
L.
More information about the Digitalmars-d-learn
mailing list