[swift-evolution] [Pitch] Improve String Literals

Tony Allevato tony.allevato at gmail.com
Tue May 16 15:27:53 CDT 2017


On Tue, May 16, 2017 at 1:25 PM David Hart <david at hartbit.com> wrote:

> The problem I see is that + is an operator of the Standard Library and not
> part of the core language. I wouldn’t want + to sometimes to be a runtime
> operation and other times a compile-time operation. No, I really think we
> need strong language support here.
>

Why not? Compile-time concatenation of string literals delimited by `+`
sounds like a perfectly reasonable compiler optimization.

Your argument would also state that the compiler should not do constant
folding like turning `5 + 7` into `12`, would it not? What makes that
situation different?



>
> On 16 May 2017, at 22:20, Tony Allevato via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> I agree with Ben—this is something that should just work for all string
> literals, and those protocols shouldn't be reasons to introduce a different
> syntax. It would be even more confusing for users to have to understand
> under which contexts they could use either `+` or juxtaposition and under
> which contexts they could *only* use juxtaposition.
>
>
> On Tue, May 16, 2017 at 12:28 PM Ben Rimmington via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>>
>> > On 16 May 2017, at 16:36, Gwendal Roué wrote:
>> >
>> >> Le 16 mai 2017 à 16:58, Tony Allevato <tony.allevato at gmail.com> a
>> écrit :
>> >>
>> >> Regarding the C/Objective-C syntax, what would be the advantages over
>> concatenating the strings with `+`?
>> >
>> > The support for ExpressibleByStringLiteral and
>> ExpressibleByStringInterpolation protocols.
>>
>> Would it be possible to have compile-time concatenation of *all* string
>> literals using the `+` operator?
>>
>>         // Written as:
>>         @available(*, unavailable, message: "Long strings can be bro" +
>>                                             "ken into two or more
>> pieces.")
>>         // Compiled as:
>>         @available(*, unavailable, message: "Long strings can be broken
>> into two or more pieces.")
>>
>> This could also be used with types such as StaticString, which don't have
>> their own `+` operator.
>>
>>         // Written as:
>>         let s: StaticString = "Long strings can be bro" +
>>                               "ken into two or more pieces."
>>         // Compiled as:
>>         let s: StaticString = "Long strings can be broken into two or
>> more pieces."
>>
>> -- Ben
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170516/7224c3e8/attachment.html>


More information about the swift-evolution mailing list