Vision for the D language - stabilizing complexity?
Andrew Godfrey via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jul 15 20:25:18 PDT 2016
On Friday, 15 July 2016 at 23:00:45 UTC, Walter Bright wrote:
> On 7/15/2016 1:48 PM, Shachar Shemesh wrote:
>> On 15/07/16 22:50, Walter Bright wrote:
>>
>>> You can do logical const in D just like in C++, and get those
>>> performance gains. You just can't call it "const". But you
>>> can call it
>>> /*logical_const*/ and get the same result.
>>
>> No, you can't. The fact that the compiler enforces the no
>> const to mutable
>> transition (unless you use a cast)
>
> The compiler does next to nothing - the maintainer can stick in
> 'mutable' members, and there's no reliable way to detect that.
> The maintainer can stick in const removing casts, and there's
> no reliable way to detect that, either.
>
> If it's not mechanically checkable, it is not reliable, and is
> what I call "faith-based programming."
>
>
>> is one of the main appeals of using const in
>> any language. If you call something "logical const", but the
>> compiler does not
>> help you to catch bugs, then I don't see the point.
>
> I agree, and the C++ compiler is unable to verify "logical
> const". It's entirely based on faith.
>
>
>> In effect, if logical const is what you want, C++ gives you a
>> tool while D
>> leaves you to your own devices. As a result, a lot of places
>> you'd define as
>> const in C++ are defined mutable in D, losing language
>> expressiveness.
>
> You and I certainly have polar opposite opinions on that. C++
> does not have a notion of "logical const" (it is not in the C++
> Standard). It's an uncheckable convention, might as well just
> use /*logical const*/.
>
> D, on the other hand, has verifiable const and verifiable
> purity.
D's const/immutable feature is powerful and I love it. I would
not trade it for C++'s version of const. It also seems fair to
say that const as C++ implements it, would not be worth adding to
D even if having two very similar features wasn't confusing.
After all, every feature starts with a negative score.
This subthread took it too far, that's the only reason I waded
in. C++'s const feature is not entirely useless.
Similarly:
> If it's not mechanically checkable, it is not reliable,
I agree and I like mechanically checkable things. But I also like
compiler features that mix mechanical checking with the ability
to attest to something that can't be mechanically checked. Like
the @system attribute. So this line of reasoning feels incomplete
to me. Are we talking here about immutable/const only within the
context of @safe code? If so, then I missed that but I get it.
Otherwise, I don't get it.
More information about the Digitalmars-d
mailing list