DIP 50 - AST macros
Rob T
alanb at ucora.com
Tue Nov 12 10:01:57 PST 2013
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
More information about the Digitalmars-d
mailing list