Skip to content

feat(avro): derived whole-record builder — recordBuilder[A], recursive sub-record levels (#95) - #116

Merged
kryptt merged 7 commits into
mainfrom
feat/whole-record-builder-95
Sep 23, 2026
Merged

kryptt merged 7 commits into
mainfrom
feat/whole-record-builder-95

Conversation

@kryptt

@kryptt kryptt commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Ref #95 — the filer's report, addressed.

The problem

The #95 filer's production hot path builds a fresh GenericData.Record from their ~66-field ClickInfo (leaves in 5 nested sub-records: Geo 8, UserAgentInfo 9, PostClick 11, Ivt 20, MavenEntities 10). Their report:

  • full vulcan.Codec[A].encode — vulcan's per-field composition per level, ~384–468 B/field;
  • a hand-built .put(pos, value) builder — ~0.5 µs / 1128 B/op, but one hand-maintained line per leaf (the complaint);
  • the described positional builder over held per-field leaf codecs — they implemented it, measured 3.767 µs / 19,056 B/op (7.5x time / 16.9x allocation vs their hand-built path), and rejected it: it strips only the OUTERMOST shell of vulcan's composition and keeps paying it inside every nested subCodec.encode.

What this adds

AvroVulcan.recordBuilder[A]: Exception | WholeRecordBuilder[A] — the hand-built shape, derived:

  • the macro walks A's case fields at expansion into a plain runtime RecordShape IR and emits ONE assembly call (no staged code), so the assembly is ordinary testable Scala;
  • construction resolves every case field's schema slot by NAME — all-or-nothing (new AvroWalk.recordSlots, same two rungs as totalNominalIndex, inverted verdict: total + injective or a named failure) — and validates every arm against the schema it writes into; construction is total, never throws;
  • toRecord is pure positional puts: primitives direct, nested case classes RECURSE into sub-record levels (self-recursive case classes resolve through the runtime level chain, so they terminate), None puts null exactly as vulcan's OptionCodec, and everything else (enums, bytes, logical types, collections, sums, value classes) goes through the field type's own vulcan.Codec — summoned at the derivation site, so a missing leaf codec is a compile error naming the field;
  • WholeRecordBuilder.asAvroCodec installs it as an AvroCodec.encode in one line, keeping codecPrism[...].record.reverseGet and drilled .field reads on the fast path;
  • the one documented difference from codec.encode: schema-only (computed/derived) columns keep their in-record default — the hand-built .put contract, round-trip-safe through the codec's own decode; a required one fails at write time, as the hand-built builder does.

Measured (benchmarks ClickRecordBench, the filer's shape, -prof gc; B/op gates, ns/op advises)

arm ns/op B/op
vulcanFull ~6,772 28,408
positional (the rejected prototype) ~5,575 23,912
hand-built noisy, sub-µs 768
derived ~546–581 744
derived through record.reverseGet ~584 744.005

The allocation gate is hand-built-equal; the rejected approach sits 32x above it on the same shape.

Doctrine pass (review)

No naked throws on any construction path: recordSlots returns Exception | Array[Int]; derive / buildLevel / planFor / unwrapNullable / climb thread failures up as returned Exceptions with per-refusal message factories; AvroVulcan.codec is two forms — codec(schema) (total; schema in hand) and codec[A]: Either[Exception, AvroCodec[A]] — with schemaOf deleted; the opt-in given remains the one documented eager-failure site (a summon must produce a codec). encode still throws on codec errors per AvroCodec's total-encode trait contract.

Tests & docs

  • WholeRecordBuilderSpec (14 examples): fidelity vs codec encode (deep, every nested level), byte-identical wire bytes, round-trips through the codec's decode (Some/None), the computed-column contract, reordered codec field lists + snake_case columns (name resolution), codecPrism wiring, the recursive-case knot, six construction refusals (rename, Option/non-nullable, case-class/non-record, LONG/INT, normalisation ambiguity, slot collision).
  • WholeRecordBuilderMacroErrorSpec (2): a missing leaf codec names the field; a non-case-class root refuses at compile time.
  • AvroVulcanSpec updated for the two-form bridge (plus the explicit-schema form).
  • Full avroIntegration/test: 235 passed / 0 failed. Root aggregate compiles. scalafmt applied to touched modules; .github/bench tooling unittests pass with ClickRecordBench registered.
  • site/docs/integrations/avro.md vulcan section rewritten for the two-form bridge + the builder; CHANGELOG entry under Unreleased.

…e sub-record levels (#95)

The #95 filer's production path is a hand-built leaf-by-leaf .put builder:
fast (744-768 B/op on a 66-leaf nested ClickInfo) but one hand-maintained
line per leaf. The positional builder over held per-field leaf codecs
removes the boilerplate but re-enters Codec[Sub].encode for every nested
sub-record — the filer implemented it, measured 7.5x time / 16.9x
allocation against their hand-built path, and rejected it: it strips only
the outermost shell of vulcan's composition.

recordBuilder[A] derives the hand-built shape at compile time instead:

- the macro walks A's case fields into a plain runtime RecordShape IR
  (one assembly call emitted; no staged code);
- construction resolves every case field's schema slot by NAME via a new
  all-or-nothing AvroWalk.recordSlots rung, and validates every arm
  against the schema it writes into;
- toRecord is pure positional puts: primitives direct, nested case
  classes RECURSE into sub-record levels (self-recursive types resolve
  through the runtime level chain), None puts null exactly as vulcan's
  OptionCodec, everything else through the field type's own vulcan.Codec
  — summoned at the derivation site, so a missing leaf codec is a
  compile error naming the field.

Construction is total: every refusal (unresolved case field, two case
fields claiming one column, arm/schema disagreement, non-record schema)
comes back as the Exception half of Exception | WholeRecordBuilder[A],
naming the field and the record. The one documented difference from
codec.encode: schema-only (computed/derived) columns keep their
in-record default — the hand-built .put contract, round-trip-safe
through the codec's decode.

Doctrine pass on the vulcan surface per review: no naked throws.
AvroVulcan.codec is two forms — codec(schema) (total; schema in hand)
and codec[A]: Either[Exception, AvroCodec[A]] — schemaOf deleted; the
opt-in given stays the one documented eager-failure site.

Measured (benchmarks ClickRecordBench, -prof gc, the filer's shape):
derived 744 B/op / hand-built 768 / rejected positional 23,912 / full
codec 28,408 — the allocation gate is hand-built-equal, and ns/op stays
sub-microsecond through codecPrism[...].record.reverseGet (asAvroCodec
wiring, +0.001 B/op).

Gates: avroIntegration/test 235 passed (21 new across the builder spec,
macro-error catalogue and the bridge spec), root aggregate compile,
scalafmt on touched modules, .github/bench tooling unittests.
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Cloudflare Pages preview for feat/whole-record-builder-95 is live:

https://fafb21ab.cats-eo-docs.pages.dev

Branch alias: https://feat-whole-record-builder-95.cats-eo-docs.pages.dev

Built from commit 229f3e39cf959435964c89e2056a82be1834c728 · updated on every push.

…ual gate missed

CI (PR #116) caught what my per-module 'scalafmt' run didn't cover: the
Test-config sources and parts of the macro file were unformatted. Full
'scalafmtAll ; scalafmtCheckAll' is green; avroIntegration/test re-run:
235 passed / 0 failed.
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark A/B

Allocation (B/op) — authoritative

Benchmark params base head Δ
PlatedBench.visitorUniverseJson n=4096 524,402.8 327,812.6 -37.5%
TraversalBench.eoFoldNested size=8 424.0 328.0 -22.6%
JsoniterBench.jReadStreet size=8 128.0 152.0 +18.7%
JsoniterBench.jReadStreet size=512 128.1 152.1 +18.7%
OrderAvroBench.eoModifyNames size=64 12,560.1 14,160.2 +12.7%
GetterBench.mGet_6 - 0.0 0.0 +4.0%
OpticBuildBench.reuseUse - 2,648.0 2,720.0 +2.7%
FoldBench.mFoldMap size=8 0.0 0.0 +2.7%
AvroBytesBench.eoModifyCountry - 3,288.0 3,200.0 -2.7%
AvroVulcanBench.encode_vulcanRaw - 1,240.0 1,208.0 -2.6%
JsoniterBench.jReplaceId size=8 960.0 936.0 -2.5%
AffineFoldBench.eoGetOption_0_empty - 0.0 0.0 +2.5%
AvroJsonBridgeBench.eoWideToAvro - 6,744.0 6,584.0 -2.4%
GenericsBench.handPrismGetMiss - 0.0 0.0 -2.1%
OptionalBench.eoModify_0_empty - 0.0 0.0 +2.0%
AffineFoldBench.mGetOption_loyalty_empty - 0.0 0.0 -2.0%
GetterBench.eoGet_orderId - 0.0 0.0 +1.8%
OptionalBench.mModify_0_empty - 0.0 0.0 -1.7%
GetterBench.eoGet_6 - 0.0 0.0 +1.6%
AffineFoldBench.eoGetOption_0 - 0.0 0.0 +1.6%
433 more benchmarks
Benchmark params base head Δ
LensBench.mGet - 0.0 0.0 -1.5%
JsoniterBench.jMiss size=64 0.0 0.0 -1.4%
AvroBytesBench.eoSliceGraftPayload - 1,192.0 1,176.0 -1.3%
LensBench.eoGet - 0.0 0.0 +1.3%
OptionalBench.mModify_loyalty_empty - 0.0 0.0 -1.3%
AffineFoldBench.eoGetOption_loyalty - 0.0 0.0 -1.0%
GenericsBench.handLensGet - 0.0 0.0 +1.0%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.0 0.0 +0.9%
CapsBench.getCap - 0.0 0.0 -0.9%
OrderCirceBench.directStreet size=8 2,752.0 2,728.0 -0.9%
AffineFoldBench.mGetOption_0 - 0.0 0.0 +0.8%
SchemesBench.handCata - 0.1 0.1 -0.8%
PrismBench.eoGetOptionAbsent - 0.0 0.0 -0.8%
AffineFoldBench.mGetOption_0_empty - 0.0 0.0 +0.8%
CapsBench.foldMapDerivedPerCall - 0.0 0.0 +0.8%
PrismBench.mGetOptionPresent - 0.0 0.0 -0.8%
PrismBench.mGetOptionAbsent - 0.0 0.0 +0.7%
GenericsBench.genLensGet - 0.0 0.0 +0.6%
JsoniterBench.jMiss size=512 0.1 0.1 -0.6%
CapsBench.getDirect - 0.0 0.0 -0.6%
PrismBench.mGetRightAbsent - 0.0 0.0 +0.6%
AffineFoldBench.mGetOption_loyalty - 0.0 0.0 +0.5%
CapsBench.foldMapDerivedHeld - 0.0 0.0 +0.5%
CapsBench.foldMapDirect - 0.0 0.0 +0.5%
CapsBench.getDerivedPerCall - 0.0 0.0 -0.4%
PrismBench.eoGetRightAbsent - 0.0 0.0 -0.4%
AffineFoldBench.mGetOption_6 - 0.0 0.0 +0.4%
GenericsBench.rawLensGet - 0.0 0.0 +0.4%
SchemesBench.handHylo - 0.1 0.1 -0.3%
MultiFocusCollectBench.eoCollectMap_constSum - 0.0 0.0 -0.3%
GetterBench.mGet_orderId - 0.0 0.0 +0.3%
GetterBench.mGet_0 - 0.0 0.0 +0.3%
CapsBench.getDeepCap - 0.0 0.0 +0.3%
KyoDiBench.handMapGet - 0.0 0.0 +0.3%
PrismBench.eoGetOptionPresent - 0.0 0.0 -0.2%
ZioDiBench.eoDrillGet - 0.0 0.0 -0.2%
GetterBench.eoGet_0 - 0.0 0.0 +0.2%
OptionalBench.eoModify_loyalty_empty - 0.0 0.0 +0.2%
ZioDiBench.eoServiceGet - 0.0 0.0 -0.2%
MultiFocusBench.naive_sumQty size=4 0.0 0.0 +0.2%
GenericsBench.handPrismModifyMiss - 0.0 0.0 +0.1%
GenericsBench.genPrismGetMiss - 0.0 0.0 -0.1%
GetterBench.mGet_3 - 0.0 0.0 -0.1%
JsoniterBench.cReplaceId size=8 20,668.2 20,644.0 -0.1%
JsoniterBench.cModifyId size=8 20,716.1 20,692.2 -0.1%
OrderAvroBench.monocleModifyStreet size=64 20,904.2 20,880.2 -0.1%
GetterBench.eoGet_3 - 0.0 0.0 -0.1%
OrderJsoniterBench.nativeSumPrices size=64 10,926.5 10,937.6 +0.1%
JsoniterBench.jMiss size=8 0.0 0.0 +0.1%
OrderAvroBench.naiveModifyNames size=64 27,912.3 27,936.3 +0.1%
MultiFocusBench.eoModify_multiFocus size=256 76,112.6 76,176.4 +0.1%
OrderCirceBench.monocleNames size=8 19,472.1 19,456.1 -0.1%
KyoDiBench.eoMapGet - 0.0 0.0 -0.1%
CapsBench.getDerivedHeld - 0.0 0.0 +0.1%
GenericsBench.genPrismModifyMiss - 0.0 0.0 +0.1%
JsoniterBench.jReplaceId size=512 41,889.0 41,913.1 +0.1%
OrderJsoniterBench.nativeReadStreet size=512 455.3 455.5 +0.0%
AffineFoldBench.mGetOption_3 - 0.0 0.0 +0.0%
FoldBench.eoFoldMap size=8 0.0 0.0 -0.0%
OrderCirceBench.eoStreet size=512 2,721.9 2,720.8 -0.0%
AffineFoldBench.eoGetOption_loyalty_empty - 0.0 0.0 -0.0%
CapsBench.getDeepDirect - 0.0 0.0 -0.0%
OrderCirceBench.eoStreetIor size=64 2,736.1 2,736.9 +0.0%
OrderJsoniterBench.nativeSumPrices size=8 1,513.2 1,512.8 -0.0%
OrderCirceBench.eoStreetIor size=8 2,736.8 2,736.0 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=2048 104,710.0 104,684.7 -0.0%
CapsBench.foldMapCap - 0.0 0.0 +0.0%
OrderJsoniterBench.nativeSumPrices size=512 86,307.3 86,319.6 +0.0%
OrderCirceBench.monocleStreet size=64 113,799.7 113,815.1 +0.0%
OrderCirceBench.monocleNames size=64 132,762.6 132,778.8 +0.0%
PowerSeriesNestedBench.monocle_nested size=64 58,900.8 58,897.0 -0.0%
OrderJsoniterBench.eoSumPrices size=512 63,688.5 63,685.6 -0.0%
OrderCirceBench.naiveStreet size=64 113,807.1 113,812.0 +0.0%
MultiFocusBench.eoModify_multiFocus size=1024 331,109.3 331,119.4 +0.0%
OrderJsoniterBench.eoReadStreet size=512 128.2 128.2 +0.0%
OrderCirceBench.naiveNames size=512 965,280.2 965,305.7 +0.0%
OrderCirceBench.monocleNames size=512 1,121,819.4 1,121,848.2 +0.0%
OrderCirceBench.eoNamesIor size=512 683,560.2 683,575.8 +0.0%
PowerSeriesBench.monocle_powerEach size=4 1,176.0 1,176.0 +0.0%
OrderCirceBench.hcursorNames size=64 77,818.4 77,819.6 +0.0%
OrderCirceBench.eoNamesIor size=64 87,529.7 87,528.3 -0.0%
OrderJsoniterBench.nativeReadStreet size=64 424.5 424.5 -0.0%
PowerSeriesBench.naive_powerEach size=4096 114,775.4 114,773.9 -0.0%
OrderCirceBench.monocleStreet size=512 908,043.2 908,032.6 -0.0%
JsoniterBench.jSumPrices size=512 63,631.6 63,632.4 +0.0%
PowerSeriesBench.monocle_powerEach size=4096 967,845.6 967,856.4 +0.0%
PlatedBench.mUniverseExpr n=4096 4,687,638.6 4,687,687.1 +0.0%
OrderJsoniterBench.monocleSumPrices size=64 47,390.4 47,390.9 +0.0%
OrderCirceBench.directNames size=512 601,693.6 601,687.9 -0.0%
OrderCirceBench.eoStreetIor size=512 2,736.8 2,736.9 +0.0%
OrderCirceBench.eoStreet size=64 2,721.0 2,721.0 +0.0%
OrderAvroBench.naiveModifyStreet size=512 169,057.1 169,058.6 +0.0%
JsoniterBench.cModifyId size=512 1,066,784.2 1,066,776.4 -0.0%
OrderCirceBench.naiveStreet size=512 908,041.4 908,035.0 -0.0%
PowerSeriesPrismBench.naive_sparse size=2048 24,613.2 24,613.0 -0.0%
PlatedBench.mUniverseJson n=4096 6,489,793.8 6,489,748.8 -0.0%
JsoniterBench.cReadId size=512 797,938.3 797,943.7 +0.0%
OrderCirceBench.eoNames size=512 614,052.4 614,048.3 -0.0%
PowerSeriesNestedBench.naive_nested size=1024 115,068.4 115,069.1 +0.0%
OrderCirceBench.hcursorNames size=512 613,999.4 614,003.1 +0.0%
PowerSeriesBench.monocle_powerEach size=256 107,338.6 107,337.9 -0.0%
MultiFocusBench.eoFold_powerEach size=1024 43,036.2 43,035.9 -0.0%
OrderCirceBench.directNames size=64 77,729.4 77,729.8 +0.0%
OrderJsoniterBench.monocleModifyStreet size=64 30,081.9 30,082.0 +0.0%
PlatedBench.mUniverseExpr n=512 475,011.5 475,009.3 -0.0%
JsoniterBench.cReplaceId size=64 136,217.8 136,217.2 -0.0%
OrderCirceBench.directStreet size=512 2,728.8 2,728.8 -0.0%
OrderAvroBench.eoReadStreet size=512 88.0 88.0 +0.0%
OrderJsoniterBench.monocleModifyStreet size=512 333,572.4 333,571.0 -0.0%
PowerSeriesNestedBench.monocle_nested size=1024 1,118,860.4 1,118,856.4 -0.0%
PlatedBench.eoUniverseExpr n=4096 786,387.7 786,384.9 -0.0%
OrderAvroBench.monocleModifyNames size=64 39,867.3 39,867.4 +0.0%
OrderJsoniterBench.naiveReadStreet size=512 193,231.9 193,232.6 +0.0%
OrderJsoniterBench.monocleSumPrices size=512 1,190,794.7 1,190,798.7 +0.0%
OrderCirceBench.directStreet size=64 2,728.1 2,728.1 -0.0%
OrderAvroBench.eoModifyNames size=512 97,403.3 97,403.6 +0.0%
OrderJsoniterBench.monocleReadStreet size=512 193,232.6 193,232.0 -0.0%
PowerSeriesNestedBench.eoModify_nested size=1024 210,731.0 210,730.4 -0.0%
OrderCirceBench.hcursorStreet size=64 3,032.1 3,032.1 -0.0%
PlatedBench.mTransformExpr n=4096 753,738.3 753,740.3 +0.0%
JsoniterBench.cReadId size=64 101,309.1 101,309.4 +0.0%
JsoniterBench.cReplaceId size=512 1,066,736.0 1,066,738.8 +0.0%
TraversalBench.eoFoldNested size=512 20,200.8 20,200.9 +0.0%
OrderAvroBench.monocleModifyStreet size=512 169,065.9 169,065.5 -0.0%
PowerSeriesPrismBench.monocle_sparse size=2048 523,146.2 523,147.5 +0.0%
JsoniterBench.cReadStreet size=512 797,943.1 797,941.2 -0.0%
PlatedBench.visitorTransformDeep n=4096 163,886.1 163,886.5 +0.0%
PlatedBench.visitorUniverseDeep n=4096 196,706.6 196,707.0 +0.0%
TraversalBench.mModify size=512 176,920.6 176,920.2 -0.0%
OrderAvroBench.naiveReadStreet size=512 69,802.0 69,801.9 -0.0%
JsoniterBench.cSumPrices size=512 1,240,809.4 1,240,811.6 +0.0%
FoldBench.mFoldMap size=512 14,080.7 14,080.6 -0.0%
MultiFocusBench.naive_sumQty size=1024 16,129.1 16,129.2 +0.0%
MultiFocusBench.eoModify_powerEach size=1024 115,177.2 115,177.3 +0.0%
OrderAvroBench.monocleReadStreet size=512 69,802.0 69,802.1 +0.0%
JsoniterBench.cModifyId size=64 136,265.9 136,265.7 -0.0%
OrderCirceBench.naiveNames size=64 120,838.2 120,838.4 +0.0%
OrderAvroBench.naiveModifyNames size=512 226,282.7 226,283.0 +0.0%
MultiFocusBench.naive_listMap size=256 16,424.1 16,424.2 +0.0%
OrderJsoniterBench.eoModifyStreet size=512 42,027.6 42,027.7 +0.0%
PlatedBench.eoTransformExpr n=4096 655,360.0 655,360.9 +0.0%
PowerSeriesBench.eoModify_powerEach size=1024 41,414.2 41,414.2 +0.0%
JsoniterBench.cReadStreet size=64 101,309.4 101,309.3 -0.0%
JsoniterBench.jReadId size=64 48.0 48.0 -0.0%
PowerSeriesBench.naive_powerEach size=1024 28,730.5 28,730.5 -0.0%
PlatedBench.eoTransformDeep n=4096 624,387.2 624,386.5 -0.0%
OrderJsoniterBench.eoReadStreet size=64 128.0 128.0 -0.0%
PlatedBench.visitorUniverseExpr n=4096 196,655.0 196,655.3 +0.0%
PlatedBench.visitorUniverseJson n=64 4,088.0 4,088.0 +0.0%
PowerSeriesNestedBench.eoModify_nested size=64 14,592.5 14,592.6 +0.0%
CompositionBench.reuseLensOptional3 - 160.0 160.0 +0.0%
OrderAvroBench.eoModifyStreet size=512 328.0 328.0 +0.0%
OrderJsoniterBench.eoReadStreet size=8 128.0 128.0 -0.0%
OrderJsoniterBench.naiveSumPrices size=512 230,124.0 230,123.9 -0.0%
OrderJsoniterBench.monocleReadStreet size=64 24,705.2 24,705.2 +0.0%
JsoniterBench.jReadId size=8 48.0 48.0 +0.0%
OrderJsoniterBench.eoSumPrices size=8 1,176.0 1,176.0 +0.0%
PlatedBench.eoUniverseJson n=4096 786,482.6 786,483.1 +0.0%
PowerSeriesNestedBench.eoModify_nested size=256 53,835.8 53,835.8 +0.0%
PlatedBench.mUniverseJson n=512 699,918.1 699,917.7 -0.0%
OrderAvroBench.monocleModifyNames size=512 382,759.5 382,759.7 +0.0%
PowerSeriesNestedBench.monocle_nested size=256 430,200.1 430,200.3 +0.0%
PowerSeriesBench.eoModify_powerEach size=256 10,688.5 10,688.5 -0.0%
OrderJsoniterBench.naiveReadStreet size=64 24,705.2 24,705.2 +0.0%
PowerSeriesBench.eoModify_powerEach size=64 3,008.0 3,008.0 +0.0%
PlatedBench.eoTransformExpr n=64 10,144.0 10,144.0 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=512 24,785.6 24,785.6 -0.0%
TraversalBench.eoModify size=512 36,897.2 36,897.2 +0.0%
OrderCirceBench.eoNamesIor size=8 11,592.1 11,592.1 -0.0%
MultiFocusBench.eoModify_powerEach size=256 26,080.6 26,080.6 +0.0%
OrderCirceBench.hcursorStreet size=512 3,032.9 3,032.9 +0.0%
AffineFoldBench.eoGetOption_6 - 16.0 16.0 -0.0%
PowerSeriesNestedBench.eoModify_nested size=16 4,792.1 4,792.1 -0.0%
JsoniterBench.jReadId size=512 48.0 48.0 -0.0%
OrderCirceBench.eoNames size=64 79,299.3 79,299.4 +0.0%
JsoniterBench.jModifyId size=512 41,945.1 41,945.1 +0.0%
PlatedBench.eoUniverseDeep n=64 12,360.0 12,360.0 +0.0%
OrderCirceBench.hcursorNames size=8 10,768.1 10,768.1 -0.0%
MultiFocusBench.eoFold_powerEach size=256 9,240.2 9,240.2 +0.0%
PlatedBench.eoUniverseExpr n=64 12,168.0 12,168.0 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=32 1,360.0 1,360.0 -0.0%
OrderJsoniterBench.naiveModifyStreet size=512 333,571.1 333,571.2 +0.0%
OrderCirceBench.eoNames size=8 10,944.1 10,944.1 +0.0%
PlatedBench.visitorUniverseJson n=512 40,954.2 40,954.2 -0.0%
MultiFocusCollectBench.naive_tuple6Rewrite - 184.0 184.0 -0.0%
CapsBench.modifyDeepDirect - 152.0 152.0 -0.0%
TraversalBench.eoModify size=8 608.0 608.0 -0.0%
OrderJsoniterBench.nativeReadStreet size=8 424.0 424.0 +0.0%
PlatedBench.visitorUniverseExpr n=64 3,080.0 3,080.0 +0.0%
JsoniterBench.cSumPrices size=64 156,251.8 156,251.8 +0.0%
PowerSeriesNestedBench.naive_nested size=256 29,019.4 29,019.4 +0.0%
FoldBench.eoFoldPrices size=512 12,312.5 12,312.5 +0.0%
PowerSeriesBench.monocle_powerEach size=1024 279,426.4 279,426.5 +0.0%
PowerSeriesBench.naive_powerEach size=256 7,224.3 7,224.3 +0.0%
MultiFocusBench.naive_listMap size=1024 65,578.2 65,578.1 -0.0%
OrderAvroBench.naiveReadStreet size=64 8,848.2 8,848.2 -0.0%
PlatedBench.visitorUniverseDeep n=512 24,632.8 24,632.8 +0.0%
PlatedBench.eoTransformExpr n=512 81,825.7 81,825.7 +0.0%
OrderJsoniterBench.eoModifyStreet size=8 1,072.0 1,072.0 -0.0%
AvroBytesBench.prunedReadPartner - 1,592.0 1,592.0 -0.0%
AvroBytesBench.eoReadPartner - 480.0 480.0 -0.0%
FoldBench.eoFoldMap size=64 768.0 768.0 +0.0%
JsoniterBench.jReadStreet size=64 128.0 128.0 +0.0%
PlatedBench.eoTransformDeep n=512 57,361.3 57,361.2 -0.0%
OrderJsoniterBench.naiveSumPrices size=8 4,248.0 4,248.0 -0.0%
PowerSeriesNestedBench.monocle_nested size=4 5,568.0 5,568.0 +0.0%
OptionalBench.eoModify_6 - 208.0 208.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=512 6,176.3 6,176.3 -0.0%
AvroBytesBench.eoGraftPayload - 720.0 720.0 -0.0%
MultiFocusBench.eoModify_powerEach size=32 3,152.0 3,152.0 +0.0%
SetterBench.eoModify_3 - 72.0 72.0 +0.0%
TraversalBench.mFoldPrices size=64 15,424.1 15,424.1 +0.0%
PowerSeriesBench.eoModify_powerEach size=4096 164,377.1 164,377.1 +0.0%
PlatedBench.mTransformExpr n=512 69,585.7 69,585.7 -0.0%
MultiFocusBench.naive_sumQty size=256 3,840.1 3,840.1 -0.0%
OrderAvroBench.eoModifyStreet size=8 328.0 328.0 -0.0%
AvroVulcanBench.rootGet_native - 600.0 600.0 -0.0%
OrderJsoniterBench.monocleModifyStreet size=8 4,664.1 4,664.1 -0.0%
OrderAvroBench.naiveModifyStreet size=8 2,968.0 2,968.0 -0.0%
AvroJsonBridgeBench.eoWideToJson - 1,472.0 1,472.0 -0.0%
PlatedBench.visitorTransformExpr n=4096 360,471.2 360,471.3 +0.0%
PlatedBench.mUniverseExpr n=64 45,424.3 45,424.3 +0.0%
OrderJsoniterBench.eoSumPrices size=64 8,121.2 8,121.2 +0.0%
PlatedBench.eoUniverseExpr n=512 98,185.5 98,185.5 -0.0%
OrderAvroBench.eoModifyStreet size=64 328.0 328.0 +0.0%
FoldBench.mFoldPrices size=512 12,312.5 12,312.5 +0.0%
PowerSeriesPrismBench.monocle_sparse size=512 166,693.3 166,693.3 -0.0%
PlatedBench.visitorTransformDeep n=512 20,496.5 20,496.5 -0.0%
OrderAvroBench.eoModifyNames size=8 1,992.0 1,992.0 +0.0%
AvroBytesBench.naiveReadCountry - 4,256.0 4,256.0 +0.0%
JsoniterBench.cReadStreet size=8 15,568.0 15,568.0 +0.0%
OrderAvroBench.eoReadStreet size=64 88.0 88.0 -0.0%
PlatedBench.eoUniverseDeep n=512 98,377.5 98,377.5 +0.0%
PowerSeriesNestedBench.naive_nested size=64 7,512.2 7,512.2 +0.0%
PowerSeriesPrismBench.monocle_sparse size=32 7,040.0 7,040.0 +0.0%
OrderAvroBench.monocleReadStreet size=64 8,848.2 8,848.2 +0.0%
PlatedBench.eoUniverseJson n=64 12,168.1 12,168.1 +0.0%
AvroDecodeReuseBench.cachedDecodeRecord - 1,224.0 1,224.0 +0.0%
OrderJsoniterBench.monocleReadStreet size=8 3,648.0 3,648.0 +0.0%
OrderCirceBench.directNames size=8 10,688.1 10,688.1 +0.0%
PowerSeriesPrismBench.monocle_sparse size=128 27,808.2 27,808.2 -0.0%
AvroBytesBench.eoModifyPartner - 3,360.0 3,360.0 +0.0%
PowerSeriesNestedBench.eoModify_nested size=4 2,264.0 2,264.0 -0.0%
OrderAvroBench.monocleModifyStreet size=8 2,992.0 2,992.0 +0.0%
JsoniterBench.jSumPrices size=8 1,176.0 1,176.0 -0.0%
KyoDiBench.handVarUpdate - 184.0 184.0 +0.0%
OpticBuildBench.buildAndUse - 2,816.0 2,816.0 -0.0%
PlatedBench.visitorUniverseExpr n=512 24,584.7 24,584.7 +0.0%
PlatedBench.visitorTransformExpr n=512 45,032.8 45,032.8 +0.0%
AvroBytesBench.prunedReadCountry - 1,976.0 1,976.0 +0.0%
OrderAvroBench.monocleModifyNames size=8 5,400.0 5,400.0 +0.0%
OrderAvroBench.eoReadStreet size=8 88.0 88.0 +0.0%
JsoniterBench.cReadId size=8 15,568.0 15,568.0 +0.0%
PowerSeriesNestedBench.monocle_nested size=16 15,776.1 15,776.1 +0.0%
MultiFocusBench.eoModify_powerEach size=4 800.0 800.0 -0.0%
AvroJsonBridgeBench.naiveWideToAvro - 3,504.0 3,504.0 +0.0%
AvroJsonBridgeBench.eoClickToJson - 4,000.0 4,000.0 +0.0%
PlatedBench.visitorUniverseDeep n=64 3,128.0 3,128.0 +0.0%
PowerSeriesNestedBench.naive_nested size=16 2,136.0 2,136.0 -0.0%
OrderJsoniterBench.naiveReadStreet size=8 3,648.0 3,648.0 +0.0%
OrderCirceBench.hcursorStreet size=8 3,032.0 3,032.0 -0.0%
AvroVulcanBench.fieldGet_bridged - 432.0 432.0 -0.0%
MultiFocusCollectBench.naive_listSum - 56.0 56.0 +0.0%
PlatedBench.visitorTransformDeep n=64 2,576.0 2,576.0 -0.0%
OrderCirceBench.monocleStreet size=8 17,048.1 17,048.1 +0.0%
KyoDiBench.eoVarUpdateFocus - 200.0 200.0 +0.0%
JsoniterBench.cSumPrices size=8 22,704.1 22,704.1 -0.0%
AvroDecodeReuseBench.confluentRecordReaderFresh - 3,696.0 3,696.0 -0.0%
MultiFocusBench.eoFold_powerEach size=32 920.0 920.0 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=8 496.0 496.0 +0.0%
TraversalBench.mFoldPrices size=512 162,581.1 162,581.0 -0.0%
TraversalBench.mModify size=64 14,448.0 14,448.0 +0.0%
PowerSeriesBench.eoModify_powerEach size=16 1,088.0 1,088.0 +0.0%
ZioDiBench.handDrillModify - 648.0 648.0 -0.0%
GenericsBench.handPrismModifyHit - 24.0 24.0 +0.0%
AvroBytesBench.naivePassthroughPayload - 14,088.1 14,088.1 -0.0%
AvroJsonBridgeBench.naiveClickToAvro - 3,928.0 3,928.0 +0.0%
CompositionBench.reuseLens6 - 120.0 120.0 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=128 4,816.1 4,816.1 +0.0%
JsoniterBench.jModifyId size=64 5,328.0 5,328.0 +0.0%
JsoniterBench.jReplaceId size=64 5,296.0 5,296.0 +0.0%
AvroVulcanBench.decode_vulcanRaw - 880.0 880.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=128 1,568.0 1,568.0 +0.0%
OptionalBench.mModify_3 - 304.0 304.0 +0.0%
PowerSeriesBench.eoModify_powerEach size=4 608.0 608.0 +0.0%
PowerSeriesBench.monocle_powerEach size=16 3,736.0 3,736.0 -0.0%
KyoDiBench.handEnvUse - 304.0 304.0 -0.0%
ZioDiBench.handServiceReplace - 576.0 576.0 -0.0%
OrderJsoniterBench.monocleSumPrices size=8 6,640.1 6,640.1 +0.0%
AvroBytesBench.eoReadCountry - 520.0 520.0 +0.0%
TraversalBench.eoFoldPrices size=512 12,312.4 12,312.4 -0.0%
AvroDecodeReuseBench.confluentRecordReader - 1,560.0 1,560.0 -0.0%
AvroBytesBench.naiveModifyPartner - 8,696.1 8,696.1 +0.0%
SchemesBench.eoHylo - 295,848.6 295,848.6 -0.0%
PowerSeriesBench.monocle_powerEach size=64 14,520.1 14,520.1 +0.0%
PlatedBench.eoUniverseJson n=512 98,186.9 98,186.9 -0.0%
AvroVulcanBench.decode_native - 48.0 48.0 -0.0%
AvroDecodeReuseBench.freshDecodeRecord - 3,344.0 3,344.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=32 416.0 416.0 +0.0%
PlatedBench.eoUniverseDeep n=4096 786,576.3 786,576.3 +0.0%
CompositionBench.buildLensOptional3 - 184.0 184.0 -0.0%
OrderAvroBench.naiveReadStreet size=8 1,208.0 1,208.0 +0.0%
PowerSeriesNestedBench.naive_nested size=4 792.0 792.0 -0.0%
TraversalBench.mModify size=8 1,936.0 1,936.0 +0.0%
TraversalBench.eoFoldNested size=64 2,680.0 2,680.0 +0.0%
CompositionBench.reuseLens3 - 72.0 72.0 +0.0%
AffineFoldBench.eoGetOption_3 - 16.0 16.0 -0.0%
TraversalBench.eoModify size=64 4,640.0 4,640.0 -0.0%
PlatedBench.mUniverseJson n=64 73,208.4 73,208.4 -0.0%
AvroBytesBench.naiveReadPartner - 5,424.0 5,424.0 +0.0%
AvroBytesBench.naiveModifyCountry - 7,616.0 7,616.0 +0.0%
PowerSeriesBench.naive_powerEach size=64 1,848.0 1,848.0 -0.0%
OrderAvroBench.naiveModifyStreet size=64 20,880.2 20,880.2 -0.0%
OrderAvroBench.monocleReadStreet size=8 1,208.0 1,208.0 +0.0%
OrderCirceBench.naiveStreet size=8 17,040.1 17,040.1 +0.0%
KyoDiBench.eoMapDrillModify - 216.0 216.0 -0.0%
SetterBench.mModify_orderId - 40.0 40.0 +0.0%
OrderJsoniterBench.naiveModifyStreet size=8 4,640.1 4,640.1 -0.0%
PlatedBench.mTransformExpr n=64 11,728.1 11,728.1 +0.0%
OptionalBench.mModify_0 - 112.0 112.0 +0.0%
JsoniterBench.jSumPrices size=64 8,120.3 8,120.3 -0.0%
OrderJsoniterBench.eoModifyStreet size=64 5,432.1 5,432.1 -0.0%
PrismBench.eoGetRightPresent - 16.0 16.0 +0.0%
OptionalBench.mModify_6 - 496.0 496.0 +0.0%
AvroVulcanBench.encode_bridged - 1,208.0 1,208.0 -0.0%
AvroVulcanBench.fieldGet_native - 432.0 432.0 -0.0%
FoldBench.eoFoldMap size=512 14,080.7 14,080.7 -0.0%
SetterBench.mModify_3 - 168.0 168.0 +0.0%
OrderJsoniterBench.naiveModifyStreet size=64 30,058.0 30,058.0 +0.0%
AvroVulcanBench.encode_native - 56.0 56.0 +0.0%
GenericsBench.rawPrismGetHit - 16.0 16.0 +0.0%
LensBench.mReplace - 40.0 40.0 +0.0%
MultiFocusCollectBench.naive_tuple3Rewrite - 96.0 96.0 -0.0%
ReviewBench.eoReverseGet_3 - 72.0 72.0 -0.0%
IsoBench.mGet - 32.0 32.0 +0.0%
PowerSeriesPrismBench.monocle_sparse size=8 1,952.0 1,952.0 +0.0%
FoldBench.mFoldPrices size=8 216.0 216.0 +0.0%
OrderJsoniterBench.naiveSumPrices size=64 29,337.3 29,337.3 +0.0%
CompositionBench.buildLens1 - 72.0 72.0 -0.0%
TraversalBench.mFoldPrices size=8 2,016.0 2,016.0 +0.0%
PlatedBench.eoTransformDeep n=64 7,184.0 7,184.0 -0.0%
GenericsBench.genLensModify - 24.0 24.0 +0.0%
GenericsBench.handPrismGetHit - 16.0 16.0 +0.0%
FoldBench.mFoldMap size=64 768.0 768.0 +0.0%
SetterBench.mModify_6 - 288.0 288.0 +0.0%
MultiFocusBench.eoFold_powerEach size=4 328.0 328.0 +0.0%
ReviewBench.naiveBuild_6 - 120.0 120.0 -0.0%
GenericsBench.handLensModify - 24.0 24.0 +0.0%
OptionalBench.mModify_loyalty - 112.0 112.0 +0.0%
OptionalBench.eoReplace_0 - 40.0 40.0 +0.0%
ZioDiBench.handDrillGet - 120.0 120.0 +0.0%
SchemesBench.handAna - 163,816.1 163,816.1 +0.0%
CapsBench.modifyDeepCap - 176.0 176.0 -0.0%
ReviewBench.naiveBuild_0 - 24.0 24.0 +0.0%
JsoniterBench.jModifyId size=8 968.0 968.0 -0.0%
PrismBench.mReverseGet - 16.0 16.0 -0.0%
CompositionBench.buildLens6 - 352.0 352.0 -0.0%
OptionalBench.mReplace_loyalty - 88.0 88.0 +0.0%
IsoBench.eoReverseGet - 32.0 32.0 +0.0%
OpticBuildBench.build - 184.0 184.0 +0.0%
PrismBench.eoRightReverseGet - 16.0 16.0 -0.0%
SchemesBench.drosteAna - 327,632.3 327,632.3 +0.0%
MultiFocusCollectBench.eoCollectList_listSum - 56.0 56.0 +0.0%
SetterBench.mModify_0 - 24.0 24.0 +0.0%
SetterBench.eoModify_orderId - 40.0 40.0 -0.0%
IsoBench.mReverseGet - 32.0 32.0 +0.0%
ZioDiBench.eoDrillModify - 528.0 528.0 +0.0%
SchemesBench.eoAna - 589,712.7 589,712.7 -0.0%
OptionalBench.eoModify_0 - 112.0 112.0 +0.0%
MultiFocusCollectBench.naive_constSum - 16.0 16.0 -0.0%
OptionalBench.mReplace_0 - 40.0 40.0 +0.0%
MultiFocusBench.eoModify_multiFocus size=4 1,320.0 1,320.0 -0.0%
AvroJsonBridgeBench.naiveClickToJson - 5,856.0 5,856.0 +0.0%
LensBench.eoModify - 40.0 40.0 -0.0%
SchemesBench.eoCata - 197,568.6 197,568.6 +0.0%
CapsBench.modifyDerivedHeld - 40.0 40.0 -0.0%
AvroJsonBridgeBench.eoClickToAvro - 9,400.0 9,400.0 +0.0%
ZioDiBench.eoServiceReplace - 456.0 456.0 +0.0%
GenericsBench.rawPrismModifyHit - 24.0 24.0 -0.0%
MultiFocusBench.eoModify_multiFocus size=32 8,600.0 8,600.0 -0.0%
ZioDiBench.handServiceGet - 120.0 120.0 +0.0%
OptionalBench.eoReplace_loyalty - 88.0 88.0 -0.0%
SchemesBench.drosteHylo - 328,640.5 328,640.5 -0.0%
MultiFocusCollectBench.naive_zipMeanBroadcast - 1,176.0 1,176.0 +0.0%
LensBench.mModifyDeep - 176.0 176.0 +0.0%
FoldBench.eoFoldPrices size=8 216.0 216.0 -0.0%
TraversalBench.eoFoldPrices size=8 216.0 216.0 +0.0%
PlatedBench.visitorTransformExpr n=64 5,608.0 5,608.0 -0.0%
ReviewBench.eoReverseGet_6 - 120.0 120.0 +0.0%
CompositionBench.reuseLens1 - 40.0 40.0 +0.0%
FoldBench.eoFoldPrices size=64 1,560.0 1,560.0 -0.0%
PrismBench.mRightReverseGet - 16.0 16.0 -0.0%
KyoDiBench.handMapDrillModify - 216.0 216.0 +0.0%
OrderCirceBench.eoStreet size=8 2,720.0 2,720.0 -0.0%
PrismBench.eoReverseGet - 16.0 16.0 -0.0%
CapsBench.modifyCap - 40.0 40.0 -0.0%
SchemesBench.drosteCata - 164,824.3 164,824.3 +0.0%
IsoBench.eoGet - 32.0 32.0 +0.0%
CapsBench.modifyDerivedPerCall - 40.0 40.0 +0.0%
LensBench.mModify - 40.0 40.0 +0.0%
CapsBench.modifyDirect - 40.0 40.0 -0.0%
PowerSeriesBench.naive_powerEach size=16 504.0 504.0 -0.0%
ReviewBench.naiveBuild_3 - 72.0 72.0 +0.0%
SetterBench.eoModify_0 - 24.0 24.0 -0.0%
GenericsBench.rawLensModify - 24.0 24.0 +0.0%
GenericsBench.genPrismModifyHit - 24.0 24.0 -0.0%
FoldBench.mFoldPrices size=64 1,560.0 1,560.0 +0.0%
PrismBench.mGetRightPresent - 16.0 16.0 -0.0%
LensBench.eoModifyDeep - 152.0 152.0 +0.0%
MultiFocusBench.naive_listMap size=4 296.0 296.0 -0.0%
AvroVulcanBench.rootGet_bridged - 1,472.0 1,472.0 -0.0%
AvroJsonBridgeBench.naiveWideToJson - 4,376.0 4,376.0 +0.0%
ReviewBench.eoReverseGet_0 - 24.0 24.0 +0.0%
CompositionBench.reuseLeaf - 24.0 24.0 -0.0%
PowerSeriesBench.naive_powerEach size=4 168.0 168.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=8 128.0 128.0 +0.0%
MultiFocusCollectBench.eoCollectMap_zipMean - 880.0 880.0 +0.0%
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 128.0 128.0 +0.0%
OptionalBench.eoModify_3 - 160.0 160.0 +0.0%
TraversalBench.eoFoldPrices size=64 1,560.0 1,560.0 +0.0%
AffineFoldBench.eoGetOption_0_asOptional - 16.0 16.0 -0.0%
GenericsBench.genPrismGetHit - 16.0 16.0 -0.0%
AvroVulcanBench.decode_bridged - 880.0 880.0 -0.0%
KyoDiBench.eoEnvFocus - 312.0 312.0 -0.0%
OrderAvroBench.naiveModifyNames size=8 3,752.0 3,752.0 -0.0%
LensBench.eoReplace - 40.0 40.0 -0.0%
MultiFocusBench.naive_listMap size=32 2,088.0 2,088.0 +0.0%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 224.0 224.0 +0.0%
CompositionBench.buildLens3 - 184.0 184.0 +0.0%
SetterBench.eoModify_6 - 120.0 120.0 -0.0%
OrderCirceBench.naiveNames size=8 17,808.1 17,808.1 -0.0%
MultiFocusBench.naive_sumQty size=32 256.0 256.0 -0.0%
OptionalBench.eoModify_loyalty - 112.0 112.0 +0.0%
Timing (ns/op) — directional only, same-VM but shared runner
Benchmark params base head Δ
MultiFocusCollectBench.naive_tuple6Rewrite - 21.7 14.6 -32.8%
CompositionBench.reuseLensOptional3 - 59.0 76.9 +30.3%
PlatedBench.visitorUniverseJson n=4096 190,747.6 149,141.2 -21.8%
MultiFocusBench.naive_listMap size=256 2,090.7 2,430.5 +16.3%
OrderAvroBench.naiveModifyNames size=64 7,837.5 9,044.9 +15.4%
TraversalBench.eoModify size=8 113.5 96.9 -14.6%
CapsBench.modifyDeepDirect - 39.7 33.9 -14.5%
OrderAvroBench.monocleModifyStreet size=64 7,283.3 6,287.8 -13.7%
SetterBench.eoModify_3 - 11.8 13.4 +13.4%
OrderCirceBench.eoNamesIor size=64 34,015.8 38,207.8 +12.3%
AvroBytesBench.eoModifyCountry - 455.9 402.3 -11.8%
TraversalBench.eoFoldNested size=8 59.8 52.9 -11.5%
PlatedBench.mUniverseExpr n=512 184,828.8 163,779.6 -11.4%
JsoniterBench.jReadId size=8 35.4 38.5 +8.7%
OrderCirceBench.directStreet size=64 1,131.5 1,046.7 -7.5%
OrderCirceBench.eoStreet size=64 1,061.4 1,138.7 +7.3%
PowerSeriesPrismBench.eoModify_sparse size=2048 24,948.2 23,196.1 -7.0%
OrderCirceBench.eoNamesIor size=8 5,025.1 4,676.5 -6.9%
AvroJsonBridgeBench.eoWideToAvro - 1,124.0 1,047.9 -6.8%
TraversalBench.eoFoldNested size=512 5,138.0 5,478.9 +6.6%
OrderCirceBench.hcursorStreet size=64 1,200.8 1,123.1 -6.5%
JsoniterBench.jReadStreet size=8 195.8 208.3 +6.4%
AvroVulcanBench.rootGet_native - 190.8 179.2 -6.1%
OrderCirceBench.eoNamesIor size=512 269,619.6 285,451.0 +5.9%
OrderCirceBench.eoStreet size=8 1,145.2 1,080.1 -5.7%
OrderCirceBench.hcursorStreet size=8 1,116.9 1,176.3 +5.3%
GenericsBench.handPrismModifyHit - 2.8 3.0 +5.3%
JsoniterBench.jReadId size=64 38.6 36.7 -5.1%
AvroVulcanBench.encode_vulcanRaw - 257.0 244.0 -5.0%
OpticBuildBench.reuseUse - 1,100.8 1,050.8 -4.5%
TraversalBench.mFoldPrices size=64 2,105.1 2,198.9 +4.5%
MultiFocusBench.eoModify_multiFocus size=1024 51,859.4 54,152.7 +4.4%
OrderAvroBench.naiveModifyStreet size=512 56,536.9 54,097.2 -4.3%
JsoniterBench.jReadStreet size=512 200.3 208.8 +4.2%
OrderCirceBench.naiveNames size=512 200,696.3 208,988.1 +4.1%
OrderAvroBench.eoReadStreet size=512 38.3 39.8 +4.1%
JsoniterBench.jReplaceId size=8 109.6 105.2 -4.0%
PowerSeriesNestedBench.monocle_nested size=4 1,236.8 1,285.9 +4.0%
JsoniterBench.cModifyId size=512 439,217.8 421,914.4 -3.9%
CompositionBench.buildLensOptional3 - 19.1 18.4 -3.9%
GetterBench.mGet_6 - 27.6 28.7 +3.9%
FoldBench.mFoldMap size=512 4,008.8 3,857.1 -3.8%
PowerSeriesBench.monocle_powerEach size=4096 180,217.6 186,907.2 +3.7%
OrderCirceBench.hcursorNames size=8 4,352.2 4,190.7 -3.7%
KyoDiBench.handVarUpdate - 50.6 52.5 +3.7%
ZioDiBench.handDrillModify - 110.9 106.8 -3.7%
PlatedBench.eoUniverseExpr n=4096 104,065.9 100,266.7 -3.7%
JsoniterBench.cReadId size=512 206,658.2 214,139.8 +3.6%
OrderAvroBench.naiveModifyStreet size=8 1,003.5 967.6 -3.6%
OrderJsoniterBench.eoSumPrices size=512 86,789.8 83,683.9 -3.6%
AvroJsonBridgeBench.eoWideToJson - 735.8 709.6 -3.6%
JsoniterBench.cReadStreet size=8 4,125.5 4,272.0 +3.6%
OrderCirceBench.eoStreetIor size=8 1,087.4 1,124.9 +3.5%
SetterBench.mModify_orderId - 3.2 3.3 +3.4%
PowerSeriesPrismBench.naive_sparse size=2048 5,256.4 5,075.9 -3.4%
PowerSeriesBench.naive_powerEach size=4096 18,978.5 18,336.6 -3.4%
OptionalBench.eoModify_6 - 143.0 147.8 +3.3%
MultiFocusBench.eoModify_powerEach size=32 1,040.9 1,074.8 +3.3%
ZioDiBench.handServiceReplace - 92.9 89.9 -3.2%
JsoniterBench.cReplaceId size=64 53,170.3 54,872.7 +3.2%
PowerSeriesPrismBench.monocle_sparse size=32 1,063.5 1,097.5 +3.2%
MultiFocusBench.eoModify_powerEach size=4 200.1 193.8 -3.2%
AvroJsonBridgeBench.naiveWideToAvro - 989.2 1,020.3 +3.1%
AvroBytesBench.eoGraftPayload - 165.1 159.9 -3.1%
JsoniterBench.jSumPrices size=512 83,080.2 85,664.3 +3.1%
JsoniterBench.cReplaceId size=8 8,988.2 8,713.2 -3.1%
OrderCirceBench.eoStreetIor size=512 1,062.4 1,094.9 +3.1%
OrderJsoniterBench.eoModifyStreet size=8 305.6 296.5 -3.0%
PowerSeriesNestedBench.eoModify_nested size=16 1,575.2 1,529.3 -2.9%
AvroVulcanBench.fieldGet_bridged - 108.1 105.0 -2.9%
MultiFocusBench.eoFold_powerEach size=1024 16,038.9 15,584.1 -2.8%
OrderCirceBench.directNames size=512 256,529.5 249,358.6 -2.8%
OrderAvroBench.eoModifyStreet size=8 127.1 123.6 -2.8%
OrderCirceBench.monocleStreet size=64 22,648.0 22,028.2 -2.7%
PowerSeriesPrismBench.eoModify_sparse size=32 369.0 359.0 -2.7%
KyoDiBench.eoVarUpdateFocus - 53.5 54.9 +2.7%
OrderJsoniterBench.monocleSumPrices size=64 17,125.6 16,670.5 -2.7%
JsoniterBench.cReadId size=8 4,020.7 4,126.2 +2.6%
AvroBytesBench.prunedReadPartner - 659.4 642.1 -2.6%
PowerSeriesBench.monocle_powerEach size=4 261.2 254.5 -2.6%
OrderCirceBench.eoStreet size=512 1,094.3 1,066.5 -2.5%
OptionalBench.mModify_3 - 72.0 73.9 +2.5%
OrderCirceBench.hcursorNames size=64 30,506.1 31,263.9 +2.5%
OrderAvroBench.monocleModifyNames size=8 1,449.1 1,484.9 +2.5%
LensBench.mReplace - 3.4 3.5 +2.4%
AffineFoldBench.eoGetOption_6 - 33.5 32.7 -2.4%
AvroVulcanBench.decode_vulcanRaw - 216.4 221.7 +2.4%
PowerSeriesNestedBench.eoModify_nested size=64 4,756.5 4,871.3 +2.4%
MultiFocusCollectBench.naive_tuple3Rewrite - 7.8 7.6 -2.4%
MultiFocusBench.naive_sumQty size=1024 4,362.1 4,466.1 +2.4%
MultiFocusBench.eoModify_multiFocus size=256 11,785.5 12,064.3 +2.4%
FoldBench.mFoldMap size=8 22.6 23.2 +2.3%
AvroBytesBench.eoReadPartner - 221.2 216.0 -2.3%
PlatedBench.mUniverseExpr n=4096 2,696,974.6 2,760,092.3 +2.3%
KyoDiBench.handEnvUse - 66.5 65.0 -2.3%
OrderAvroBench.monocleModifyStreet size=8 976.3 998.5 +2.3%
OrderAvroBench.eoModifyNames size=64 4,206.1 4,301.3 +2.3%
OrderJsoniterBench.eoSumPrices size=8 1,427.9 1,459.9 +2.2%
CompositionBench.buildLens1 - 5.4 5.3 -2.2%
AvroDecodeReuseBench.cachedDecodeRecord - 408.5 417.1 +2.1%
OpticBuildBench.buildAndUse - 1,137.5 1,113.7 -2.1%
OrderCirceBench.directNames size=8 4,161.1 4,247.3 +2.1%
AvroBytesBench.eoModifyPartner - 539.0 550.0 +2.0%
AffineFoldBench.eoGetOption_0_empty - 0.9 0.9 +2.0%
TraversalBench.mModify size=512 34,477.7 33,786.4 -2.0%
MultiFocusBench.eoModify_powerEach size=1024 35,349.5 36,048.5 +2.0%
PlatedBench.mUniverseJson n=4096 3,097,407.8 3,036,777.0 -2.0%
PowerSeriesBench.eoModify_powerEach size=4 126.8 129.3 +2.0%
PlatedBench.mUniverseExpr n=64 14,604.6 14,885.9 +1.9%
GetterBench.eoGet_orderId - 0.9 0.9 +1.9%
OrderJsoniterBench.eoReadStreet size=512 209.7 213.7 +1.9%
OrderCirceBench.eoNames size=512 264,993.2 259,910.3 -1.9%
OrderCirceBench.hcursorNames size=512 248,735.5 253,482.2 +1.9%
OrderCirceBench.monocleNames size=512 246,175.3 241,508.8 -1.9%
GenericsBench.rawPrismGetHit - 1.8 1.8 +1.9%
JsoniterBench.jModifyId size=64 470.3 479.1 +1.9%
PowerSeriesPrismBench.eoModify_sparse size=8 120.3 122.5 +1.8%
TraversalBench.mModify size=8 289.4 294.6 +1.8%
GenericsBench.handPrismGetMiss - 1.1 1.1 -1.8%
JsoniterBench.cModifyId size=64 52,849.4 53,780.5 +1.8%
PlatedBench.mUniverseJson n=512 209,375.2 205,758.1 -1.7%
OrderAvroBench.naiveModifyNames size=512 71,105.5 69,884.3 -1.7%
MultiFocusBench.eoModify_powerEach size=256 8,469.9 8,615.0 +1.7%
PlatedBench.mTransformExpr n=4096 168,020.5 170,891.1 +1.7%
JsoniterBench.cReadId size=64 26,348.6 26,795.1 +1.7%
JsoniterBench.jReplaceId size=64 467.5 475.3 +1.7%
OrderJsoniterBench.eoModifyStreet size=512 3,918.5 3,983.1 +1.6%
OrderJsoniterBench.eoReadStreet size=8 201.6 198.3 -1.6%
PlatedBench.visitorUniverseJson n=64 2,149.8 2,184.8 +1.6%
SchemesBench.eoHylo - 86,750.2 85,339.6 -1.6%
OrderJsoniterBench.naiveSumPrices size=8 2,025.1 1,992.6 -1.6%
FoldBench.eoFoldMap size=64 366.1 371.8 +1.6%
ReviewBench.naiveBuild_6 - 11.1 10.9 -1.6%
PlatedBench.visitorTransformDeep n=64 440.6 433.7 -1.6%
OrderAvroBench.eoModifyNames size=8 574.5 583.5 +1.6%
AvroJsonBridgeBench.naiveClickToAvro - 1,524.8 1,548.8 +1.6%
OptionalBench.mModify_0_empty - 1.4 1.4 -1.6%
PrismBench.eoGetRightPresent - 2.4 2.4 +1.5%
ReviewBench.naiveBuild_0 - 2.2 2.3 +1.5%
OrderCirceBench.naiveStreet size=512 188,135.1 185,275.6 -1.5%
LensBench.mGet - 1.3 1.2 -1.5%
AffineFoldBench.eoGetOption_0 - 0.9 0.9 +1.5%
AffineFoldBench.mGetOption_loyalty_empty - 1.1 1.0 -1.5%
OrderCirceBench.directStreet size=512 1,070.3 1,054.3 -1.5%
OptionalBench.eoModify_0_empty - 1.3 1.3 +1.5%
PlatedBench.eoUniverseJson n=64 3,353.9 3,403.6 +1.5%
OptionalBench.mReplace_loyalty - 7.5 7.6 +1.5%
PowerSeriesBench.monocle_powerEach size=256 22,299.6 21,973.8 -1.5%
IsoBench.mGet - 3.7 3.8 +1.5%
PowerSeriesPrismBench.monocle_sparse size=2048 108,716.1 110,295.3 +1.5%
OrderAvroBench.eoReadStreet size=8 38.3 38.8 +1.4%
AvroBytesBench.naiveReadCountry - 1,724.9 1,749.5 +1.4%
JsoniterBench.jMiss size=64 185.3 182.7 -1.4%
TraversalBench.eoModify size=512 7,499.2 7,600.8 +1.4%
JsoniterBench.cModifyId size=8 8,826.8 8,946.3 +1.4%
OrderJsoniterBench.monocleReadStreet size=64 11,918.0 12,079.0 +1.4%
PowerSeriesBench.naive_powerEach size=1024 5,253.1 5,182.2 -1.4%
OptionalBench.mModify_0 - 21.6 21.9 +1.4%
PowerSeriesNestedBench.eoModify_nested size=4 718.0 708.5 -1.3%
SetterBench.eoModify_orderId - 3.2 3.2 -1.3%
KyoDiBench.eoMapDrillModify - 41.1 40.5 -1.3%
OrderCirceBench.monocleStreet size=8 3,332.2 3,375.7 +1.3%
JsoniterBench.jModifyId size=512 3,808.7 3,858.4 +1.3%
SetterBench.mModify_3 - 28.4 28.7 +1.3%
OrderJsoniterBench.eoReadStreet size=64 202.7 200.0 -1.3%
IsoBench.eoReverseGet - 3.0 3.1 +1.3%
LensBench.eoGet - 1.1 1.1 +1.3%
GetterBench.eoGet_6 - 34.9 35.4 +1.3%
GenericsBench.handLensGet - 1.1 1.1 +1.3%
PlatedBench.visitorTransformDeep n=4096 41,357.6 41,880.6 +1.3%
OrderAvroBench.naiveReadStreet size=64 4,463.5 4,407.4 -1.3%
SchemesBench.handAna - 20,113.8 20,364.5 +1.2%
JsoniterBench.cReplaceId size=512 419,431.4 424,657.5 +1.2%
MultiFocusBench.eoFold_powerEach size=256 3,449.3 3,491.7 +1.2%
PowerSeriesNestedBench.monocle_nested size=64 8,866.3 8,757.8 -1.2%
AvroDecodeReuseBench.confluentRecordReaderFresh - 1,407.7 1,390.6 -1.2%
PowerSeriesBench.eoModify_powerEach size=16 264.6 267.8 +1.2%
AvroJsonBridgeBench.eoClickToJson - 2,900.2 2,935.2 +1.2%
OrderCirceBench.eoStreetIor size=64 1,079.3 1,092.3 +1.2%
GenericsBench.handPrismGetHit - 2.1 2.1 +1.2%
CompositionBench.buildLens6 - 37.3 36.9 -1.2%
OrderCirceBench.monocleNames size=8 3,919.6 3,873.2 -1.2%
PlatedBench.eoUniverseDeep n=64 1,922.7 1,945.4 +1.2%
GenericsBench.handLensModify - 2.8 2.8 +1.2%
PowerSeriesNestedBench.monocle_nested size=16 2,864.4 2,897.8 +1.2%
AvroVulcanBench.encode_native - 13.6 13.7 +1.2%
MultiFocusCollectBench.naive_listSum - 36.3 36.7 +1.2%
PowerSeriesBench.monocle_powerEach size=16 644.9 637.5 -1.2%
AvroDecodeReuseBench.confluentRecordReader - 441.2 436.2 -1.1%
OptionalBench.eoReplace_0 - 4.7 4.7 +1.1%
AvroVulcanBench.decode_native - 18.9 18.7 -1.1%
AvroVulcanBench.encode_bridged - 247.3 244.5 -1.1%
JsoniterBench.jReplaceId size=512 3,664.3 3,704.8 +1.1%
OptionalBench.mModify_loyalty_empty - 1.5 1.4 -1.1%
GenericsBench.genLensModify - 3.6 3.7 +1.1%
PowerSeriesNestedBench.naive_nested size=4 128.7 127.3 -1.1%
OrderCirceBench.naiveStreet size=64 22,360.1 22,117.2 -1.1%
ZioDiBench.handDrillGet - 14.8 15.0 +1.1%
PlatedBench.visitorUniverseDeep n=4096 58,504.4 59,133.9 +1.1%
IsoBench.mReverseGet - 3.2 3.2 +1.1%
PowerSeriesPrismBench.monocle_sparse size=128 3,903.5 3,861.9 -1.1%
PrismBench.mGetOptionPresent - 1.1 1.1 -1.1%
OrderJsoniterBench.monocleSumPrices size=512 454,378.1 459,169.9 +1.1%
CapsBench.getCap - 1.3 1.2 -1.0%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.9 0.9 +1.0%
OrderJsoniterBench.monocleModifyStreet size=512 166,369.2 164,700.9 -1.0%
OptionalBench.mReplace_0 - 3.7 3.7 +1.0%
OrderJsoniterBench.monocleModifyStreet size=64 20,356.5 20,160.2 -1.0%
AvroBytesBench.eoSliceGraftPayload - 329.0 332.2 +1.0%
OptionalBench.mModify_6 - 121.7 122.8 +1.0%
OrderCirceBench.naiveNames size=64 23,881.6 24,109.2 +1.0%
PlatedBench.eoTransformExpr n=512 16,344.3 16,497.3 +0.9%
SetterBench.mModify_0 - 2.4 2.4 +0.9%
MultiFocusBench.naive_sumQty size=256 794.5 787.2 -0.9%
OptionalBench.mModify_loyalty - 16.8 16.9 +0.9%
OrderAvroBench.eoModifyStreet size=64 121.6 122.7 +0.9%
AvroVulcanBench.fieldGet_native - 106.9 105.9 -0.9%
JsoniterBench.cReadStreet size=512 209,245.9 211,145.7 +0.9%
OrderAvroBench.monocleModifyNames size=64 10,324.6 10,416.3 +0.9%
OrderJsoniterBench.naiveReadStreet size=64 11,837.4 11,942.3 +0.9%
OrderJsoniterBench.monocleModifyStreet size=8 3,305.6 3,276.3 -0.9%
OrderCirceBench.monocleStreet size=512 186,531.2 184,882.3 -0.9%
OrderCirceBench.eoNames size=8 4,481.2 4,441.8 -0.9%
PrismBench.eoGetRightAbsent - 1.1 1.1 -0.9%
OrderAvroBench.monocleModifyNames size=512 101,509.7 102,399.4 +0.9%
PowerSeriesNestedBench.naive_nested size=16 379.2 375.9 -0.9%
PlatedBench.eoTransformExpr n=4096 131,955.9 133,095.7 +0.9%
OrderJsoniterBench.eoModifyStreet size=64 659.6 654.0 -0.8%
PowerSeriesBench.eoModify_powerEach size=1024 13,045.1 13,155.6 +0.8%
OrderJsoniterBench.naiveReadStreet size=512 93,327.1 94,109.0 +0.8%
OrderAvroBench.eoModifyStreet size=512 121.5 122.5 +0.8%
SchemesBench.handCata - 13,154.8 13,047.0 -0.8%
LensBench.eoModify - 3.9 3.9 -0.8%
OrderCirceBench.eoNames size=64 31,530.3 31,788.0 +0.8%
MultiFocusCollectBench.naive_constSum - 1.8 1.8 -0.8%
AvroBytesBench.prunedReadCountry - 990.6 998.7 +0.8%
OrderCirceBench.monocleNames size=64 25,402.5 25,606.6 +0.8%
SchemesBench.drosteAna - 48,671.5 49,057.7 +0.8%
MultiFocusBench.eoFold_powerEach size=32 399.8 402.9 +0.8%
FoldBench.mFoldPrices size=8 44.4 44.8 +0.8%
PlatedBench.eoTransformDeep n=512 11,910.4 11,817.4 -0.8%
PlatedBench.visitorUniverseExpr n=64 820.0 826.4 +0.8%
OrderCirceBench.directStreet size=8 1,083.6 1,075.4 -0.8%
PowerSeriesPrismBench.eoModify_sparse size=512 5,717.4 5,674.6 -0.7%
CapsBench.modifyDeepCap - 30.1 29.9 -0.7%
PlatedBench.eoUniverseExpr n=512 14,445.9 14,337.9 -0.7%
PlatedBench.eoTransformDeep n=4096 125,365.7 124,434.6 -0.7%
AffineFoldBench.mGetOption_0 - 0.9 0.9 +0.7%
CapsBench.getDirect - 1.1 1.1 -0.7%
OrderJsoniterBench.monocleReadStreet size=512 94,096.7 93,413.1 -0.7%
AvroBytesBench.naivePassthroughPayload - 5,063.4 5,026.7 -0.7%
AvroDecodeReuseBench.freshDecodeRecord - 1,365.2 1,375.0 +0.7%
OrderJsoniterBench.monocleReadStreet size=8 1,863.4 1,876.8 +0.7%
TraversalBench.mFoldPrices size=8 347.6 350.1 +0.7%
PowerSeriesPrismBench.monocle_sparse size=8 332.5 334.8 +0.7%
GenericsBench.rawLensGet - 0.6 0.6 +0.7%
OrderCirceBench.directNames size=64 31,035.6 31,252.7 +0.7%
PlatedBench.eoUniverseDeep n=512 14,514.7 14,615.9 +0.7%
GetterBench.eoGet_0 - 0.9 0.9 +0.7%
OrderJsoniterBench.nativeReadStreet size=512 34,742.4 34,976.8 +0.7%
JsoniterBench.jModifyId size=8 111.7 110.9 -0.7%
OptionalBench.eoReplace_loyalty - 7.7 7.6 -0.7%
AffineFoldBench.eoGetOption_loyalty - 1.1 1.0 -0.7%
TraversalBench.mModify size=64 1,773.2 1,785.1 +0.7%
PrismBench.eoGetOptionAbsent - 0.9 0.9 -0.7%
PlatedBench.visitorUniverseDeep n=512 7,250.2 7,297.9 +0.7%
PrismBench.mReverseGet - 2.5 2.5 -0.6%
CapsBench.foldMapDerivedPerCall - 21.7 21.9 +0.6%
MultiFocusBench.naive_listMap size=1024 8,319.8 8,266.9 -0.6%
OrderJsoniterBench.nativeReadStreet size=8 819.9 825.1 +0.6%
PrismBench.eoRightReverseGet - 2.5 2.5 -0.6%
AvroBytesBench.eoReadCountry - 177.3 178.4 +0.6%
PowerSeriesBench.monocle_powerEach size=64 2,122.8 2,135.8 +0.6%
FoldBench.eoFoldPrices size=512 2,766.6 2,783.5 +0.6%
OrderAvroBench.naiveReadStreet size=8 517.9 521.1 +0.6%
PowerSeriesNestedBench.monocle_nested size=1024 251,914.3 250,394.8 -0.6%
PlatedBench.mTransformExpr n=512 15,790.3 15,695.3 -0.6%
GenericsBench.rawPrismModifyHit - 2.2 2.2 -0.6%
JsoniterBench.jMiss size=512 183.5 182.4 -0.6%
CapsBench.getDerivedPerCall - 1.7 1.6 -0.6%
CapsBench.modifyDerivedHeld - 5.3 5.3 -0.6%
SchemesBench.eoAna - 105,410.4 104,796.2 -0.6%
JsoniterBench.jSumPrices size=8 1,462.8 1,454.3 -0.6%
OrderJsoniterBench.naiveReadStreet size=8 1,899.0 1,910.0 +0.6%
AvroBytesBench.naiveModifyPartner - 3,015.0 3,032.4 +0.6%
CompositionBench.reuseLens3 - 45.8 46.1 +0.6%
ReviewBench.eoReverseGet_3 - 20.1 20.0 -0.6%
MultiFocusCollectBench.naive_zipMeanBroadcast - 166.5 167.5 +0.6%
PowerSeriesPrismBench.naive_sparse size=128 327.3 325.5 -0.6%
PrismBench.mGetRightAbsent - 1.2 1.2 +0.6%
CompositionBench.reuseLens6 - 131.5 132.2 +0.6%
ZioDiBench.eoServiceReplace - 82.2 82.7 +0.5%
SetterBench.mModify_6 - 64.6 65.0 +0.5%
JsoniterBench.cReadStreet size=64 26,760.5 26,617.0 -0.5%
OrderCirceBench.naiveStreet size=8 3,361.9 3,379.9 +0.5%
PowerSeriesBench.monocle_powerEach size=1024 59,979.2 59,670.2 -0.5%
OptionalBench.eoModify_0 - 21.8 21.9 +0.5%
PlatedBench.visitorUniverseJson n=512 21,341.2 21,232.5 -0.5%
PowerSeriesBench.eoModify_powerEach size=64 827.4 831.6 +0.5%
MultiFocusBench.eoFold_powerEach size=4 87.3 87.7 +0.5%
PlatedBench.visitorUniverseExpr n=4096 53,657.3 53,924.4 +0.5%
AffineFoldBench.mGetOption_0_empty - 0.9 1.0 +0.5%
PlatedBench.mTransformExpr n=64 2,594.0 2,606.8 +0.5%
SchemesBench.handHylo - 9,551.8 9,505.2 -0.5%
ZioDiBench.handServiceGet - 15.0 15.1 +0.5%
ZioDiBench.eoDrillModify - 114.4 114.9 +0.5%
TraversalBench.eoModify size=64 873.1 868.8 -0.5%
OrderJsoniterBench.nativeSumPrices size=64 8,062.1 8,100.9 +0.5%
TraversalBench.eoFoldNested size=64 552.0 554.7 +0.5%
OrderAvroBench.monocleReadStreet size=64 4,426.0 4,447.0 +0.5%
CapsBench.foldMapDirect - 21.2 21.3 +0.5%
PowerSeriesNestedBench.eoModify_nested size=1024 75,011.9 74,665.9 -0.5%
OrderJsoniterBench.nativeReadStreet size=64 4,486.3 4,466.1 -0.4%
CapsBench.modifyCap - 4.2 4.2 -0.4%
OrderJsoniterBench.monocleSumPrices size=8 2,574.7 2,586.0 +0.4%
AvroJsonBridgeBench.eoClickToAvro - 3,195.8 3,181.8 -0.4%
OrderAvroBench.monocleReadStreet size=8 516.0 518.2 +0.4%
MultiFocusBench.eoModify_multiFocus size=4 224.6 223.7 -0.4%
PowerSeriesBench.naive_powerEach size=256 1,623.3 1,630.2 +0.4%
PlatedBench.visitorTransformExpr n=512 7,590.1 7,622.1 +0.4%
PowerSeriesNestedBench.naive_nested size=64 1,325.8 1,331.3 +0.4%
ReviewBench.naiveBuild_3 - 6.6 6.6 +0.4%
JsoniterBench.cSumPrices size=64 43,332.2 43,510.8 +0.4%
IsoBench.eoGet - 3.5 3.5 +0.4%
CapsBench.getDeepDirect - 1.5 1.5 -0.4%
PowerSeriesNestedBench.monocle_nested size=256 92,331.1 92,701.0 +0.4%
OrderJsoniterBench.nativeSumPrices size=512 65,023.4 65,279.2 +0.4%
PlatedBench.eoTransformExpr n=64 2,049.9 2,041.9 -0.4%
ZioDiBench.eoDrillGet - 12.1 12.0 -0.4%
PlatedBench.mUniverseJson n=64 19,505.6 19,430.0 -0.4%
JsoniterBench.jReadStreet size=64 197.7 198.4 +0.4%
PrismBench.mGetOptionAbsent - 1.1 1.1 +0.4%
CapsBench.modifyDerivedPerCall - 4.5 4.6 +0.4%
PlatedBench.visitorTransformDeep n=512 4,920.2 4,901.5 -0.4%
OpticBuildBench.build - 46.7 46.9 +0.4%
SetterBench.eoModify_0 - 2.4 2.4 -0.4%
LensBench.mModify - 4.4 4.4 +0.4%
PowerSeriesPrismBench.eoModify_sparse size=128 1,360.9 1,365.9 +0.4%
AvroBytesBench.naiveModifyCountry - 2,729.1 2,739.0 +0.4%
PowerSeriesPrismBench.monocle_sparse size=512 33,843.4 33,720.5 -0.4%
AffineFoldBench.eoGetOption_3 - 14.8 14.7 -0.4%
OrderAvroBench.monocleReadStreet size=512 34,599.0 34,719.1 +0.3%
MultiFocusBench.naive_listMap size=4 33.7 33.5 -0.3%
AvroBytesBench.naiveReadPartner - 2,069.7 2,076.7 +0.3%
PlatedBench.eoUniverseJson n=4096 234,357.9 235,141.9 +0.3%
LensBench.mModifyDeep - 31.2 31.3 +0.3%
PlatedBench.eoUniverseExpr n=64 1,861.4 1,867.4 +0.3%
GetterBench.mGet_0 - 0.5 0.5 +0.3%
MultiFocusCollectBench.eoCollectMap_constSum - 2.1 2.1 -0.3%
CapsBench.getDerivedHeld - 2.4 2.4 -0.3%
PrismBench.mRightReverseGet - 2.5 2.5 -0.3%
JsoniterBench.cSumPrices size=512 354,638.7 353,544.8 -0.3%
GenericsBench.handPrismModifyMiss - 1.1 1.1 -0.3%
GenericsBench.genLensGet - 1.1 1.1 +0.3%
PrismBench.eoReverseGet - 2.5 2.4 -0.3%
PlatedBench.eoTransformDeep n=64 1,449.4 1,445.0 -0.3%
TraversalBench.mFoldPrices size=512 31,848.2 31,752.7 -0.3%
SchemesBench.drosteHylo - 65,318.7 65,129.6 -0.3%
FoldBench.mFoldPrices size=512 2,791.3 2,799.3 +0.3%
AffineFoldBench.mGetOption_6 - 24.7 24.7 +0.3%
PlatedBench.visitorUniverseDeep n=64 831.3 833.6 +0.3%
KyoDiBench.handMapDrillModify - 35.8 35.9 +0.3%
FoldBench.eoFoldMap size=8 21.1 21.1 -0.3%
CapsBench.modifyDirect - 3.9 3.9 -0.3%
OrderAvroBench.naiveReadStreet size=512 34,606.3 34,513.9 -0.3%
GenericsBench.genPrismModifyHit - 3.0 3.0 -0.3%
OrderAvroBench.naiveModifyStreet size=64 7,280.8 7,261.7 -0.3%
PowerSeriesNestedBench.eoModify_nested size=256 18,618.3 18,665.7 +0.3%
PowerSeriesBench.naive_powerEach size=64 398.2 397.2 -0.2%
OptionalBench.eoModify_loyalty_empty - 1.3 1.3 +0.2%
GenericsBench.rawLensModify - 2.2 2.2 +0.2%
PowerSeriesBench.eoModify_powerEach size=256 3,188.8 3,181.5 -0.2%
PowerSeriesPrismBench.naive_sparse size=512 1,193.8 1,191.1 -0.2%
ReviewBench.eoReverseGet_0 - 2.7 2.7 +0.2%
PlatedBench.visitorUniverseExpr n=512 6,739.5 6,754.8 +0.2%
OrderAvroBench.eoModifyNames size=512 37,716.2 37,798.4 +0.2%
FoldBench.eoFoldPrices size=8 44.2 44.1 -0.2%
KyoDiBench.eoEnvFocus - 61.2 61.1 -0.2%
PrismBench.mGetRightPresent - 2.5 2.5 -0.2%
GetterBench.eoGet_3 - 16.4 16.4 +0.2%
JsoniterBench.jMiss size=8 183.3 183.7 +0.2%
MultiFocusBench.eoModify_multiFocus size=32 1,413.4 1,410.6 -0.2%
AffineFoldBench.mGetOption_3 - 9.7 9.7 +0.2%
TraversalBench.eoFoldPrices size=8 44.4 44.5 +0.2%
AffineFoldBench.mGetOption_loyalty - 1.1 1.1 +0.2%
SchemesBench.eoCata - 78,270.8 78,423.7 +0.2%
SchemesBench.drosteCata - 39,115.0 39,190.7 +0.2%
PlatedBench.visitorTransformExpr n=64 992.0 990.1 -0.2%
PowerSeriesNestedBench.naive_nested size=1024 19,968.5 20,005.3 +0.2%
ReviewBench.eoReverseGet_6 - 35.1 35.2 +0.2%
OrderAvroBench.eoReadStreet size=64 38.3 38.2 -0.2%
CapsBench.foldMapDerivedHeld - 22.3 22.4 +0.2%
JsoniterBench.jReadId size=512 35.9 35.9 -0.2%
OrderJsoniterBench.naiveSumPrices size=512 98,163.8 98,006.3 -0.2%
CompositionBench.reuseLeaf - 3.0 3.0 -0.2%
AffineFoldBench.eoGetOption_loyalty_empty - 1.0 1.0 -0.2%
AvroJsonBridgeBench.naiveClickToJson - 2,980.1 2,984.6 +0.2%
FoldBench.mFoldMap size=64 343.0 343.5 +0.2%
GetterBench.mGet_orderId - 0.5 0.5 -0.1%
GenericsBench.genPrismGetMiss - 1.2 1.2 -0.1%
OrderJsoniterBench.eoSumPrices size=64 10,493.1 10,507.0 +0.1%
GetterBench.mGet_3 - 9.4 9.4 -0.1%
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 17.2 17.3 +0.1%
OrderCirceBench.hcursorStreet size=512 1,152.2 1,153.6 +0.1%
PlatedBench.eoUniverseJson n=512 27,554.8 27,525.6 -0.1%
JsoniterBench.cSumPrices size=8 6,446.8 6,453.4 +0.1%
AvroVulcanBench.rootGet_bridged - 456.9 457.4 +0.1%
TraversalBench.eoFoldPrices size=512 2,811.8 2,809.1 -0.1%
PowerSeriesBench.naive_powerEach size=16 99.6 99.5 -0.1%
MultiFocusCollectBench.eoCollectList_listSum - 66.8 66.9 +0.1%
ZioDiBench.eoServiceGet - 5.1 5.1 +0.1%
MultiFocusCollectBench.eoCollectMap_zipMean - 172.9 173.0 +0.1%
PowerSeriesBench.naive_powerEach size=4 26.4 26.4 +0.1%
AffineFoldBench.eoGetOption_0_asOptional - 2.3 2.3 -0.1%
MultiFocusBench.naive_sumQty size=4 7.5 7.5 -0.1%
GenericsBench.genPrismGetHit - 2.2 2.2 -0.1%
LensBench.eoReplace - 3.4 3.4 -0.1%
FoldBench.eoFoldPrices size=64 350.7 350.4 -0.1%
KyoDiBench.eoMapGet - 2.8 2.8 -0.1%
PlatedBench.visitorTransformExpr n=4096 64,892.4 64,940.8 +0.1%
OrderJsoniterBench.naiveModifyStreet size=512 164,862.2 164,982.9 +0.1%
GenericsBench.genPrismModifyMiss - 1.2 1.2 +0.1%
OrderCirceBench.naiveNames size=8 3,516.5 3,514.2 -0.1%
PowerSeriesNestedBench.naive_nested size=256 5,304.9 5,308.3 +0.1%
PowerSeriesPrismBench.naive_sparse size=8 25.3 25.3 +0.1%
PowerSeriesPrismBench.naive_sparse size=32 83.4 83.4 -0.1%
OrderJsoniterBench.naiveModifyStreet size=8 3,306.7 3,304.9 -0.1%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 28.9 28.9 +0.0%
PrismBench.eoGetOptionPresent - 1.0 1.0 +0.0%
JsoniterBench.jSumPrices size=64 10,631.5 10,626.5 -0.0%
AvroVulcanBench.decode_bridged - 223.5 223.4 -0.0%
FoldBench.mFoldPrices size=64 352.1 352.2 +0.0%
OptionalBench.eoModify_loyalty - 16.5 16.5 +0.0%
CapsBench.getDeepCap - 1.6 1.6 -0.0%
KyoDiBench.handMapGet - 2.2 2.2 -0.0%
CompositionBench.buildLens3 - 20.6 20.6 +0.0%
OrderAvroBench.monocleModifyStreet size=512 56,027.8 56,006.8 -0.0%
PlatedBench.eoUniverseDeep n=4096 99,278.7 99,314.4 +0.0%
LensBench.eoModifyDeep - 33.9 33.9 -0.0%
FoldBench.eoFoldMap size=512 4,003.6 4,002.3 -0.0%
OptionalBench.eoModify_3 - 58.8 58.8 -0.0%
CompositionBench.reuseLens1 - 16.5 16.5 -0.0%
OrderJsoniterBench.naiveModifyStreet size=64 20,059.3 20,064.4 +0.0%
PowerSeriesBench.eoModify_powerEach size=4096 53,627.9 53,641.1 +0.0%
MultiFocusBench.naive_listMap size=32 250.6 250.7 +0.0%
CapsBench.foldMapCap - 22.3 22.3 +0.0%
TraversalBench.eoFoldPrices size=64 352.2 352.3 +0.0%
SetterBench.eoModify_6 - 26.4 26.4 -0.0%
AvroJsonBridgeBench.naiveWideToJson - 1,909.7 1,909.4 -0.0%
OrderAvroBench.naiveModifyNames size=8 1,162.4 1,162.2 -0.0%
OrderJsoniterBench.nativeSumPrices size=8 1,195.2 1,195.3 +0.0%
OrderJsoniterBench.naiveSumPrices size=64 12,443.4 12,442.5 -0.0%
MultiFocusBench.naive_sumQty size=32 65.9 65.9 -0.0%

New (head only, not diffed): ClickRecordBench.encode_derived, ClickRecordBench.encode_derivedThroughPrism, ClickRecordBench.encode_hand, ClickRecordBench.encode_positional, ClickRecordBench.encode_vulcanFull

base_sha: 95a792ceabc810cab35d2c5d892a6dc6c98531fa · head_sha: 229f3e39cf959435964c89e2056a82be1834c728 · jdk: temurin-21 · runner: ubuntu-22.04 · jmh_params: -i 3 -wi 2 -f 1 -t 1 -foe true -prof gc -rf json · profile: pr:-i3-wi2-f1-t1-gc

…re-commit hook flagged

benchmarks sits outside the root aggregate, so scalafmtAll never sees
it: ClickRecordBench's later edits drifted. scalafixAll --check also
ordered the new files' import blocks. Both surfaced by the pre-commit
hook on this commit.
…not save-once

setup-java's 'cache: sbt' preset only SAVES on a primary-key miss, so
dependencies fetched after a key was minted are re-downloaded from
Central on every later run — and one flaky fetch fails the job. That is
the scalafix-cli_3.8.4:0.14.7 failure on this PR: the artifact was on
Central, main's identical step resolved it green, but the PR runners
had to re-fetch it and hit a blip. Twice.

Replace it with actions/cache@v4 over ~/.cache/coursier, ~/.ivy2/cache
and ~/.sbt, keyed on the build definition with a broad restore-keys
prefix, in ci.yml (via the generator — githubWorkflowJobSetup now strips
the setup-java cache param, injects the cache step after each setup-java
leg, and rewires the 'sbt update' warmups to the cache step's
cache-hit), plus the five hand-written workflows. actions/cache saves on
every non-exact-key run, so late-fetched dependencies enter the cache
chain for every subsequent run instead of fossilising with the key.
…he hook doesn't

The pre-commit hook runs scalafmtCheckAll/benchmarks/scalafmtCheck but
not scalafmtSbtCheck, so the unformatted build.sbt edit passed locally
and failed in CI's 'Check formatting' step.
…ting'

The hook checked .scala/.md formatting and benchmarks/, but not the
build's *.sbt files — an unformatted build.sbt edit passed the hook and
failed CI's 'Check formatting' step (caught on PR #116). CI runs
scalafmtSbtCheck right after scalafmtCheckAll; the hook now does too.
@kryptt
kryptt merged commit 6809e73 into main Sep 23, 2026
14 checks passed
kryptt added a commit that referenced this pull request Sep 23, 2026
Minor release on the 0.x line. Two big changes since 0.16.0: the avro derived
whole-record builder (#95/#116) and the exception audit's refactors (circe's
write walk, jsoniter's string-path constructors). Both jsoniter's `fromPath`
forms and avro's `AvroVulcan.codec[A]` change a public return type, so the
0.17.0 section leads with the recompile warning the release-notes convention
asks for.

- build.sbt: tlBaseVersion 0.16 -> 0.17. The tag still derives the published
  version; this is what gates which tags the build accepts and what the
  snapshot version reads as.
- CHANGELOG.md: `## [0.17.0] - 2026-09-23` cut out of Unreleased, link refs
  updated. Added the leading recompile warning and the `AvroVulcan.codec`
  migration bullet the section was missing -- that using-form's return type
  change is breaking, not only the gain the Added bullet describes.
- mima.sbt: the breaking history's `next:` slot is now `0.17`, carrying the
  avro entry beside jsoniter's. The `Affine` covariance entry that sat in
  `next` actually shipped in 0.13.0 (CHANGELOG line 430), so it moves to a
  0.13 line instead of being attributed to a future release.

Verified before tagging: `sbt githubWorkflowGenerate` leaves ci.yml
byte-identical, scalafmt check + scalafmtSbtCheck + benchmarks/scalafmtCheck +
githubWorkflowCheck all pass, and root-aggregate `sbt test` is green on JDK 21
(kyo needs 25 and leaves the aggregate there, as documented; CI's 25 lane
covers it).
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