const(Object)ref is here!

Steven Schveighoffer schveiguy at yahoo.com
Mon Dec 6 11:21:00 PST 2010


On Mon, 06 Dec 2010 14:04:43 -0500, Jonathan M Davis <jmdavisProg at gmx.com>  
wrote:

> On Monday, December 06, 2010 07:37:27 Steven Schveighoffer wrote:

>> It should be relatively painless.  Just change the signatures of the  
>> base
>> functions, and fix any compile errors.
>
> And watch all the code break... I'll definitely welcome the change (it's  
> probably
> the first bug that I voted on in bugzilla), but there will be tons of  
> code broken
> by it, since you just _know_ that a lot of user code doesn't bother to  
> make
> toString() and its friends const. It's still a change that needs to be  
> made
> though. Being unable to properly compare const and immutable objects is
> crippling. Of course, it would be more of an issue if it were easier to  
> actually
> create immutable objects which are classes rather than strcuts, but  
> that's a
> separate issue.

Yes, one of the issues is that const has a viral effect.  If you ignore  
const, none of your functions are const.  So if you use functions inside  
opEquals, those have to be marked as const, and so on.

But there are very few circumstances where opEquals needs to be marked as  
mutable.  If that is the case, there is something broken with your code  
(and you should fix it) or there's something wrong with code you use (and  
you'll have to insert casts to deal with it for now).  In a very small  
number of circumstances, non-const opEquals can be beneficial (such as  
caching data that is expensive to calculate).  We need to find another way  
to deal with that (I suggest having logical const, but that's not a  
popular idea with Walter :).  But it shouldn't detract from the  
requirements.  You can always circumvent if you need special cases.  I'd  
rather start from a solid const-supporting position and add holes where  
they make sense then start from a base that is full of holes and try to  
patch them slowly.

In many cases affixing const to your code is not just a simple 'slap a  
const on here'.  It can involve careful thought and possibly redesign.

But without these changes, const is very useless, the standard library  
needs to eat its own dogfood if we want to peddle it to others.

-Steve


More information about the Digitalmars-d mailing list