Logical const

Walter Bright newshound2 at digitalmars.com
Mon Nov 29 11:33:48 PST 2010


Steven Schveighoffer wrote:
>> In fact, "logical 
>> constness" is a fraud anyway because the underlying data isn't 
>> constant at all, one is completely relying on convention. There's 
>> nothing at all preventing a supposedly logical-const-correct function 
>> from returning a different value every time it is called, and no way 
>> for the compiler to detect this.
> 
> This is complete BS.  logical const in C++ is not the same as what 
> logical const in D would be.  The transitive guarantee is much more to 
> credit for allowing optimizations and static analysis than the omission 
> of mutable members.  How does the fact that an Object's monitor is 
> mutable affect the optimizer?
> 
> In fact, how can *any* const or immutable function be optimized any 
> differently than a mutable function?  The only optimizations I can think 
> of are for pure functions.  And a pure function with immutable becomes 
> significantly less optimizable if some fields might be mutable.  Couple 
> that with the fact that a class may define new mutable members, it would 
> be impossible to statically prove whether a class is completely 
> immutable or logically immutable.
> 
> But it would be good enough to allow logically-const/immutable to be 
> different than const/immutable.  The problem is that this severely 
> complicates the const system.
> 
> If you are going to argue this case, please do not use C++ as a straw 
> man, it's not the same as D.

I don't understand your comment. In C++ you can write:

struct S
{
     mutable int m;

     int getM() { m = rand(); return m; }
};

Where's the "logical const"? It returns a different value every time. Logical 
const is not a feature of C++.


More information about the Digitalmars-d mailing list