On Tuesday, 12 November 2013 at 11:06:17 UTC, Don wrote:
On Tuesday, 12 November 2013 at 09:55:20 UTC, Walter Bright
wrote:
I forgot to mention that "expression templates" can be used in
D in an equivalent manner that they are used in C++,
They are crippled compared to C++, because you have no control
over the return type of opCmp and opEquals, which means that
you can't have expression templates involving comparisons.
That's extremely limiting.
My feeling with AST macros is:
(1) AST macros are basically syntax sugar for string mixins.
The one and only thing that string mixins have in their favour,
is that they have almost no syntax. But that is actually a
*huge* plus.
Because it's syntax sugar, an AST macro syntax would be most
convincing if you took some existing string mixins from various
real projects, and show how beautiful they would become with
macros.
(2) The big functionality we don't have, is comprehensive
reflection. I'd like to see more thought in that area. It seems
challenging to define reflection in a way that doesn't expose
compiler internals.
The question I find particularly interesting is, "if we had
macros, would reflection look different?"
My personal main need for macros at this point, is to make up for
a lack of better reflection, but as has been pointed out, it's
not clear how macros would help anyway without access to the sort
of reflection that I'm currently lacking.
What we seem to be discussing, is the need to unify within D the
abilities to perform better reflection along with a means to
automate code generation during compile time. The current way
reflection and mixins are done, are totally different, almost
like two different languages with D, so it would be nice to have
a more unified system that more closely resembles D itself.
BTW, I agree with Walters concerns about AST macros. It would be
ugly to work with code that is not comprehensible due to over use
of macros that attempt to redefine the language into something
else. OTOH there's also significant advantages to be able to add
certain things into the language that are currently lacking. For
example, I've experimented with a method of implementing
co-routines that use switch statements, but it's very ugly to do
without macro support to the point of being impractical.
--rt