Skip to content

perf: reduce memory allocation#26

Merged
Brooooooklyn merged 7 commits intomainfrom
perf/memory-allocate
Oct 21, 2025
Merged

perf: reduce memory allocation#26
Brooooooklyn merged 7 commits intomainfrom
perf/memory-allocate

Conversation

@Brooooooklyn
Copy link
Copy Markdown
Collaborator

No description provided.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Oct 20, 2025

CodSpeed Performance Report

Merging #26 will not alter performance

Comparing perf/memory-allocate (6b65747) with main (98e1044)

Summary

✅ 19 untouched

Copy link
Copy Markdown
Owner

@hyf0 hyf0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seem no change. Do we want to merge it?

@Brooooooklyn Brooooooklyn merged commit efd5ce4 into main Oct 21, 2025
5 checks passed
@github-actions github-actions bot mentioned this pull request Oct 20, 2025
graphite-app bot pushed a commit to rolldown/rolldown that referenced this pull request Feb 23, 2026
## Summary

Bump `sugar_path` from 1.2.1 to 2^

### What changed in sugar_path 2.0

The 2.0 release is focused on reducing allocations in hot paths. The key optimizations:

- **`normalize()` returns `Cow<'_, Path>` instead of `PathBuf`** — a `needs_normalization()` fast-path check (using `memchr`) detects already-clean paths and returns `Cow::Borrowed` with zero allocation ([#32](hyf0/sugar_path#32))
- **`absolutize()` / `absolutize_with()` return `Cow<'_, Path>`** — same idea: already-absolute clean paths are returned borrowed ([#34](hyf0/sugar_path#34))
- **`memchr`-accelerated fast path for `relative()`** — replaces the component-iterator approach with SIMD-accelerated `/` scanning, avoids the `absolutize()` → `current_dir()` syscall when both paths are already absolute, and uses `SmallVec<[&str; 8]>` to stay on the stack ([#27](hyf0/sugar_path#27))
- **Reduced allocations across the board** — reuse buffers, `SmallVec` for component lists, avoid `collect()` into `Vec` ([#26](hyf0/sugar_path#26))

### Breaking change

`normalize()`, `absolutize()`, and `absolutize_with()` now return `Cow<'_, Path>` instead of `PathBuf`. Call sites that need an owned `PathBuf` require `.into_owned()`, and chained operations like `.join().normalize().to_slash_lossy()` need to be split so the intermediate `Cow` lives long enough.

## Test plan

- [x] CI passes (same API surface, just `Cow` unwrapping at call sites)
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.

2 participants