Avatar
omochimetaru 1/25/2018 4:05 AM
// NOTE: Multi-segment expanders are (at least up til Unicode 10) always the // beginning of a normalization segment (i.e. they are starters).
4:05 AM
unicode10とか書いてあるしまさに絵文字結合とかが入った世代だろうか
4:06 AM
private func _compareStringsPathological( selfUTF16: UnsafeBufferPointer<UInt16>, otherUTF16: UnsafeBufferPointer<UInt16> ) -> _Ordering { var selfIterator = NormalizedIterator(selfUTF16) return selfIterator.compare(with: NormalizedIterator(otherUTF16) ) } (edited)
4:06 AM
いろんなファストパスこけた場合の最終汎用系がこれか
4:09 AM
そのIteartorの中で normalizeがされて・・・ internal func _tryNormalize( _ input: UnsafeBufferPointer<UInt16>, into outputBuffer: UnsafeMutableBufferPointer<UInt16> ) -> Int? { var err = __swift_stdlib_U_ZERO_ERROR let count = __swift_stdlib_unorm2_normalize( _Normalization._nfcNormalizer, input.baseAddress._unsafelyUnwrappedUnchecked, numericCast(input.count), outputBuffer.baseAddress._unsafelyUnwrappedUnchecked, numericCast(outputBuffer.count), &err ) guard err.isSuccess else { // The output buffer needs to grow return nil } return numericCast(count) }
4:09 AM
__swift_stdlib_unorm2_normalize まできた。
4:10 AM
あれ
4:10 AM
unorm2_normalize
4:10 AM
の呼び出しに行っちゃった
4:10 AM
これはICUだから
4:10 AM
ICUに依存しない
というわけではない?
4:11 AM
ICU自体は使うけど、ソート順序に関しては依存しないってことかな?
4:11 AM
Unicodeのnormalizeとcollationは違う概念っぽいな
4:13 AM
normalizeのほうが小さい道具なら、ICUに全部任せてたのを一部Swiftで自前で書いたという感じだけど、
4:13 AM
それでパフォーマンスが出てないなら、ロジックが悪いか、SwiftがまだC++に追いつけて無い部分があるのか
4:14 AM
ほとんどのテストが80~90%ぐらいに性能低下しちゃってるんだなあ