On Monday, 10 February 2014 at 15:35:00 UTC, Patrick D. Jeeves
wrote:
From what I can gather constructs like this just aren't allowed
in D, but I don't understand why, can anyone explain it please?
It just wasn't there but there's some people who think it would
be a good idea to add (including Walter I think) so it might be
in later.
What you can do is write it all inline, then do a create an
automatic documentation or interface file with dmd -D or dmd -H
which strips out most the function bodies.
The other thing I want to know is about the mixin() command,
and what the limitations of it are; I know it runs an
interpreted version of D
mixin basically copy/pastes the code inside right into the source
file then compiles it normally. The interpreted part is only
running the function to create teh code, but then the created
code is compiled normally.
So
mixin(foo());
foo() is interpreted, then the return value of it is compiled in
normally.
Is this because it isn't possible to do such things, or because
it would be rather pointless to do so compared to simpler
approaches, (in this case calling the C function output by
flex/bison).
I think it is just that nobody has tried yet. There are parser
generators that work at compile time in D though
https://github.com/PhilippeSigaud/Pegged for example