[swift-evolution] [Review] SE-0089: Renaming String.init<T>(_: T)
L. Mihalkovic
laurent.mihalkovic at gmail.com
Sat May 21 02:46:05 CDT 2016
> On May 21, 2016, at 2:14 AM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>
>
>> on Fri May 20 2016, Kevin Ballard <swift-evolution at swift.org> wrote:
>>
>>> On Tue, May 17, 2016, at 08:32 PM, Chris Lattner via swift-evolution wrote:
>>> * What is your evaluation of the proposal?
>>
>> I'm a little nervous about this change, because converting things to
>> strings is a fairly basic operation and it should be immediately
>> obvious how to do that. That said, the described issues are pretty
>> bad, and I know I've had to carefully triple-check sometimes to make
>> sure I was calling the right initializer. So I'm +1 on the idea.
>>
>> That said, I don't like the name String(printing:). As others have
>> pointed out, it sounds like this is related to print(), but this
>> initializer does not actually print anything, it just converts any
>> value into a string. I also don't like String(describing:) because
>> it's too long. This initializer should be easier to call than
>> String(reflecting:). Also, in my experience this initializer is
>> particularly useful with code of the form `someOpt.map(String.init)`,
>> and saying `someOpt.map(String.init(describing:))` is annoyingly long.
>>
>> Given this, I'd like to suggest the simpler `String(from:)`. It's
>> short and generic, and it makes sense as it creates a String from any
>> value.
>
> Not too bad. I could live with it.
>
>> I'm also not a fan of Dave's suggestion of removing this initializer
>> entirely in favor of "\(foo)". This feels weird, and it also can't be
>> turned into a first-class function value.
>
> { "\($0)" }
>
> ?
Yeah... Perl is back..
Mr Swift o' please, can we have some syntax sugering for this? Please, o' please :)
>
>> I also think that this approach may encourage people to start using
>> the .description property instead, even though accessing this property
>> is discouraged.
>>
>>> * Is the problem being addressed significant enough to warrant a change to Swift?
>>
>> Yes.
>>
>>> * Does this proposal fit well with the feel and direction of Swift?
>>
>> Yes. Initializers that take one unlabeled argument are typically used
>> for full-width conversions, and I don't think this initializer
>> qualifies as a full-width conversion.
>>
>>> * If you have used other languages or libraries with a similar
>>> feature, how do you feel that this proposal compares to those?
>>
>> Some languages have a global function that does this, such as Python's
>> str(foo) or Haskell's `show`. Some languages have a method/property,
>> such as Obj-C (-description) and Ruby (foo.to_s(), though I believe
>> you can also say String(foo)). I'm not aware of any languages that
>> require string interpolation for this functionality. Keeping the
>> initializer and just giving it a label is similar to a global function
>> or to Ruby's String(foo). Removing the initializer in favor of just
>> just string interpolation does not compare to any language I know of.
>>
>>> * How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
>>
>> A quick reading of the proposal, and a reading of the review thread to date.
>>
>> -Kevin Ballard
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
> --
> -Dave
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
More information about the swift-evolution
mailing list