On Sunday, 22 October 2023 at 23:44:34 UTC, Adam D Ruppe wrote:
> On Sunday, 22 October 2023 at 22:57:30 UTC, duckchess wrote:
> or improve the language, so we can express what we want in a library.
That's what the enhanced interpolation implementation does.
https://github.com/adamdruppe/interpolation-examples
Look down the examples here (and I have more coming as i find time to write them). How would you do them with your proposal?
/** make this work **/
writefln(mixin(`InterpolationHeader!("", "greeting", ", ", "name", "", "exclamation", "")(), "", greeting, ", ", name, "", exclamation, ""`));
/** so it becomes this **/
writefln(InterpolationHeader!("", "greeting", ", ", "name", "", "exclamation", "")(), "", greeting, ", ", name, "", exclamation, "");
/************************/
/** then add smtn to D to automatically mix in strings at the call side **/
mixin(string) t(string s)() {
// todo: code that actually generates the return string
return `InterpolationHeader!("", "greeting", ", ", "name", "", "exclamation", "")(), "", greeting, ", ", name, "", exclamation, ""`;
}
writefln(t!"$greeting, $name$exclamation");
/** turns into **/
writefln(mixin(`InterpolationHeader!("", "greeting", ", ", "name", "", "exclamation", "")(), "", greeting, ", ", name, "", exclamation, ""`));
/************************/
/** this is a sketch of how i'd like the default implementation for i to look **/
mixin(string) i(string s)() {
return q{(){
struct RESULT {
string toString() const { return "....."}
mixin(string) printfargs(){ return ".....");
mixin(string) seq(){ return `InterpolationHeader!("", "greeting", ", ", "name", "", "exclamation", "")(), "", greeting, ", ", name, "", exclamation, ""`;}
}
return RESULT();
}()}
}
writeln(i!"$greeting, $name$exclamation");
writefln(i!"$greeting, $name$exclamation".seq);
again, idk if this specific idea works, but this is how i'd imagine usercode to look like
writeln(i!"Hello, $name! I liked DIP $dipNumber a lot.");
string result = i!"$name! See that DIP $dipNumber is easy to convert to string.";
writefln(i!"$name has $$wealth:%0.2f".seq);
printf(i!"$name is $age years old.\n".printfargs);
writeln(tr!("I, $name, have a singular apple.", "I, $name, have %d apples.", count));
writeln(tr!("I, $name, have a singular apple.", "I, $name, have $count apples."));