Skip to content

Reduce allocations in remaining ecosystem comparators #31

Description

@andrew

PR #30 removes temporary allocations from SemVer, RubyGems, and NuGet comparison. The same scanner and stack-buffer approach should help the remaining scheme-specific comparators.

Measured at b8f1741 with Go 1.26.5 on darwin/arm64 using representative version pairs:

  • PyPI: replace PEP 440 regexp captures and release/local splits, currently about 1.16 µs, 803 B, and 6 allocs/op
  • Maven: scan separators and digit/letter transitions without builders and temporary slices, currently about 757 ns, 1,392 B, and 20 allocs/op
  • ALPM: scan typed segments into stack-backed storage, currently about 487 ns, 768 B, and 10 allocs/op
  • Conan: replace recursive split-based parsing with views or stack-backed items, currently about 702 ns, 824 B, and 19 allocs/op
  • Gentoo and APK: scan underscore suffixes and dot-separated base components directly, currently about 180 ns, 160 B, and 4 allocs/op
  • OpenSSL: replace SplitN core parsing with direct indexes, currently about 102 ns, 96 B, and 2 allocs/op
  • IntDot: compare dot-separated numeric components without temporary slices, currently about 105 ns, 112 B, and 2 allocs/op

Each change should keep exported APIs and scheme ordering unchanged, add differential or parity coverage against current behavior, and include before/after -benchmem results. PyPI and Maven should use separate focused PRs because their ordering rules are more involved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions