const by default.

Chad J gamerChad at _spamIsBad_gmail.com
Mon Jul 3 22:17:46 PDT 2006


So far I'm pretty convinced that some kind of "constness" is a good 
thing.  I've already run into one area where this would be useful.

I have one peeve about it though: I really would not like it if the 
keyword used to represent constness was "const".  I will explain from my 
newbie-to-Cplusplus background, having come from languages that seem, at 
least to me, to be much more well thought out than Cplusplus.

When I see "const" I think of it as a shorthand for "constant", just as 
"bool" is shorthand for "boolean".  My understanding of something 
constant is that it does not change... EVER.  Thus it makes no sense to 
me why something as ephemeral as data passed into a function could be 
considered constant.  If the constant data leaves the scope of the 
function, becomes no longer constant, and gets changed, then it isn't 
really constant to me.

I do like the mutable word though, as it seems to have an english 
meaning very close to its programming meaning  :)
It also seems that if we were to make things immutable by default, we 
could make an "immutable" keyword.  Sure it's kinda long, but since most 
things are that by default then we won't be typing it much.  It also 
seems so much more logically related to the word "mutable".

Another worry I have is that of being stuck with many instances of 
"mutable" littering my code, if only because said code happens to modify 
referenced data a lot.  One way I might see this worry dissappearing if 
there was a way to blanket stuff into being immutable, in order to avoid 
repeating the word over and over again.  Sorta like:

class Foo
{
   mutable:
     int[] data; // this is mutable
     char[] name; // this too
     // etc
}

or maybe even something as radical as

mutable
{
   // from now on everything works as it used to

   void func1( char[] string1, char[] string2 )
   {
     string1[5] = 'a'; // ok
     string2[3] = 'b'; // also good
   }

   void func2( int[] data )
   {
     data[8] = 42; // just dandy.
   }
}

Note:  I am probably so newbish at language design compared to you guys 
it is not even funny, so maybe the syntax suggestions suck, but please 
consider my naming plea, at least as a "this experience was unpleasant 
so please fix it" sorta thing.



More information about the Digitalmars-d mailing list