attributed string fast path equality performance improvements #1415
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Here is a small performance improvement to value-equality checking in
AttributedString
.When two
AttributedString
instances are identical we can returntrue
in constant-time: we do not need to check through all N characters.Currently the check for identity equality lives inside
Guts
.123 This is still constant-time… but we have the potential to move this check up sooner: directly in the==
operator onAttributedString
. This will look similar to what we already have in place forAttributedSubstring
.4Benchmarks show improvements close to two orders of magnitude increased throughput when our
AttributedString
instances are identical.Control: Equality Unique
Test: Equality Unique
Control: Equality Shared
Test: Equality Shared
Footnotes
https://github.com/swiftlang/swift-foundation/blob/swift-6.1.2-RELEASE/Sources/FoundationEssentials/AttributedString/AttributedString%2BGuts.swift#L77 ↩
https://github.com/swiftlang/swift-foundation/blob/swift-6.1.2-RELEASE/Sources/FoundationEssentials/AttributedString/AttributedString%2BGuts.swift#L84-L86 ↩
https://github.com/swiftlang/swift-foundation/blob/swift-6.1.2-RELEASE/Sources/FoundationEssentials/AttributedString/AttributedString%2BGuts.swift#L105 ↩
https://github.com/swiftlang/swift-foundation/blob/swift-6.1.2-RELEASE/Sources/FoundationEssentials/AttributedString/AttributedSubstring.swift#L79-L81 ↩