[swift-evolution] [Review] SE-0089: Renaming String.init<T>(_: T)

Dmitri Gribenko gribozavr at gmail.com
Fri May 20 03:06:12 CDT 2016


On Thu, May 19, 2016 at 6:00 PM, Brent Royal-Gordon via
swift-evolution <swift-evolution at swift.org> wrote:
>> I'm posting this on behalf of Dmitri Gribenko, and Max Moiseev, and
>> myself.
>>
>> We would like to accept the proposal with one modification: rather than
>> add an argument label, we'd like to drop the String initializer
>> altogether, making `"\(expression)"` the standard way to get a string
>> representation of `expression`.
>
> Given how complicated the StringInterpolationConvertible protocol is, I'm not sure it's a good idea to invoke all of that machinery merely to convert an expression to a string. I mean, you end up with code like:
>
>         String(stringInterpolation:
>                 String(stringInterpolationSegment: ""),
>                 String(stringInterpolationSegment: expression),
>                 String(stringInterpolationSegment: "")
>         )
>
> That seems like a lot of code to generate for such a simple task.
>
> (And you can have those empty segments over my dead body—they're very important to a lot of interpolation use cases, because they allow you to distinguish between the literal and interpolated segments. If you want to design a different mechanism that's more efficient and equally capable, well, I'm happy to talk about improving StringInterpolationConvertible any time you are, but it'll definitely be opening a can of worms.)

We will add a special case in the optimizer to fold these empty
segments when interpolation is invoked on String.  It won't affect
other types.

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/


More information about the swift-evolution mailing list