On Tue, Jul 10, 2012 at 03:39:30PM -0700, Walter Bright wrote:
> On 7/10/2012 3:13 PM, H. S. Teoh wrote:
> >I don't think they were rushed. There's been a push for making
> >druntime and Phobos const-correct for a while now. I don't think this
> >change is a _mistake_ per se, but it does expose a flaw in the
> >language: const is too limited in scope, and we need something else
> >to fill in for use cases where const isn't good enough.
> 
> 
> There's a gigantic problem with logical const. It is completely
> unenforceable - it is documentation only. All the reasoning and
> mechanical guarantees that come with const, immutable, and purity fall
> apart.
[...]

What about the "partial const" idea I had?

Given a class C which derives from a base class B, we may designate the
base class B as const, which makes every inherited field const, while C
itself may have mutable members. Then we can pass instances of C around
as B references (it's OK to implicitly convert C to const(B), because
the B part of C is actually const). As far as the user of the B
references can tell, the object is const, even though the methods of C
may be mutating C-specific members.

So C could be a caching class, or whatever it is that needs mutation to
work, and B is its "const part" which is guaranteed by the type system
never to mutate.


T

-- 
Give me some fresh salted fish, please.

Reply via email to