accept @pure @nothrow @return attributes

Jonathan Marler via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 27 13:19:20 PST 2015


On Tuesday, 27 January 2015 at 21:15:16 UTC, Daniel Kozak wrote:
> Jonathan M Davis via Digitalmars-d píše v Út 27. 01. 2015 v 
> 08:49 -0800:
>> On Tuesday, January 27, 2015 11:47:04 Nick Treleaven via 
>> Digitalmars-d wrote:
>> > On 27/01/2015 02:27, Jonathan M Davis via Digitalmars-d 
>> > wrote:
>> > > You're right. I forgot about those two. But it's still the 
>> > > case that the
>> > > number of function attributes that don't have @ on them 
>> > > is_far_  greater
>> > > than the number of those that do.
>> >
>> > But I explained that most function attributes don't only 
>> > apply to
>> > functions but to variables as well:
>> >
>> > public, protected, package, private, static, const,
>> > immutable, inout, and deprecated
>> >
>> > So it can be consistent that the above don't use @.
>> >
>> > These only affect functions, not variables, so should be 
>> > @attributes IMO:
>> >
>> > final, override, abstract
>> >
>> > These affect both:
>> >
>> > return, ref
>> >
>> > So if we want some kind of consistency, we can achieve it by 
>> > adding @
>> > for final, override, abstract, and removing it for 'return'.
>> 
>> abstract also applies to classes, as does final. Also, if we 
>> end up adding
>> any new attributes later, they're bound to have @ on them to 
>> avoid requiring
>> a keyword (which is why we have @ on some of them in the first 
>> place), and
>> if the new attribute applies to variables or types as well, 
>> then the
>> division that you're suggesting falls apart.
>> 
>> IMHO, if we have to search for a way to make them consistent, 
>> then there's
>> no point. We're just going to end up with making things more 
>> consistent in
>> one way and less in another without necessarily making it any 
>> easier for
>> anyone to keep track of, so we'd just be shuffling things 
>> around. I think
>> that there needs to be a clear and solid benefit to changing 
>> which
>> attributes have @ and which don't, or we shouldn't mess with 
>> them.
>
> Exactly I do not think we can (want to) be 100% consistent . 
> Even If I
> really like to see every attribute to be with or without @ 
> (because
> consistency). I do not think it will be perfect. For eg. one of 
> things I
> like about D is how easy I can switch from PHP, Java C# or C++. 
> Even
> rewrite some of my code from PHP consist with following steps:
> 1.) remove $
> 2.) replace :: and -> for .
> 3.) some minor changes (sometimes nothing)
>
> So I would prefer if private, public, protected, final, static 
> stay
> without @,
> but D specific things like
> pure,immutable,nothrow,nogc,safe,trust,disable,deprecated... 
> would go
> with @
>
> if I speak about immutable(const) I only mean function attribut 
> not
> storage. And It would be perfect if all theese must be on the 
> right
> side:
>
> // OK
> public final void someFunc() @immutable @safe @nogc @nothrow
> {
> }
>
> // OK
> public final immutable(int) someFunc() @immutable @safe @nogc 
> @nothrow
> {
>     return 5
> }
>
> // Deprecated
> public final immutable int someFunc() @immutable @safe @nogc 
> @nothrow
> {
>     return 5
> }
>
> // Error or Deprecated
> public final @immutable int someFunc() @safe @nogc @nothrow
> {
>     return 5
> }

Good idea.  The only think I would change is when an attribute 
appears on the right side, why not omit the '@' symbol :)  Other 
then that I like the consistency of putting the attributes in the 
same place.  But even if you kept the '@' symbol I would still 
prefer your proposal over what we have now.  It's more consistent 
and no longer looks weird.  When someone new comes along it makes 
sense and doesn't look like a hack.


More information about the Digitalmars-d mailing list