DIP64: Attribute Cleanup

cym13 via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 18 12:57:42 PDT 2016


On Friday, 20 June 2014 at 19:22:04 UTC, Brian Schott wrote:
> http://wiki.dlang.org/DIP64
>
> Attributes in D have two problems:
> 1. There are too many of them and declarations are getting too 
> verbose
> 2. New attributes use @ and the old ones do not.
>
> I've created a DIP to address these issues.

Two years after, I think #1 would be a bad idea. I think it would 
overcomplicate most code for little benefit. Attributes aren't 
things that are easy to rally under a common name. Let's say that 
most people create their own set with "@safe @nogc @pure"... what 
should it be called? "@my_project_default"? Is there a name that 
would fit most projects so that many people can reuse it? Or will 
it have a different name for every project? In that case, not 
only would it complicate code reading, but what about mixing 
them? I foresee a *big* lot of issues with that for little 
benefit.

However I do think that the current state of attributes is too 
complicated too.

My take is that most people put the same attributes to almost 
every functions in a module because those functions are meant to 
work together. Therefore I think it would be more interesting to 
be able to set a new default for the module:

     @default = @safe @nogc @pure

     int foo(int i) { ... } // This function is @safe @nogc @pure
     int bar(int i) @pure { ... }  // This function is only @pure

I haven't of course gotten to the point where I'm able to write a 
DIP but I think it's worth a thought. Attributes look heavy when 
they're repeated. Setting a default value is the thing to do 
because it's what would be done with sets anyway, and it makes 
functions that do not follow the default rule look more imposant 
which is good: anything aside normality should be well-advertised.

About #2... come on, let's do it, consistency is a gift for the 
future. Of course code will break but it looks easy enough to fix.


More information about the Digitalmars-d mailing list