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.


Reply via email to