Interpolated strings

bpr via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 18 20:49:09 PDT 2017


On Wednesday, 19 April 2017 at 00:30:31 UTC, Walter Bright wrote:
> I'm not saying you cannot do cool and useful things with AST 
> macros. My position is it encourages absolutely awful code as 
> (usually inexperienced) programmers compete to show how clever 
> their macros are.

I'd think that that's a problem with community coding standards.

> The language gets balkanized into a collection of dialects that 
> are unrecognizable across user groups.

I'm pretty sure that hasn't happened with every language that 
supports macros. Even in the case of Scheme, I don't think it's 
the macros that are responsible for all of the dialects. It's the 
fact that the core language never includes enough (no records, 
exceptions, modules, ...) so every group adds their own versions 
of these features. Maybe if macros didn't make that easier then 
Schemers would have added those things to the core, but that's a 
counterfactual that I don't find convincing.

> As a compiler dev who gets stuck figuring out users' bug 
> reports, dealing with templates is bad enough (the first thing 
> I do with a bug report is redo it to remove all the templates). 
> I do not want to deal with some custom syntax. If I may pull 
> the "I'm older" card, programmers will find as they gain 
> experience that the AST macros are just not worth it.

Some programmers will not find that. Others will find that other 
features you value are just not worth it. There are absolutely no 
categorical statements. :-)

> This disastrous state of affairs has occurred with every 
> language that supports macros.

I don't think I've ever heard from Common Lisp, Scheme or Clojure 
programmers that they'd like to remove macros from their 
respective languages for the reasons you mention. I don't see the 
disasters there. The Julia folks looked at the Lisp experience 
and decided to include macros.

Both Rust and Nim support macros. Scala too. Not long enough for 
the disaster yet?

It's certainly not all roses, and writing and debugging macros 
can be a PITA. I try to avoid them, and consider them a tool of 
last resort. But they're very powerful, and sometimes I'm not 
smart enough to figure out how to do what I want cleanly with 
less powerful features.

> If you want a nauseous example, check out the Boost C 
> preprocessor metaprogramming library. Or C++ expression 
> templates - so cool, and yet so utterly wretched.

Have you checked out examples of macros that are not so 
nauseating? I find Nim decent, and of course the Lisps have a 
long history of macrology. I think you're drawing a view of 
macros from cpp, and MASM, and such, and not so much from the 
Lisp family, or Nim. cpp macrology is very different!

D is interesting to me mostly because of it's powerful templates 
and CTFE. It seems a shame (to me, obviously) that such a 
powerful static metaprogramming feature as macros will not be a 
part of D, but it's your language!




More information about the Digitalmars-d mailing list