On Tuesday, 27 January 2015 at 18:21:37 UTC, Nick Treleaven wrote:
On 27/01/2015 18:01, Jonathan Marler wrote:
On Tuesday, 27 January 2015 at 17:18:11 UTC, Nick Treleaven
wrote:
On 27/01/2015 16:49, Jonathan M Davis via Digitalmars-d wrote:
abstract also applies to classes, as does final.
Yes, but they actually only affect the *functions* belonging
to the
class, not the variables. A class is not a variable.
I think you may have missed the point. I believe what
Jonathan is
saying is that if you turn abstract into @abstract then you
have to
consider how to solve the "abstract class" issue. Do you
change it to:
@abstract class ?
Yes, because it affects the class's functions, not its variable
members.
Same thing with final. Since the same keywords are used in a
lot of
different contexts, if you change how it is used in one
context then
it's going to be inconsistent with how it's used in the other
contexts
(like with a function or a class). Then if you want
consistency (which
is the point of why we are discussing this change in the first
place)
you have to change every context it is used in. If you follow
through
with your proposal, you'll end up putting a '@' character
before almost
every keyword in the language
In that case I don't think you've really grokked my proposal.
It only requires 5 changes to attributes for consistency (and
that's counting @pure and @nothrow).
Problem Summary: Using an '@' symbol for some function attributes
and not others is weird.
void foo() pure @safe const;
Current Reason: keywords don't use a '@' and non-keywords use a
'@'
Your Solution: Have attributes that apply to variables use no '@'
and all other attributes use a '@'.
You've changed the cutoff from "keywords" to "whether or not they
apply to variables". How does this solve the original problem
(stated above)?
void foo() @pure @safe const;
// OR
public @pure final @safe foo();
How is this more consistent? This doesn't solve the problem is
just shuffles around the cases when we use '@' and when we don't.
Note: not to mention that it still looks horrible to use '@'.
There's no reason the language needs to require a '@' on a
keyword. The only reason is to make things consistent but if
you're not making things more consistent, as shown above.