On Thursday, 5 December 2013 at 08:17:01 UTC, Jacob Carlborg wrote:
On 2013-12-04 19:55, Dmitry Olshansky wrote:

I'll just add a bit of my experience on this.

The coolest side of things is that you get to code a mini-compiler that has a very nice backend - D code. More then that you get optimizer and such for free. Then you only do the fun stuff - your frontend, and if it wasn't for CTFE speed/stability the experience is _very_ pleasant.

With AST macros it would be the same thing, just that you don't need to code the mini-compiler. It's already done for you.

Compare that with writing a fully fledged JIT compiler for say, regex patterns. Don't forget to account that you'd need to port it to X architectures times Y OS ABIs and generate code of at least moderate
quality.

JIT would have the benefit of being usable for patterns not known ahead
of time though.

AST macros would generate a new AST, no need to create a JIT compiler. The advantage of AST macros is that the compiler doesn't need to re-lex and re-parse the result.

I think that is of negligible benefit. There's not a whole of difference between manipulating an AST, vs manipulating text, and I'm confident that the time taken to do that is always going to be far more than the time required to lex and parse text.

What AST macros could provide is syntax sugar.
But IMHO there's a lot more to be gained from improvements to compile time reflection.


Reply via email to