Skip to content

UPSTREAM PR #2546: Remove winnow from gix-actor public API#51

Open
loci-dev wants to merge 3 commits intomainfrom
loci/pr-2546-fix-2545
Open

UPSTREAM PR #2546: Remove winnow from gix-actor public API#51
loci-dev wants to merge 3 commits intomainfrom
loci/pr-2546-fix-2545

Conversation

@loci-dev
Copy link
Copy Markdown

Note

Source pull request: GitoxideLabs/gitoxide#2546

It's too easy to not detect winnow updates as a breaking change, and then make patch releases that break existing builds.
More importantly, while at it, remove the notion of parser combinators as I found them hard to maintain, and return to simple imperative cursor-oriented parsers.

Tasks

Benches

It turns out that removing winnow leads to a simpler but faster parser implementation, and it's probably one that I can maintain as well.

CommitRef(sig)          time:   [573.77 ns 575.62 ns 577.64 ns]
                        change: [−1.8410% −1.3568% −0.9145%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high mild

CommitRefIter(sig)      time:   [603.76 ns 605.74 ns 607.76 ns]
                        change: [−7.0691% −6.7265% −6.3744%] (p = 0.00 < 0.05)
                        Performance has improved.

TagRef(sig)             time:   [51.190 ns 51.333 ns 51.499 ns]
                        change: [−41.190% −40.928% −40.650%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) low mild

TagRefIter(sig)         time:   [71.008 ns 71.387 ns 71.779 ns]
                        change: [−38.161% −37.832% −37.484%] (p = 0.00 < 0.05)
                        Performance has improved.

TreeRef()               time:   [59.948 ns 60.157 ns 60.390 ns]
                        change: [−2.1089% −1.6804% −1.2364%] (p = 0.00 < 0.05)
                        Performance has improved.

TreeRefIter()           time:   [26.899 ns 27.041 ns 27.207 ns]
                        change: [−2.7957% −1.1482% +0.2270%] (p = 0.16 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

gix-config

promising as well

GitConfig large config file
                        time:   [18.956 µs 19.023 µs 19.092 µs]
                        change: [−13.068% −12.417% −11.835%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe

Parser large config file
                        time:   [17.319 µs 17.377 µs 17.436 µs]
                        change: [−41.547% −31.527% −20.769%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  5 (5.00%) high mild
  2 (2.00%) high severe

codex and others added 3 commits April 27, 2026 13:15
Doing so adds conformity with Git, but also simplifies the parser
which now only parse hex-hashes of a single valid length.

Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
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.

3 participants