String interpolation, after a healthy debate on discord

Steven Schveighoffer schveiguy at gmail.com
Tue Dec 14 15:49:52 UTC 2021


On 12/14/21 6:15 AM, WebFreak001 wrote:
> On Tuesday, 14 December 2021 at 11:02:58 UTC, Ogi wrote:
>> On Tuesday, 14 December 2021 at 09:35:27 UTC, WebFreak001 wrote:
>>> no this proposal does not suggest moving any functionality into the 
>>> compiler. It suggests to add the istrings (tuples with header) as 
>>> described in the YAIDIP and have special function calling syntax 
>>> (`functionName"istring contents"`) that will call any function, that 
>>> accepts an istring as only argument.
>>
>> I was referring to YAIDIP. According to it, istring should be allowed 
>> in `mixin`, `pragma(msg)` and `assert` (missed this one). This 
>> requires reimplementing `text` in the compiler.

pramga(msg) and mixin do not need implementations of `std.conv.text`.

`pragma(msg, "x = ", x);` already works, just need it to ignore the header.

`mixin("int y = ", x + 5, ";")` already works, just need it to ignore 
the header.

assert would need some implementation of runtime output. But it's 
already in the library with `-checkaction=context`. It just needs to be 
exposed.

> 
> ah right you mean for the built-in istring usage in the compiler it 
> needs to be implemented.
> 
> I don't think it's such a big problem though, as the phobos 
> implementation would also just be: (a little simplified)
> 
> ```d
> auto text(istring...)(istring s) if (isIString!istring)
> {
>      return text(s[1 .. $]); // removes special __header, just 
> concatenate rest
> }
> ```

The DIP is designed specifically to work with `text` as-is. You don't 
need a special overload (because the header has a `toString` that 
returns ""). This was inherited from our DIP.

As for the specialized call syntax, I don't think we need it.

As for implementing some `text`-like thing in druntime, we already have 
some of it, I think it would be reasonable to include something in 
object.d that does a straightforward conversion when you don't want to 
use std.format. The only complex one is floating point. This all can be 
done AFTER the DIP is accepted anyway.

-Steve


More information about the Digitalmars-d mailing list