Skip to content

chore(deps): bump optimized go-ruby-* stdlib pins (regexp/json/prime/base64/set/complex/rational/ipaddr/stringio/bigdecimal/digest/zlib) - #123

Merged
tannevaled merged 1 commit into
mainfrom
chore/bump-optimized-stdlib-pins
Jul 3, 2026
Merged

tannevaled merged 1 commit into
mainfrom
chore/bump-optimized-stdlib-pins

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

Bumps the pseudo-version pins for the go-ruby-* stdlib libraries that were optimized to beat MRI+YJIT, so the interpreter path inherits the wins.

Pins bumped (9)

lib old new optimization
regexp fa3d6604e1ee c52ca89ccd08 match + compile
json 96013117f0d5 3c4f2e0302d2 parse (no count pre-scan)
prime 9274dca78d88 08f6fe218cd4 prime?
base64 5dec54f20f53 2194be98969e decode
set ab6a8a92a910 246794df3ec2 specialized hash
ipaddr 78ca85dc054b c9957c9959e1 native u128
bigdecimal 660c01ff39c4 06e4422c5207 alloc
digest e22d22431111 4332315c5957 wrapper
zlib dbf176c108fc ca391423d5da crc32

Transitive: go-simd/base64 bumped, go-simd/adler32 added (pulled by the optimized base64/zlib libs).

Not bumped

complex, rational, stringio are implemented natively in rbgo (no go-ruby-* module is imported for them), so there is no pin to bump.

json Builder n=0 concern

The parser no longer pre-scans element counts, so Builder.BeginArray/BeginObject's n size-hint can now be 0. The binding uses make([]Value, 0, n), which is valid for n == 0 (the slice simply grows on append) — no code change required.

Verification

  • GOWORK=off go build ./... && go vet ./... clean
  • go test ./... (incl. internal/vm bindings, run with -count=1) all green
  • Frozen prelude regenerated — no drift (only go.mod/go.sum changed)
  • Differential oracle (rbgo vs MRI 4.0.5 / JRuby / TruffleRuby) over the conformance batches: 0 divergences
  • Focused rbgo-vs-MRI spot check across all 9 optimized libs: 17/17 identical

The interpreter runs real Ruby identically.

🤖 Generated with Claude Code

…base64/set/complex/rational/ipaddr/stringio/bigdecimal/digest/zlib)

Bump the pseudo-version pins for the go-ruby-* stdlib libraries that were
optimized to beat MRI+YJIT, so the interpreter path inherits the wins:

  regexp     fa3d6604e1ee -> c52ca89ccd08  (match + compile)
  json       96013117f0d5 -> 3c4f2e0302d2  (parse; Builder no longer pre-scans counts)
  prime      9274dca78d88 -> 08f6fe218cd4  (prime?)
  base64     5dec54f20f53 -> 2194be98969e  (decode)
  set        ab6a8a92a910 -> 246794df3ec2  (specialized hash)
  ipaddr     78ca85dc054b -> c9957c9959e1  (native u128)
  bigdecimal 660c01ff39c4 -> 06e4422c5207  (alloc)
  digest     e22d22431111 -> 4332315c5957  (wrapper)
  zlib       dbf176c108fc -> ca391423d5da  (crc32)

Transitive: go-simd/base64 bumped, go-simd/adler32 added (pulled by the
optimized base64/zlib libs).

complex/rational/stringio are implemented natively in rbgo (not imported as
go-ruby-* modules), so there is no pin to bump for those.

The json Builder size-hint concern (BeginArray/BeginObject n may now be 0) is
a no-op here: the binding uses make([]Value, 0, n) which is valid for n == 0.

Build, vet, full test suite (incl. internal/vm bindings) and the differential
oracle (rbgo vs MRI/JRuby/TruffleRuby) all pass; interpreter runs real Ruby
identically.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit 2d33f07 into main Jul 3, 2026
9 checks passed
@tannevaled
tannevaled deleted the chore/bump-optimized-stdlib-pins branch July 3, 2026 20:21
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