Skip to content

Merge changes on release/1.2 to main branch#487

Merged
lorentey merged 7 commits intoapple:mainfrom
lorentey:merge-1.2-to-main
Jun 24, 2025
Merged

Merge changes on release/1.2 to main branch#487
lorentey merged 7 commits intoapple:mainfrom
lorentey:merge-1.2-to-main

Conversation

@lorentey
Copy link
Copy Markdown
Member

This is a regular maintenance merge to pick up recently landed changes.

Checklist

  • I've read the Contribution Guidelines
  • My contributions are licensed under the Swift license.
  • I've followed the coding style of the rest of the project.
  • I've added tests covering all new code paths my change adds to the project (if appropriate).
  • I've added benchmarks covering new functionality (if appropriate).
  • I've verified that my change does not break any existing tests or introduce unexplained benchmark regressions.
  • I've updated the documentation if necessary.

lorentey added 7 commits June 17, 2025 17:27
BigString sometimes miscounted distances in its character view due to alignment issues. Resolve this by overhauling distance calculations in the character metric:

- Introduce a `prefixSize` function in `_StringMetric`, distinct from `distance`.
- In the metric-agnostic index distance algorithm, use `prefixCount` to avoid double-counting characters that cross (or end on) chunk boundaries.
- Simplify `_StringMetric.distance` by requiring that `start <= end`.
- Crucially, change character-index operations to start by rounding each input index down to the nearest character break.
[BigString] Fix character indexing operations
This implements a roughly 40-45% improvement for distance measurements over `BigString`’s character and Unicode Scalar views.

Interestingly, we don’t see an improvement for UTF-16 views — I’m guessing this is due to String’s breadcrumbing. (And it will go away with the upcoming UTF8Span-ification of this type.)

The benchmarks I added only show an improvement for multi-chunk big string instances, but this is merely an artifact of the specific algorithm that is being measured — for single-chunk strings, the existing measurement method is already optimal, so the new heuristic never triggers for this particular payload.
[BigString] Harvest some low-hanging performance fruit
@lorentey
Copy link
Copy Markdown
Member Author

@swift-ci test

@lorentey lorentey merged commit 437c517 into apple:main Jun 24, 2025
22 checks passed
@lorentey lorentey deleted the merge-1.2-to-main branch June 24, 2025 23:37
@lorentey lorentey added this to the 1.3.0 milestone Sep 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant