On Monday, 22 May 2017 at 15:26:26 UTC, Andrei Alexandrescu wrote:
Yah, didn't want to overload the article (or the discussion) with the expression/statement distinction. -- Andrei
Yeah, the details might be too much for a general audience (and I realize you know this, I'm commenting more for other readers who might be interested), but I do think this illustrates an important point for anyone who wants to use mixin: it is similar to, but not exactly like copy/pasting code into the source.
mixin parses a piece of code, then pastes the *AST node*, not the source code, into the tree where the mixin is found. That's why the semicolon is required in the statement context - it needs a complete branch that actually fits the AST at the moment, not just a string that is pasted into the source code at the location.
So similar enough to copy/paste to get someone quickly started playing with code generation, but this key difference is needed to really understand it.