[swift-evolution] [Draft proposal] Faster/lower-level external String initialization

Zach Waldowski zach at waldowski.me
Mon Feb 1 22:53:09 CST 2016


That'd seem reasonable.

I guess I'm not entirely sold on the benefit of the extra method here,
and all the weight on maintenance that'd entail. Obviously I get the
benefit of skipping the storage reservation, but I can't imagine a
scenario where building something up using
`appendContentsOf(_:encoding:)` would be that much better then plumb
concatenation. I'd love to hear an example, though.

Cheers!
Zach Waldowski
zach at waldowski.me

On Mon, Feb 1, 2016, at 08:36 PM, Charles Kissinger via swift-evolution
wrote:
> 
> > On Feb 1, 2016, at 2:07 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> > 
> > 
> > on Mon Feb 01 2016, Zach Waldowski <swift-evolution at swift.org> wrote:
> > 
> >> Due to the semantics of _StringCore and _StringBuffer (as far as I
> >> understand them), such a method would not be more efficient than
> >> creating another String with the new initializer and concatenating the
> >> two, and would require more significant plumbing changes to
> >> _StringBuffer.
> > 
> > We are very interested in making significant plumbing changes to String, FWIW.
> > 
> 
> In that case, perhaps it would make sense to add String.append() for code
> unit sequences over the exiting plumbing just for completeness of the
> API, on the assumption that efficiency would come later when String gets
> its makeover.
> 
> —CK
> 
> >> 
> >> 
> >> It would be good to shop around for this proposal, though; maybe if
> >> someone on the core team wants to chime in.
> >> 
> >> Cheers,
> >> Zachary Waldowski
> >> zach at waldowski.me
> >> 
> >> On Mon, Feb 1, 2016, at 03:07 AM, Charles Kissinger wrote:
> >>> It occurred to me that this proposal provides a way to efficiently
> >>> initialize Strings from UTF code unit sequences, but it doesn’t provide a
> >>> way to *append* code unit sequences to existing strings. String has an
> >>> existing method to append Character sequences:
> >>> 
> >>> String.appendContentsOf<S : SequenceType where S.Generator.Element ==
> >>> Character>(_: S)
> >>> 
> >>> The equivalent for code units would presumably be:
> >>> 
> >>> String.appendContentsOf<S : SequenceType, Encoding: UnicodeCodecType
> >>> where Encoding.CodeUnit == Input.Generator.Element>(_: S, encoding:
> >>> Encoding.Type)
> >>> 
> >>> Is there any interest in adding that to the proposal? It would only have
> >>> a lot of value if it could be implemented in a more efficient way than
> >>> just calling String.Append() for each decoded Character. From looking at
> >>> the code, that might not be straightforward.
> >>> 
> >>> —CK
> >>> 
> >>>> On Jan 26, 2016, at 3:14 PM, Zach Waldowski via swift-evolution <swift-evolution at swift.org> wrote:
> >>>> 
> >>>> Since this seems to have gone quiet, and the code was already done, I've
> >>>> posted the PR to Swift itself:
> >>>> 
> >>>>  https://github.com/apple/swift/pull/1109
> >>>> 
> >>>> The existing proposal PR:
> >>>> 
> >>>>  https://github.com/apple/swift-evolution/pull/101
> >>>> 
> >>>> -- 
> >>>> Sincerely,
> >>>>  Zachary Waldowski
> >>>>  zach at waldowski.me
> >>>> 
> >>>> On Wed, Jan 20, 2016, at 06:08 PM, Zach Waldowski via swift-evolution
> >>>> wrote:
> >>>>> Thanks, Dave.
> >>>>> 
> >>>>> I definitely wasn't hard to convince on this. The change has already
> >>>>> been made to the proposal, its PR, and the pending PR to the stdlib.
> >>>>> 
> >>>>> Cheers!
> >>>>> Zach Waldowski
> >>>>> zach at waldowski.me
> >>>>> 
> >>>>> On Wed, Jan 20, 2016, at 01:23 PM, Dave Abrahams via swift-evolution
> >>>>> wrote:
> >>>>>> 
> >>>>>> on Fri Jan 15 2016, Zach Waldowski via swift-evolution
> >>>>>> <swift-evolution-m3FHrko0VLzYtjvyW6yDsg-AT-public.gmane.org> wrote:
> >>>>>> 
> >>>>>>> Charles -
> >>>>>>> 
> >>>>>>> I shared the same concern, and mention them in the proposal. I thought
> >>>>>>> `decode(_:as:)` to be too simple to the point of being
> >>>>>>> non-descriptive,
> >>>>>> 
> >>>>>> The names of methods don't need to be descriptive.  It's the use-sites
> >>>>>> (and secondarily, declarations) that need to be clear.  Trying to make
> >>>>>> the names of methods descriptive by themselves just hurts readability at
> >>>>>> the use-site.
> >>>>>> 
> >>>>>> -Dave
> >>>>>> 
> >>>>>> _______________________________________________
> >>>>>> 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
> >>>> _______________________________________________
> >>>> 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
> > 
> > -- 
> > -Dave
> > 
> > _______________________________________________
> > 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


More information about the swift-evolution mailing list