Special Code String for mixins

Inquie via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 15 06:55:01 PDT 2017


On Wednesday, 15 March 2017 at 13:50:28 UTC, Inquie wrote:
> I hate building code strings for string mixins as it's very 
> ugly and seems like a complete hack.
>
> How bout, instead, we have a special code string similar to a 
> multiline string that allows us to represent valid D code. The 
> compiler can then verify the string after compilation to make 
> sure it is valid D code(since it ultimately is a compile time 
> constant).
>
> e.g.,
>
> string s = "smile";
> enum code1 = @#
> void happyCode = "Makes me @@s@@";
> #@
>
> enum code2 = code1 ~ @#
> int ImThisHappy = @@s.length@@;
> #@
>
> mixin(code);
>
> or
>
> mixin(code.stringof); // possible to convert code string to a 
> string and vice versa.
>
>
> or whatever syntax one thinks is better. The point is that the 
> code string is specified different and then is no longer 
> ambiguous as a normal string. Compilers and IDE's can make more 
> informed decisions.
>
> There might be a much better way, but something should be done 
> to clean up this area of D. It is a mess to have to use string 
> building to create code. (it's amazingly powerful, but still a 
> mess)

Alternatively, maybe one could specify code in a template like 
mechanism:

template Code(string s)
{
     void happyCode = "Makes me "~s;
     int ImThisHappy = s.length;
}

then turn the template in to a code string:

Code("smile").stringof = `\tvoid happyCode = "Makes me 
"~s;\n\tint ImThisHappy = s.length;\n`;

and so

mixin(Code("smile").stringof); would do the same as the first 
example.

The only problem I see is passing variables might become a 
mess... but still better than original.




More information about the Digitalmars-d mailing list