DIP 1012--Attributes--Preliminary Review Round 1

Nicholas Wilson via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 28 16:25:35 PDT 2017


On Friday, 28 July 2017 at 21:47:32 UTC, Jesse Phillips wrote:
> On Thursday, 27 July 2017 at 14:44:23 UTC, Mike Parker wrote:
>> DIP 1012 is titled "Attributes".
>>
>> https://github.com/dlang/DIPs/blob/master/DIPs/DIP1012.md
>> Thanks in advance to all who participate.
>>
>> Destroy!
>
> My primary points
>
> * Don't formally deprecate the keywords, there is not enough 
> justification to ever remove them.

Indeed the only reason for removing them would be to remove code 
from the compiler. They do no harm at all.

> * Remove the whole program defaults, I'm ok with it being 
> changed in a re-implementation of the runtime (like the 
> embedded example), we just don't need the extra confusion 
> within user code.

The program defaults are there to make @safe by default a thing, 
and betterC by default a thing, which are covered in the _three 
Primary points_ of the semesters Vision document[1]. These would 
not normally be set (i.e. opt in).

> * Specifying inferred needs to be within druntime only, and 
> thus may not need to exist.

I think there is usefulness in having it, particularly as the 
meta-default (defaultAttributeSet). Walter has ben pushing for 
some time to infer attributes by default. This would provide a 
directive for the compiler to do so. Please elaborate.

> * I'm concerned user defined attributes could define a 
> "defaults" for functions.

you mean user UDAs (if not please explain)? the default 
application of UDA is for core attributes only.

>
> I think the updated document needs some additional rework, here 
> are some examples:
>
> # Rational
>
> A number of issues with the existing functional attribute 
> system have come up through the years.
>
> * Certain attributes don't have a name, e.g. All functions 
> ''throws'' but this is not an existing attribute.
> * The default attributes were not correctly chosen, e.g. all 
> class methods should be ''final'' unless specified otherwise, 
> and because of the first point declaring 'final:' at the top of 
> the class cannot be undone.
> * AliasSeq is provided to manage Attributes, but it doesn't 
> handle built in attributes (I could be wrong but is what I'm 
> getting from the document even though it isn't explicitly 
> stated)
> * ...
>
> # Description
>
> Function existing attributes and their unnamed counterpart will 
> exist as an enum within core.attributes. This module will be 
> implicitly imported to provide the symbols without explicit 
> import or breaking existing code. The compiler will recognize 
> the non-@ based attributes as the corresponding core.attribute.
>
> ...
>
> ## Implementation Details
>
> ----------
> module core.attribute;
>
> enum Protection {
> system,
> safe,
> trusted,
> }
>
> alias safe = Protection.safe;
> ...
> -----------
>
> The compiler will default functions to the first value of the 
> enum [for my example].

( That would provide a pessimistic default and debates the 
ability for the compiler to infer)
>
> [So on and so forth]

Thanks for your suggestions.

[1]: https://wiki.dlang.org/Vision/2017H2


More information about the Digitalmars-d mailing list