[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