On 2017-03-15 13:50:28 +0000, Inquie said:
I hate building code strings for string mixins as it's very ugly and
seems like a complete hack.
...
Even a bit old, I would like to pick-up this topic, as I totally agree
with the statement.
Thinking this a bit further, it would be very nice to have a way to
specify DSL inside D code, without having to fallback to strings.
Some (not fully thought through) ideas:
1. Why not use something like: mixin {...} and have normal D code
between the braces? This D code is implicitly converted to a string and
used accordingly. Variables etc. can all be used and have scope rules
like D with the mixing {...} scope being the top-level scope for this
code-block. Inside the mixin scope an AST could be build, which is than
used as return value.
2. For a DSL two things are necessary: A parser for the DSL and an
interface to access D identifiers. Something like: dsl (myparser,
d_id1, d_id2, ..., d_idN) {... my-dsl-code ...} Inside the DSL parser I
get access to the listed D identifiers while I'm mostly free to design
the syntax of my DSL code as I like.
Being able to switch to a fitting syntax for things like database
access, declarative GUIs etc. can make the codebase so much more
maintainable than having to stick to the main language syntax.
There are very few languages that care about proper and simple DSL
handling, IMO a much underestimated design principle.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster