DIP 1012--Attributes--Preliminary Review Round 1
Nicholas Wilson via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jul 28 05:00:06 PDT 2017
On Friday, 28 July 2017 at 11:45:21 UTC, Nick Treleaven wrote:
> On Friday, 28 July 2017 at 01:50:24 UTC, Jonathan M Davis wrote:
>> Should public have @ on it? Should static have @ on it? What
>> about scope, const, or shared?
>
> If they are storage classes, they shouldn't have @. If they are
> statement or expression keywords, they shouldn't have @. Things
> like that are introduced with leading underscores: __traits,
> __gshared.
>
> public etc could be @ attributes, but I see no reason to change
> them. This inconsistency can be explained by just saying
> visibility is special. (That said I wouldn't complain if they
> were changed too). Common keywords in other languages can help
> justify keeping those keywords in D.
the only catch there is that the `package` visibility takes an
optional module following it and therefore can't be done as an
enum.
>> it looks like the DIP is talking about what the default
>> attributes in general are. It's one thing to slap a default
>> set of attributes at the top of a module and then negate them
>> later in the module
>
> This is one part of the DIP I like - `@safe module foo;`. AIUI
> this would enable a @safe default that doesn't stop code such
> as templates being inferred as @system. This is not currently
> possible in D. I know Walter has talked about inferring
> attributes for all function bodies - in that case the DIP seems
> a bit less useful, but could still set the default for
> unittests, module ctors/dtors and main().
Hmm, after some discussions in this thread I decided that it
would be better to have a "last applied wins" rule so as not to
need the whole tag the module decl to set the default for the
module. I suppose it could be bought back if need be but it's
kind of redundant with "last applied wins". Templates may still
be a bit of a problem.
More information about the Digitalmars-d
mailing list