All function attributes possible with "@"?
01010100b via Digitalmars-d
digitalmars-d at puremagic.com
Wed Dec 14 16:08:12 PST 2016
On Wednesday, 14 December 2016 at 20:41:57 UTC, Jonathan M Davis
wrote:
> Because it's adding yet another inconsistency in the places
> that don't involve function attributes. After all, static and
> cost both get used in contexts where keywords such as auto and
> enum get used (neither of which are function attributes), and
> they don't have @. Or are you suggesting that we slap @ on all
> keywords? All you're doing is shuffling inconsistencies around.
Actually slapping @ on all keywords would remove the
inconsistency altogether, even if that isn't necessarily what I
favour. Keywords which are also function attributes would seem a
better set to allow @ on. While it is true that this reduced set
of keywords would be "shuffling an inconsistency around" that
still leaves open whether this inconsistency:
final pure @nogc func()
final class G{}
is preferable over this one:
@final @pure @nogc func()
final class G{}
> But even worse, you're then introducing yet another way to do
> exactly the same thing in D without it adding any new
> functionality. There will be questions over what the difference
> between @pure and pure is. There will be questions about why
> you can use both @pure and pure, but you're forced to use @safe
> instead of safe. There will be yet more arguments over coding
> style and whether it's better to use @pure or pure.
There will always be arguments over coding style, but this isn't
one of them, it's about language design.
> Except that it isn't easier to learn, because you still have
> stuff like pure and nothrow in addition to their @
> counterparts, meaning that there's _more_ to learn
Why would you need to learn pure or nothrow in addition to their
@ counterparts?
> It's terrible for learning
No it isn't, less needs to be learned. You could think of the
non-@ variants as deprecated.
> and it's terrible for collaboration.
No more so than deciding on a variable naming or brace style.
> If we could agree on a set of changes to make that made all of
> this consistent, and we were willing to pay the cost of the
> breakage that would result, then that would be one thing, but
> optional syntax that looks like it should have a semantic
> difference when it doesn't is just going to make the confusion
> and questions worse, and it will add more fuel to the fire in
> code style arguments.
If you want to eliminate inconsistency while only paying the cost
of breakage once, then how about this:
Let # be a character, distinct from @, such that no legal
identifier can begin with #. Then introduce a new set of keywords
#pure, #nogc, #const, #nothrow etc, which can be used as
attributes. Deprecate the previous syntax. After this language
designers can add as many #attribute keywords as they want in the
future, since they will never clash with users' identifiers by
definition.
More information about the Digitalmars-d
mailing list