On Sunday, 29 March 2015 at 19:13:32 UTC, bitwise wrote:
Interesting, but I still don't understand why D doesn't have
something like this:
const Test test; // or const(Test) test;
test = new Test() // fine, underlaying data is const, the
reference is not
Test const test = new Test();
test.a = 5; // fine, test is read-only but
underlaying data is not const
test = new Test(); // error: test is read-only
const(Test) const test = new Test();
test.a = 5; // error, underlaying data is const
test = new Test(); // error: read-only
I think the semantics you propose here are not good. The first
example would change the meaning of existing syntax (bad). The
second one shows a const reference to mutable data (head const),
which is a no-go for D so far.
Shuffling things around, this could be less disruptive addition
to the language:
Test const test; /* mutable reference to const data */
But:
1) Such placement based syntax is foreign to D.
2) It would be special syntax just for class types.
3) It's not how C++ rolls.
`const Test test;` and `Test const test;` are equivalent in C++.
You need that '*' in C++, too, to make a distinction between
reference and data.
4) Rebindable works reasonably well, as far as I know. So there
is not that much pressure to change the language.