What are AST Macros?
Cym13
cpicard at openmailbox.org
Mon Apr 9 16:39:24 UTC 2018
On Monday, 9 April 2018 at 15:30:33 UTC, Stefan Koch wrote:
> On Friday, 6 April 2018 at 21:45:45 UTC, Zach Tollen wrote:
>>
>> I think Walter's reason was that such macros would hide too
>> many idiosyncrasies in how they were programmed, such that a
>> lot of code which seems simple on the surface will actually
>> obfuscate complicated and arbitrary macro-programming
>> patterns. Thus, code that uses them will become much less
>> maintainable, because it is liable to do so many different and
>> hidden things. Also, the tasks for which AST-macros would
>> typically be used are already largely accommodated by
>> templates and other features. Thus, the real need for them
>> isn't that high.
>
> I think it's time to revisit this.
>
> The reason being that templates are only well suited to very
> specific types of meta-programs which have a low degree of
> parameterization and a low degree of abstraction.
>
> Using templates to introspect and manipulate types is like
> using a hammmer's flat back to remove a nail.
> It _can_ be done but with an absurd amount of work.
> You just have to remove all of the wall around the nail by
> pounding it until the wall has around the nail is disintegrated
> :)
>
> This is not an exaggeration.
>
> Templates used for introspection (or anything else really
> that's modestly complex) are equally hard to reason about for
> compilers and for programmers. I guess programmers have an
> advantage when it comes to _efficient_ pattern recognition.
Wouldn't AST macros require either to standardize (and freeze)
AST representation within the compiler or to maintain an equally
frozen alternate representation to be exposed? I can't see how
that wouldn't make the compiler's development slower since all of
a sudden changing the internal representation would impact user
code, especially given the low number of breaking changes that
are accepted today.
I have little experience with AST macros outside Lisp where its
homoiconicity avoids the issue almost completely so pardon the
naive question.
More information about the Digitalmars-d
mailing list