On Monday, 8 January 2024 at 14:34:26 UTC, Bruce Carneal wrote:
> On Monday, 8 January 2024 at 14:09:09 UTC, DrDread wrote:
> On Sunday, 7 January 2024 at 18:51:40 UTC, Walter Bright wrote:
> ...
and you still misunderstand DIP 1036. which is the whole problem here. and we've told you repeatedly that you misunderstand it. please just go and look at the implementation.
I read a draft 1036 spec from Atila on his publicly accessible github here:
https://github.com/atilaneves/DIPs/blob/string-interpolation/Interpolation.md
It might not still be up but I found it approachable. Again, though, it's a draft and might not match the code (or the actual intent for that matter). Still, a useful possibility for those who prefer not to look at code in the early going.
I really wish we didn't have to force parentheses in $()
if the only thing inside the expression is an alphanumeric variable name.
There's the example of:
enum result = text(
i"@property bool $(name)() @safe pure nothrow @nogc const {
return ($(store) & $(maskAllElse)) != 0;
}
@property void $(name)(bool v) @safe pure nothrow @nogc {
if (v) $(store) |= $(maskAllElse);
else $(store) &= cast(typeof($(store)))(-1-cast(typeof($(store)))$(maskAllElse));
}\n"
);
But why not take it a step further and allow this:
enum result = text(
i"@property bool $name() @safe pure nothrow @nogc const {
return ($store & $maskAllElse) != 0;
}
@property void $name(bool v) @safe pure nothrow @nogc {
if (v) $store |= $maskAllElse;
else $store &= cast(typeof($store))(-1-cast(typeof($store))$maskAllElse);
}\n"
);
To me that's more readable then the first example where I have to count the closing parens to figure out where an expression starts and ends.
The $()
should just be an escape hatch when you need more complex expressions. For example:
int foo = 2;
int bar = 4;
writeln(i"$foo + $bar is $(foo + bar)"); // 2 + 4 is 6
I haven't read any rationale why parentheses are absolutely required in any of the DIPs I've skimmed through.