Logical const
Steven Schveighoffer
schveiguy at yahoo.com
Tue Nov 30 05:03:11 PST 2010
On Mon, 29 Nov 2010 18:04:31 -0500, Walter Bright
<newshound2 at digitalmars.com> wrote:
> Steven Schveighoffer wrote:
>> On Mon, 29 Nov 2010 15:58:10 -0500, Walter Bright
>> <newshound2 at digitalmars.com> wrote:
>>
>>> Steven Schveighoffer wrote:
>>>> Having a logical const feature in D would not be a convention, it
>>>> would be enforced, as much as const is enforced. I don't understand
>>>> why issues with C++ const or C++'s mutable feature makes any
>>>> correlations on how a D logical const system would fare. C++ const
>>>> is not D const, not even close.
>>>
>>>
>>> Because people coming from C++ ask "why not do it like C++'s?"
>> I don't get it. A way to make a field mutable in a transitively-const
>> system is syntactically similar to C++, but it's not the same. Having
>> a logical-const feature in D does not devolve D's const into C++'s
>> const. If anything it's just a political problem.
>
> Having mutable members destroys any guarantees that const provides.
> That's not political.
What guarantees? Const provides no guarantees.
class C
{
static C theCommonOne;
int x;
void foo() const {
theCommonOne.x = 5; // theCommonOne could be this
}
}
Only immutable provides guarantees. As I said earlier, the place where
logical const would cause issues is immutable. Immutable data is
currently implicitly shareable, and the compiler may take steps to
optimize strongly-pure function calls, which require immutable
parameters. Any logical const system would have to either work with those
requirements or force them to be reevaluated.
> And, I repeat, having a mutable type qualifier DOES NOT make logical
> const a language feature. This is why discussion and understanding of
> C++'s const system is so important - people impute characteristics into
> it that it simply does not have.
I've proven in the past that logical const is equivalent to full const.
That is, I can emulate logical const without any casts in the current
const regime. Making it more efficient and simpler is all we would be
doing.
-Steve
More information about the Digitalmars-d
mailing list