Make const, immutable, inout, and shared illegal as function attributes on the left-hand side of a function

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 12 12:40:55 PDT 2014


On 10/10/2014 4:04 PM, Brad Anderson wrote:
> I think it's rather unfortunate that D used keywords from C++ for things that
> work differently. const in particular but struct and class cause confusion and
> bickering too. Think of all the hours spent on this newsgroup arguing about
> logical const. If D's const were called something else like readonly nobody
> would be trying to shoehorn logical const into it and calls for logical const
> would have been discussed without having to pit two features against each other
> for a single spot in the language.

These kinds of problems always occur when transitioning from one language to 
another. I'm not trying to be dismissive, but I feel that a language has to pick 
its battles.

BTW, C++ const constantly causes confusion even for experienced C++ programmers.


> Another is char for utf-8 code units. So many people assume a char is a
> character when it's actually only sometimes a character by coincidence. If it
> had a different name like utf8_unit people would probably write more unicode
> correct code naturally.

C++ has the same problem, only far worse, since char is used for all kinds of 
multibyte characters, and most legacy/library code assumes ASCII. Java has the 
same issue (surrogate pairs).

There are other issues:

1. integers overflow
2. floating point numbers have precision problems

Programming languages are always imperfect models, it's like the 2x4's you buy 
at the hardware store are never straight. You just learn to deal with it, 
because perfectly straight ones would be prohibitively expensive.


More information about the Digitalmars-d mailing list