2.5.0: the performance pair, and the breaking changes under their own heading - #1231
Merged
Merged
Conversation
… 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.SolveHardSolveMediumHardSimplifyHardSimplifyEasySolveEasyMediumSolveMediumThree 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 forDerivate. 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.0was 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 areCompileEasyandCompileHard— exactly the twoperformance-baseline.jsonmarks ungated, because their allocation includes JIT-compiling a delegate.The heading, before the tag
The breaking changes move from
Unreleasedto2.5.0 — since 2.4.0. That is the one thing the 2.4.0 section records against itself: its entries sat underUnreleasedwhile 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