Repository navigation
Releases
Releases · jbrjake/float-abel
v0.30.2
Immutable
release. Only release title and notes can be modified.
0.30.2 - 2026-11-02
Added
- (release) count the version from 0.0.0 over every commit since the first and cut releases from it with the repository's own scripts
- (release) cut releases with release-plz from the log and attach the attested .crate to every GitHub Release
- (docs) rewrite README
- (ci) publish to crates.io from release.yml on the owner's workflow_dispatch
- (dbsp) give Wide and Fixed DBSP's weight traits
- (differential) give Wide and Fixed differential-dataflow's weight traits
- (laws) add the closure law, check_closure, with a compact-only Exact as its control
- (differential) ship the banded SUM idiom as Exact::band and BandedSum::banded_sum
- (exact) encode the heap form on the wire and in the rkyv archive as its block behind a tag
- (exact) restore the heap arm as the 32-byte niche form behind an alloc feature
- (wire) serialise Exact and Wide as one byte string under serde
- (arbitrary) implement Arbitrary for Exact, Wide and Fixed
- (dbsp) adapt Exact to dbsp 0.364's weight traits behind the dbsp feature, with the UDA example
- (simd) add the AVX2 kernel, four doubles a step behind runtime detection
- (simd) fold every tier's bulk entries in lane-parallel tiles, with a portable kernel on every target and a NEON kernel behind the simd feature
- (binned) deposit the 106-bit product onto the bins, truncated below the unit and refused at Wide's ceiling, with a bulk entry that checks every pair first
- (golden) hash every tier's bytes, reads and refusals on the vectors and 10⁴ seeded multisets, commit the claim, and assert it on seven targets
- (binned) build Binned as independent carry-save bins on Wide's limb grid, with Add, into_wide, Wide::to_binned, and compile-fail cases that keep it out of the engine weight traits
- (differential) adapt Exact to differential-dataflow 0.25 as a diff type, prove it on three workers with serialized exchange, and ignore the closure's two unmaintained advisories by id
- (laws) publish the laws kit behind the laws feature and run every exact tier and a naive f64 control through it
- (wire) add the canonical wire format with to_bytes and from_bytes on every tier, an Exact decoder that refuses non-canonical words by name, serde carrying the same bytes, and FORMAT.md with vectors
- (reads) add to_f32 on every tier and prove to_f64, to_f32 and div_f64 against CPython-generated vectors
- (types) convert between the tiers with Wide from Fixed exact under a const assertion, Exact from Wide and Fixed refused past the width, and Wide from Exact refused outside the window
- (types) certify Wide and Fixed as repr(C) plain words with pinned layouts and safe constructors from their limbs
- (exact) make Exact a 32-byte Copy plain word with i32 special counts and the integer-amount ring, and drop the heap arm and the alloc feature
- (exact) publish Exact on every feature set, with the named cap on the operators and a checked API that returns it
- (exact) bound the exponent at 2^30 in every build, and tell an exponent overflow apart from a promotion
- (exact) add the compact tier, a canonical 127-bit dyadic with checked add and mul, total negation, numeric Ord and the reads, behind the alloc feature
- (wide) add Wide, the 34-limb exact f64 sum with signed special counters, total From, group ops, Mul, read-time projection, deposit_product and bitrep limb conformance
- (fixed) Fixed<LSB, LIMBS> — exact-or-refused deposit, quantize, the group ops, Ord and Hash, to_f64 and div_f64
Fixed
- (release) anchor the include globs to the crate root
- (release) let the lockfile update read the crates.io index, which a runner has not cached
- (release) install release-plz 0.4.3 by its tarball's sha256, since 0.4.2's musl build fails on the changelog header
- (release) keep release-plz's JSON output out of the working tree it refuses to find dirty
- (release) fail the release-plz jobs on release-plz's own exit status and let the release job read pull requests
- (ci) let a commit scope carry a comma, as refactor(wide,fixed) does
- (deps) clear RUSTSEC-2026-0385, -0391, -0398 and -0403 from the dbsp closure
- (deps) move dbsp's floor to 0.367 past zip 6's three advisories
- (ci) skip the task store's lint under CI, where no job installs meshwork
- (exact) close the limb cap under retraction at its edge
- (exact) let the compact add decide on the sum's span, not on the raised operand or the aligned frame
- (noalloc) fold the zero with the assign operator so the workspace clippy leg passes
- (types) assert the headroom and counter budgets in every build on Wide and Fixed, and run the panic tests under --release in the push gate
Performance
- (exact) inline the operator chain down to the compact tier
Changed
- (wide,fixed) move the operator impls into ops submodules
- (simd) delete the floating-point Binned kernel, the loser of the A/B, and record the numbers
Documentation
- (release) record the release ruling: release-plz on dev→main from a v0.0.0 base, an attested .crate in place of a signed tag, crates.io outside the release
- (changelog) name the first release by the log, not a number
- (claude) record the advisory-trigger and macOS-leg rulings
- (bench) re-take the crossover at f24b051 on both machines
- (bench) re-take the reproducibility-cost table at f24b051 on both machines
- (bench) record the heap arm's budget A/B against the Copy word
- (bench) record the Wide row of the end-to-end SUM
- (overflow) replace the options and their recommendation with what was decided
- (exact) state the heap form's contract in the README and the design
- (design) state the heap form's diff row as accepted at 1.9–2.4× beside the Copy word's
- (overflow) measure the 32-byte niche form against the Copy word, the enum and the banded idiom on both exchanges, and set the heap arm's budget
- (overflow) measure the heap arm as a proxy beside the banded idiom on three bands, and list it as an option with what it reopens
- (overflow) record the spike's findings — the two failure classes, the boundary bug, the banded idiom and its measured cost
- (design) state the diff row as accepted and the product kernel as held for a consumer
- (design) return the diff row and the product sentence to open rulings
- (readme) write the outward docs and run the README's Rust blocks as doctests
- (design) restate the targets and the diff row to the figures the owner accepted
- (bench) record the crossover on both machines and write the decision memo
- (bench) re-take every table at 2a82388 and name each section's commit
- (bench) record the wire form's three bincode passes per update on both machines
- (bench) record the prototype table, the width caps, the product row and the end-to-end SUM
- (design) state that deposit_product is refused by name on Fixed and Wide outside the window, and that Exact holds every product
- (design) finish the heap-era wording — the word's size, the width cap in the bounds and the kill table, and the dev-dependency list
- (dbsp) pin dbsp 0.364.0 on rustc 1.99.0
Tests
- (exact) cross six of the eleven cap-edge shapes under miri so the miri job keeps its headroom
- (binned) poison the slices' last entry by their length so the refusal case runs under miri
- (rounding) scale the random-multiset slice through rounds() so miri runs 200
- (laws) run the ring law at the limb cap's edge
- (laws) draw the limb cap's edge in the kit's Exact strategy
- (laws) run the four older laws on the full-range Exact strategy
- (engines) prove the five histories and product folds on the heap Exact inside differential and DBSP
- (ui) pin the compile-fail wording to stable 1.99 with rust-src and skip it elsewhere
- (miri) run the suite under miri with bit-built powers of two and scaled sweeps
- (fuzz) add the decode, sum-vs-oracle and sub-round-trip cargo-fuzz targets on a num-bigint oracle
- (golden) run the transcript with simd on and record every bulk entry, so the hash covers each kernel
- (wire) draw random limbs with array::from_fn so the topic stays under the length target
- (wire) prove the serde bytes with postcard instead of unmaintained bincode, drop the advisory ignore, and allow Unicode-3.0 for unicode-ident
Benchmarks
- (baseline) commit the per-machine bench baseline and its script
- (dd_sum) add the Wide row on the same-scale fixture
- (dd_sum) record the banded idiom beside the plain one on the same-scale and mixed fixtures
- (dd_sum) re-take the end-to-end SUM on the heap form beside isize and read the row against the kill line
- (crossover) price one change as the group grows, Exact in differential against a plain f64 re-sum
- (wire) iterate the tuple form's bytes as a slice, as the crate's impl of it did
- (wire) time timely's three bincode passes on a batch of Exact diffs against isize and two candidate forms
- (dd_sum) run the end-to-end SUM on typed exchange beside serialized
- add the ops and dd_sum targets and the products row
- (simd) build Binned kernel (ii), the floating-point peel, beside kernel (i) and hold it to the fold's bits
- (simd) measure each tier's bulk entry against its scalar reference on NEON and AVX2, and start BENCH.md
Build
- (deps) update rustls-webpki to 0.103.16 and webpki-root-certs to 1.0.10 past RUSTSEC-2026-0382 and -0383
- (deps) bump rustls to 0.23.46 past four advisories in dbsp's closure
- (dbsp) take dbsp on a caret like differential's
- (deny) check the dbsp closure with its own deny-dbsp.toml and keep deny.toml to the crate's other features
CI
- (release) cut the release as one pull request, dev into main
- (gates) run the release scripts' self-tests in the commit and push gates
- (release) cut the release PR from a clone with scripts/releas...