Skip to content

2.5.0: the performance pair, and the breaking changes under their own heading - #1231

Merged
Rafael-SOWNet merged 1 commit into
masterfrom
release-2.5.0
Sep 9, 2026
Merged

Rafael-SOWNet merged 1 commit into
masterfrom
release-2.5.0

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

Release preparation for 2.5.0, which is the release that finishes tier 2 — the rewrite graph.

Three checklist items, no code.

The performance pair

v2.4.0 (de7189b1, the 1845th) re-measured beside the release commit (6a97c071, the 1954th), both on 2026-09-09, one machine, one entry per run.

benchmark v2.4.0 1954th change
SolveHard 1,446,794,112 11,883,024 −99.18%
SolveMediumHard 164,549,808 1,449,266 −99.12%
SimplifyHard 3,632,019,136 331,756,152 −90.87%
SimplifyEasy 128,100 79,282 −38.11%
SolveEasyMedium 97,195 65,648 −32.46%
SolveMedium 661,994 455,925 −31.13%

Three rows went up and neither is attributed: ParseHard +1.77%, ParseEasy +0.84%, Derivate +0.79%. The parser gained three alternatives this release, which is consistent with the two parse rows and has no candidate for Derivate. Not bisected, so recorded as unattributed.

The composition was checked rather than assumed, because this file records a case where it failed — the rule-set exchange measured free or better at every step and summed to +13%. SimplifyHard's four steps predict −90.2% composed; measured end-to-end it is −90.87%.

The determinism claim held again, and its two exceptions were confirmed. v2.4.0 was measured for the 1930th on 7 September and again today: eleven of fourteen rows reproduce within 0.021%, four to the byte. The only two that moved further are CompileEasy and CompileHard — exactly the two performance-baseline.json marks ungated, because their allocation includes JIT-compiling a delegate.

The heading, before the tag

The breaking changes move from Unreleased to 2.5.0 — since 2.4.0. That is the one thing the 2.4.0 section records against itself: its entries sat under Unreleased while 2.4.0 was tagged and published, so a reader on that version could not tell from the file what they had.

The concurrency section

Added for #1230, deliberately with no was/is table: a single-threaded caller computed these values before and computes them now. What a working program can observe is that the determinant and inverse now serialise where the polynomial elimination declines the matrix, and that the elementwise operators do not.

🤖 Generated with Claude Code

https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

… heading

The release checklist owes three things this commit provides.

A performance pair. v2.4.0 (de7189b, the 1845th) re-measured beside the release
commit (6a97c07, the 1954th), both on 2026-09-09, on one machine, one entry per
run. Allocation:

    SolveHard          1,446,794,112 ->    11,883,024    -99.18%
    SolveMediumHard      164,549,808 ->     1,449,266    -99.12%
    SimplifyHard       3,632,019,136 ->   331,756,152    -90.87%
    SimplifyEasy             128,100 ->        79,282    -38.11%
    SolveEasyMedium           97,195 ->        65,648    -32.46%
    SolveMedium              661,994 ->       455,925    -31.13%

Three rows went up -- ParseHard +1.77%, ParseEasy +0.84%, Derivate +0.79% -- and
neither is bisected, so both are recorded as unattributed rather than explained.

The composition was checked rather than assumed, because this file records a case
where it failed: the rule-set exchange measured free or better at every step and
summed to +13%. SimplifyHard's four steps predict -90.2% composed; measured
end-to-end it is -90.87%. They compose here, and that is a measurement.

The determinism claim held again, with its two exceptions confirmed. v2.4.0 was
measured for the 1930th on 2026-09-07 and again today: eleven of fourteen rows
reproduce within 0.021% and four to the byte. The only two that moved further are
CompileEasy and CompileHard, which performance-baseline.json already marks ungated
because their allocation includes JIT-compiling a delegate. Today's spread sits
inside the 3.6% it records there.

The breaking changes move from "Unreleased" to "2.5.0 -- since 2.4.0", before the
tag rather than after it. That is the one thing the 2.4.0 section records against
itself: its entries sat under "Unreleased" while 2.4.0 was tagged and published, so
a reader on that version could not tell from the file what they had.

A section for the concurrency fix, which has no was/is table on purpose. A
single-threaded caller computed these values before and computes them now; what
changed is that a concurrent caller does too. The one thing a working program can
observe is that the determinant and inverse now serialise where the polynomial
elimination declines the matrix, and that the elementwise operators do not.

key-commits.txt gains v2.5.0 so the next release measures against this one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
@Rafael-SOWNet
Rafael-SOWNet merged commit 4e7d0ac into master Sep 9, 2026
31 checks passed
@Rafael-SOWNet
Rafael-SOWNet deleted the release-2.5.0 branch September 9, 2026 12:55
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