$ the-wire · showcase
UUID.Compare goes constant-time, synctest gets out of WaitGroup's way
By RepoJournal · Filed · About Go · Composed from the cited sources · methodology
Two runtime-level fixes land in golang/go, one making UUID sorting cheap on prefix-heavy UUIDv7s and one removing a non-inlinable call from every WaitGroup.Add, while the build and tools repos keep clearing deprecated infrastructure and confusing APIs.
uuid: use bytes.Compare in UUID.Compare golang/go
UUID.Compare compared byte by byte, so cost grew with the shared prefix; it now uses bytes.Compare, which on arm64 compares the 16 bytes as two 64-bit words and is roughly constant time. Since UUIDv7 values lead with a big-endian millisecond timestamp, this is the path that matters when sorting them or using them as ordered keys.
internal/synctest: make IsInBubble inlinable when no bubbles exist golang/go
IsInBubble lived in the runtime, so every sync.WaitGroup.Add paid for a non-inlinable call even in programs that never touch synctest. Brad Fitzpatrick made it inlinable and calls into the runtime only when bubbles exist, ahead of the sync change that stops using Pool inside bubbles.
internal/task: replace gcr.io/cloud-builders/npm with node:24.15.0 golang/build
The gcr.io/cloud-builders/npm image was frozen at Node 19.0.0 for latest and 18.12.0 for lts since 2022-10-25, and npm ci was emitting EBADENGINE warnings during vscode-go release tasks. It is replaced with node:24.15.0, as Cloud Build no longer maintains language-specific Node builder images.
go/analysis/passes/modernize: rangeint: check for aliased variables golang/tools
The rangeint modernizer rewrote 3-clause loops that assign to a pre-existing variable into range loops, changing the variable's value after the loop from limit to limit-1 and sharing one variable across iterations. It now checks for aliases, including pointers taken before the loop and dereferenced after it, and closures, which the old AST walk missed.
internal/typeparams: remove TypeSet.Empty golang/tools
TypeSet.Empty is gone: the empty type set is a non-nil termlist of length zero and an unrestricted one is a nil termlist, so iterating Terms covers both. That removes the Empty() versus Len()==0 distinction and one word of representation, an internal package change only.
Revert "runtime: fix timespec definition on 32bits systems" golang/go
Jorropo reverted the 32-bit timespec fix after finding the change referenced the internal linux timespec struct rather than the UAPI one. Also landed quietly: Fedora OpenBSD and FreeBSD builder images got more threads, 14.5 and 15.1 with GVNIC, and regenerated telemetry upload config.