On Tuesday, 5 March 2013 at 12:40:32 UTC, Artur Skawina wrote:
One problem with string-based DSLs is scoping - they only work
properly when mixed in into the current scope.
auto c = mixin(myDSL!"a?:+:b");
mixin myDSL!("c", "a?:+:b");
mixin (myDSL!("c", "a?:+:b"));
// etc
is sometimes enough, but often the code would be clearer w/o
the mixin.
Perhaps the mixin (@mixin?) could be moved to a function's
signature as an attribute? Then the compiler knows it's going to
be mixed in and removes the need to do it yourself; Mind you it
would have to return a string to be valid; Or it would be part of
the base signature instead.
string myDSL(string) @mixin;
mixin string myDSL(string);
//now without the mixin..
auto c = myDSL!("a?:+:b");
This seems like it would be an easy thing to add and shouldn't
complicate the language any.