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

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Fri Oct 10 10:52:30 PDT 2014


On 10/10/14 11:15 AM, Martin Nowak wrote:

> As this is more about stating a clear preference than deprecating the
> old syntax let me propose a compromise.
>
> - adding RHS rule to D's style guide http://dlang.org/dstyle.html
>    with an explanation what the storage class function thing does
>
> - change any dmd formatting code to RHS and change our documentation
>
> - leave the rest to linting tools like
> https://github.com/Hackerpilot/Dscanner

This is a case of the compiler doing the *wrong* thing when requested to 
do something else.

When I say:

const int
foo() { return 1;}

I mean I want foo to return a const int. The compiler does the *wrong* 
thing, and instead applies const to the hidden this parameter.

In most cases, the result is a confusing error message, because most of 
the time, it won't compile. But in some cases, it will compile and do 
something completely incorrect.

This is not a problem of specification, this is a problem of human 
semantics. The specification is sound, correct, and completely confusing 
to real people.

To avoid the confusion, we put the const on the right side. While not 
*completely* intuitive, it's much clearer what const applies to.

I think leaving this to a lint tool basically is as good and effective 
as doing nothing. It's not a compromise at all.

-Steve


More information about the Digitalmars-d mailing list