Some more template syntax sugar
Reiner Pope
reiner.pope at REMOVE.THIS.gmail.com
Fri Sep 1 03:10:49 PDT 2006
I've thought about this ambiguity and still come to not much more of a
conclusion. However, a few thoughts:
(just to clarify my naming, let's call the current system (parameters
without names) nameless parameters, and my suggestion (implicit
templating) typeless parameters)
1. Nameless parameters are a very small syntactical sugar as opposed to
typeless parameters, and I assert that we can do without them. Most of
the time, you should name your parameters anyway, so the caller can have
a better idea of what they are used for, and if you decide that it is
just way to much to type, then you can get away with only two more
characters for each parameter:
int foo(int, int);
becomes
int foo(int a, int b);
which really isn't much more to type.
2. It would be possible to do a small modification of the typeless
parameter syntax to make it grammatically distinct from typeless
parameters. For instance, add a '@' to make it clear:
auto sqr(@x) {...}
While, on the surface, this seems the rights solution, I think it
creates a similar mental block as we get with lazy parameters: even though
foo( {x();} );
is only three characters more than
foo( x() );
you will get people used to 'proper' lazy evaluation (Smug Lisp Weenies)
who say that this means D doesn't *really* support it. My point: by
using the same typeless syntax that dynamically typed languages use, it
appeals much more to fans of those languages.
I think that an unmodified syntax is the best approach from a niceness
point of view, and if the language were being designed afresh, I would
go for that and ban nameless parameters, since I've already said they
are hardly useful.
However, given that we are not starting afresh, there may be some code
out there which uses nameless parameters. I would guess that that code
doesn't appear much, and the only places I can imagine it being is in
interfaces and in extern declarations. Since interfaces can't have
templates, this would be flagged as an error at compile-time, making it
easy to find and solve. For extern declarations, I don't know whether
templates are permitted, so this *may* cause a problem.
Thoughts, anyone?
Cheers,
Reiner
More information about the Digitalmars-d
mailing list