release: v0.8.0#242
Merged
Merged
Conversation
- Bump workspace version to 0.8.0 (and all intra-workspace dep refs). - Finalize CHANGELOG [Unreleased] -> [0.8.0] with a release summary paragraph; add the five entries the audit found missing (#189/#206/#208/#216/#229), fix two off-by-one PR refs, replace nine issue-refs with PR-refs, tag the entries that had no (#NNN), and move two mis-filed entries to their Keep-a-Changelog section. - README: update the Performance methodology line for the bare-metal cross-impl harness (was still "Docker, v0.7.1"). - Fix three broken intra-doc links in buffa-codegen surfaced by `cargo doc -D warnings`.
Re-run on bare metal at the release HEAD (with the fast-utf8 default). The smoothutf8 slack-buffer fast path is visible in the buffa view-decode column: LogRecord 1,113 -> 1,351 (+21%), ApiResponse 752 -> 911 (+21%), MediaFrame 36,486 -> 41,474 (+14%). Go numbers carried forward unchanged. README inline raw-data tables synced to the regenerated tables.md, and the surrounding prose updated for the new ratios and the bare-metal methodology (the Reflection section still referenced the old Docker harness).
|
All contributors have signed the CLA ✍️ ✅ |
buffa-smolstr is the worked ProtoString-newtype reference for a foreign type, not a dependency to ship: publishing it would tie consumers to this repository's smol_str pin, when the point of the pluggable-type design is that they bring their own representation against their own versions. Moved under examples/ (kept as a workspace member so buffa-test can depend on it), marked publish = false, added a README stating the example-only status, and rewrote the doc references and the on_unimplemented diagnostic to point at examples/custom-types as the canonical template. The publish workflow already didn't list it.
smoothutf8 0.1.0 declared simdutf8 with default-features = false and never re-enabled simdutf8/std, so without -C target-cpu=x86-64-v3 simdutf8's runtime CPU dispatch was compiled out and >=128 B inputs fell back to core::str::from_utf8 (47% of LogRecord's string bytes). 0.1.1 fixes the feature wiring; cargo tree confirms simdutf8/std is now active and the disassembly shows verify_with_slack doing an indirect call (runtime dispatch) instead of calling from_utf8. LogRecord owned decode +1.8% (within the predicted +2-3%). Separately: cross_metal_run.sh now passes --noplot --discard-baseline --sample-size 50 --nresamples 1000 to criterion. The published number is the cross-pass median, so the per-pass criterion CI (default 100k bootstrap resamples) and plots are unused; this cuts buffa's pass from 1h14m to 27m. Spread is slightly wider (median 2.8% vs 2.3%) but well within the documented floor. Tables, charts, and the README inline raw-data tables regenerated; prost/prost-bytes/google were measured on the same instance type earlier the same day and are carried forward (only buffa+reflect changed).
rpb-ant
approved these changes
Jun 25, 2026
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 prep for v0.8.0.
What's in this PR
Cargo.toml.[Unreleased]→[0.8.0] - 2026-06-25with a release summary paragraph. Audit of the 49 PRs since v0.7.1 found and fixed: five missing entries (codegen: idiomatic_imports — use-backed short names at package root (file_per_package) #189/Pluggable owned string/bytes types via from_wire; drop curated string presets (#156) #206/Pluggable owned collection types for repeated fields (ProtoList) #208/codegen: reserve packed varint views by element count, not byte length #216/Add diagnostic hints to custom-type traits (#213) #229), two off-by-one PR refs, nine issue-refs replaced with PR-refs, several entries tagged with their(#NNN), and two mis-filed entries moved to their Keep-a-Changelog section.benchmarks/charts/tables.md, and the surrounding ratio prose updated to match.fast-utf8default shows in the buffa view-decode column (LogRecord +21%, ApiResponse +21%, MediaFrame +14% vs the benchmarks: fair-profile cross-impl comparison on bare metal #227 run). Go numbers carried forward.buffa-codegen(surfaced bycargo doc -D warnings).Not in this PR (follow-ups after the tag)
benchmarks/history/runs/v0.8.0.json+ REPORT/charts regeneration — measured at the tagged commit for clean provenance.[FooView]intra-doc link (surfaced bycargo doc -D warningsinbuffa-test; internal crate, CI doesn't enforce, but a real codegen bug).Release summary (from CHANGELOG)
The headline of this release is that the owned representation of every field kind is now pluggable end to end:
string,bytes,repeated, singular message, andmapfields each accept a crate-local type via a smallfrom_wire-style trait, so an inline-string or small-vector representation can avoid the per-field heap allocation without giving up the generated codec. Alongside that, UTF-8 validation on the decode path now defaults tosmoothutf8with the slack-buffer fast path — view decode is +15–22% on the string-heavy benchmark messages — and an opt-inFooLazyViewfamily lets a caller decode a few fields of a large message without recursing into untouched sub-trees. There are eight breaking changes, all on the trait surface or generated-code shape; regenerate code with the matchingbuffa-codegen.