The state of string interpolation

Steven Schveighoffer schveiguy at gmail.com
Thu Dec 6 16:19:12 UTC 2018


On 12/6/18 4:01 AM, Dennis wrote:
> On Thursday, 6 December 2018 at 02:14:12 UTC, Neia Neutuladh wrote:
>> However, that would also force druntime to include formatting code 
>> that it currently lacks.
> 
> Jonathan Marler's implementation [1] has a really nice approach of 
> lowering interpolated strings to tuples. You can pass it to variadic 
> functions like `writeln` or `text` and bring your own formatting / 
> memory allocation schemes, giving better performance and flexibility.
> 
> [1] https://github.com/dlang/dmd/pull/7988

I supported the concept[1] back when I read it from Dmitry Olshansky[2].

If I had known about the debate on the PR I would have jumped in. But I 
don't have much to add. All that really dictates my views is the 
experience I've had with other languages. However, none of those other 
languages have the same concept that I know of -- they basically just 
create a string with toString-ing the interpolations.

With the concept of lowering to a tuple, I'd love to use such a thing 
for database queries.

For instance:

db.exec("UPDATE Foo SET a = ?, b = ?, c = ?, d = ? WHERE id = ?", aval, 
bval, cval, dval, id);

vs.

db.exec(i"UPDATE Foo SET a = $aval, b = $bval, c = $cval, d = $dval 
WHERE id = $id");

The mixin/library solution is much less approachable. What's awesome 
about the language solution is that it just works without much extra 
understanding and verbosity, and need for using mixins. mixins are cool, 
but are best tucked away behind templates or generative functions. They 
shouldn't seen much in user code. Saying we should use a library 
solution for this is like saying we can replace foreach usage with a 
library foreach that lowers to some for-loop and explicit delegates (or 
maybe a mixin?). Yes, it could be done. No, it shouldn't be done. This 
is one of those types of syntax sugar that should not be ignored.

+1000 from me, I'd love to see the PR merged, or the DIP created, 
whatever needs to happen.

-Steve

[1] https://forum.dlang.org/post/odb9hk$2jqm$1@digitalmars.com
[2] https://forum.dlang.org/post/ocut06$261n$1@digitalmars.com


More information about the Digitalmars-d mailing list