Skip to content

feat(demos): gRPC stream triage with eo-jsoniter and fs2 - #133

Merged
kryptt merged 6 commits into
mainfrom
ccr-1ec1a317-uds4rn
Oct 15, 2026
Merged

kryptt merged 6 commits into
mainfrom
ccr-1ec1a317-uds4rn

Conversation

@kryptt

@kryptt kryptt commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

A demo filter for a gRPC stream of JSON messages, read as raw bytes off a TCP socket. It classifies each message and forwards only the ones a policy keeps. It never decodes a message: it reads the few values the policy needs straight from the bytes with eo-jsoniter's prisms, and forwards the kept messages byte for byte.

upstream service ──TCP──▶ filter ──TCP──▶ downstream service
   bytes ─ GrpcFrames.splitFrames ─▶ message ─ Wire.detail ⇀ DetailJson ─ Policy.keep ─▶ keep?
   bytes ◀─ GrpcFrames.joinFrames ◀─ the kept messages, byte for byte
  • The message. An Issue has 64 fields. The 61st, detail, is a three-case enum (Bug / Incident / Request) nested up to three objects deep (detail → impact → service).
  • Generators. The issues come from ScalaCheck generators that scalacheck-derived derives from the model. Only the leaves are written by hand: text, JSON-safe doubles, and the two opaque types. The stream draws them at size 7, about 4 KB per message; the property tests draw them at every size.
  • Reading without decoding (Wire).
    • JsoniterPrism[Issue].field(_.detail).raw slices the detail's bytes out of a message in one scan. They come back as the opaque DetailJson, so the detail's optics can't be pointed at a whole message.
    • Typed per-case prisms read the leaves from that slice, e.g. JsoniterPrism[Detail.Incident].field(_.impact).field(_.service).field(_.tier).
    • The paths are checked against the model at compile time. The only string path is the kind's "type" tag, because it is the codec's tag and not a model field.
  • One policy, two readers. Policy.keep is written once, against CanGetOption:
    • with Wire's givens it reads bytes;
    • with Model's givens it reads a decoded Detail, through eo-generics prism / lens chains;
    • the baseline decodes every message and uses Model, and the tests compare the two readers on every message.
  • fs2.
    • GrpcFrames.splitFrames / joinFrames hold gRPC's Length-Prefixed-Message framing as pipes. Frames may straddle chunks any way. Compressed, oversized or truncated frames fail the stream. joinFrames doesn't copy messages: each frame is a header chunk followed by the message's own chunk.
    • Net puts an upstream service, the filter and a downstream service on loopback sockets. Sockets are read 256 KiB at a time, because fs2's 8 KiB reads was the bottleneck.
    • Demo runs all three on loopback, once with each filter.
  • Not HTTP/2. The frames travel on plain TCP. There are no headers, trailers or status codes, and no compression.

Tests

sbt demoGrpcFilter/test: 35 tests, all passing.

  • GrpcFramesSpec: messages come back whole however the bytes are cut. Also checks the frame layout, the size limit (lengths are unsigned), and that compressed frames and truncated bytes fail the stream.
  • TriageSpec:
    • Differential: the optics judge 3 000 issues exactly as decoding does, under the default policy and under 100 random policies. They also agree on 500 random issues of every size (2 to 40) under random policies. Every kind is both kept and dropped.
    • The detail slice is the detail's own JSON.
    • Pretty-printed JSON is read the same.
    • An unknown kind, a missing detail and bytes that aren't JSON are all dropped as unclassified.
    • Model's optics pass cats-eo-laws' OptionalTests.
  • PipelineSpec: the whole filter, in memory with the bytes cut at random and over real sockets. It forwards exactly the kept messages, byte for byte and in order, and its tally adds up. A malformed frame fails it.

Benchmarks

JMH in demos/grpc-filter-bench. 3 forks, on a 4-vCPU 2.1 GHz Xeon container with JDK 21. Numbers are per message.

full decode eo-jsoniter
judging one message 13.8 µs, 8 557 B 5.9 µs, 705 B
… with detail moved to the front 13.4 µs, 8 548 B 1.2 µs, 664 B
the whole filter pipe, in memory 17.7 µs, 13 917 B 8.9 µs, 6 001 B

Over loopback sockets, sbt "demoGrpcFilter/run 200000" filters 91 k messages/s with the optics and 48 k with full decoding.

Most of the optics' time is the scan past the bytes in front of detail, so the speed-up depends on where the producer puts the field: 2.3× when it is the 61st field, 11× when it is first. Allocation is 12–13× lower either way.

Build, CI and docs

  • Modules. Two unpublished modules, both outside the root aggregate: demoGrpcFilter (fs2-io 3.14.0, jsoniter-scala-macros, scalacheck, scalacheck-derived 0.10.0) and demoGrpcFilterBench.

  • CI. ci.yml is regenerated: the format and scalafix checks now cover the demo, and a new step runs demoGrpcFilter/test demoGrpcFilterBench/Jmh/compile.

  • Docs.

    • The demo's README.
    • A link from the jsoniter integration page.
    • CLAUDE.md gains rows for both modules, and a note that scalafmt skips files git doesn't track yet.
  • Site: the Cookbook becomes a section, and the demos move into it. The left menu now reads:

    Cookbook                                       → cookbook/ (landing page)
       Allocation-free stream triage demo          (this PR's demo)
       Blockchain smart contract compilation demo  (the UPLC → JVM demo, moved from Demos)
       Navigating structures
       Decoupling and modularity
       Effect threading
    
    • The landing page (cookbook/README.md) holds the intro, an introduction to both demos, the task index and further reading. The one-page cookbook is split into the three recipe pages.
    • Each page compiles on its own under mdoc. Links from other pages go to the specific recipe or demo.
    • laika-static/_redirects sends the old /cookbook.html and /demos/*.html to their new pages on Cloudflare Pages.
    • Built with docs/mdoc and docs/laikaSite on JDK 25 with no errors.

🤖 Generated with Claude Code

https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv

A filter on a gRPC stream of JSON messages, read as raw bytes off a TCP
socket: it classifies every message and forwards only the ones a policy
keeps, without decoding any message.

- Each message is a 64-field Issue; its 61st field, `detail`, is a
  three-case enum (Bug / Incident / Request) nested up to three objects
  deep.
- Wire: `JsoniterPrism[Issue].field(_.detail).raw` slices the detail's
  bytes out of a message in one scan (opaque `DetailJson`); typed per-case
  leaf prisms read the few values the policy needs from that slice.
- Policy.keep is written once against CanGetOption. It runs on the bytes
  (Wire's givens) and on a decoded Detail (Model's givens: eo-generics
  prism/lens chains). The tests check that both judge every message alike.
- GrpcFrames: gRPC's Length-Prefixed-Message framing as fs2 pipes. Frames
  may straddle chunks; compressed, oversized or truncated frames fail the
  stream. No HTTP/2: the frames travel on plain TCP.
- Net: upstream service, filter and downstream service on loopback
  sockets. Reads are 256 KiB (fs2's 8 KiB reads were the bottleneck).
  Kept frames are forwarded byte for byte.
- Tests: framing over arbitrary chunkings; differential triage over 3 000
  messages and 100 random policies; OptionalTests on Model's optics; the
  whole filter in memory and over real sockets.
- JMH (demos/grpc-filter-bench), per message:
  - judging one message: 4.6 µs / 700 B vs 10.1 µs / 9.4 KB decoding;
    1.2 µs with `detail` first in the message;
  - the whole filter pipe: 7.1 µs vs 13.6 µs.
- Outside the root aggregate; CI runs the suite and compiles the benches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv
scalafmt split the four-term shift expression mid-call.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Cloudflare Pages preview for ccr-1ec1a317-uds4rn is live:

https://68d62a4e.cats-eo-docs.pages.dev

Branch alias: https://ccr-1ec1a317-uds4rn.cats-eo-docs.pages.dev

Built from commit a03feab26d4c1a09778a38ad545152db9fe474a6 · updated on every push.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark A/B

Allocation (B/op) — authoritative

Benchmark params base head Δ
PlatedBench.visitorUniverseJson n=4096 295,010.4 524,388.8 +77.8%
OrderJsoniterBench.eoReadStreet size=64 72.0 128.0 +77.7%
TraversalBench.eoFoldNested size=8 424.0 328.0 -22.6%
JsoniterBench.jReadStreet size=8 152.0 128.0 -15.8%
GetterBench.mGet_6 - 0.0 0.0 +13.7%
GetterBench.mGet_3 - 0.0 0.0 -10.7%
JsoniterBench.jMiss size=8 0.0 0.0 +9.4%
JsoniterBench.jMiss size=64 0.0 0.0 +8.7%
AffineFoldBench.mGetOption_6 - 0.0 0.0 -5.7%
SchemesBench.handHylo - 0.1 0.1 +5.3%
AffineFoldBench.eoGetOption_0_empty - 0.0 0.0 -3.5%
PowerSeriesNestedBench.eoModify_nested size=4 2,192.0 2,264.0 +3.3%
GetterBench.eoGet_6 - 0.0 0.0 +3.0%
AffineFoldBench.eoGetOption_0 - 0.0 0.0 -2.4%
OrderCirceBench.hcursorNames size=512 601,676.8 613,997.7 +2.0%
OrderCirceBench.directNames size=64 77,722.3 76,162.3 -2.0%
OrderCirceBench.directNames size=512 613,992.5 601,679.3 -2.0%
GetterBench.eoGet_0 - 0.0 0.0 -1.7%
AffineFoldBench.mGetOption_0_empty - 0.0 0.0 -1.7%
MultiFocusBench.naive_sumQty size=4 0.0 0.0 -1.6%
442 more benchmarks
Benchmark params base head Δ
MultiFocusBench.eoModify_powerEach size=32 3,200.0 3,152.0 -1.5%
GenericsBench.handLensGet - 0.0 0.0 +1.5%
CapsBench.getCap - 0.0 0.0 -1.5%
FoldBench.mFoldMap size=8 0.0 0.0 -1.4%
AffineFoldBench.eoGetOption_loyalty_empty - 0.0 0.0 +1.4%
GetterBench.mGet_orderId - 0.0 0.0 +1.3%
OptionalBench.eoModify_0_empty - 0.0 0.0 -1.3%
AvroVulcanBench.encode_bridged - 1,240.0 1,224.0 -1.3%
LensBench.mGet - 0.0 0.0 +1.2%
AffineFoldBench.mGetOption_0 - 0.0 0.0 -1.2%
OrderAvroBench.eoModifyNames size=8 1,992.0 1,968.0 -1.2%
AffineFoldBench.eoGetOption_loyalty - 0.0 0.0 -1.1%
PrismBench.mGetOptionPresent - 0.0 0.0 -1.1%
GetterBench.mGet_0 - 0.0 0.0 -1.0%
OrderCirceBench.naiveStreet size=64 112,730.8 113,811.1 +1.0%
OptionalBench.mModify_0_empty - 0.0 0.0 -0.9%
MultiFocusCollectBench.eoCollectMap_constSum - 0.0 0.0 -0.8%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.0 0.0 -0.8%
OptionalBench.mModify_loyalty_empty - 0.0 0.0 -0.8%
GetterBench.eoGet_orderId - 0.0 0.0 -0.7%
CapsBench.getDirect - 0.0 0.0 +0.7%
PrismBench.eoGetOptionAbsent - 0.0 0.0 -0.7%
GenericsBench.genPrismModifyMiss - 0.0 0.0 +0.7%
CapsBench.getDerivedPerCall - 0.0 0.0 +0.6%
AffineFoldBench.mGetOption_loyalty - 0.0 0.0 +0.6%
PrismBench.eoGetOptionPresent - 0.0 0.0 +0.5%
GenericsBench.handPrismModifyMiss - 0.0 0.0 +0.5%
JsoniterBench.jMiss size=512 0.0 0.0 +0.5%
CapsBench.foldMapDirect - 0.0 0.0 +0.5%
GenericsBench.rawLensGet - 0.0 0.0 -0.5%
GenericsBench.handPrismGetMiss - 0.0 0.0 +0.5%
PrismBench.mGetRightAbsent - 0.0 0.0 -0.4%
CapsBench.foldMapDerivedPerCall - 0.0 0.0 +0.4%
CapsBench.getDerivedHeld - 0.0 0.0 -0.4%
OptionalBench.eoModify_loyalty_empty - 0.0 0.0 +0.3%
PowerSeriesNestedBench.eoModify_nested size=256 53,835.2 53,675.1 -0.3%
CapsBench.foldMapDerivedHeld - 0.0 0.0 +0.3%
ZioDiBench.eoServiceGet - 0.0 0.0 +0.3%
PrismBench.eoGetRightAbsent - 0.0 0.0 +0.2%
CapsBench.getDeepCap - 0.0 0.0 -0.2%
GetterBench.eoGet_3 - 0.0 0.0 +0.2%
SchemesBench.handCata - 0.1 0.1 +0.2%
AffineFoldBench.mGetOption_loyalty_empty - 0.0 0.0 -0.1%
OrderAvroBench.monocleModifyStreet size=64 20,880.2 20,904.2 +0.1%
KyoDiBench.eoMapGet - 0.0 0.0 -0.1%
FoldBench.eoFoldMap size=8 0.0 0.0 +0.1%
OrderCirceBench.naiveNames size=8 17,824.1 17,808.1 -0.1%
OrderAvroBench.naiveModifyNames size=64 27,936.3 27,912.3 -0.1%
OrderCirceBench.monocleNames size=8 19,472.1 19,456.1 -0.1%
KyoDiBench.handMapGet - 0.0 0.0 -0.1%
PowerSeriesNestedBench.eoModify_nested size=1024 210,629.0 210,469.4 -0.1%
PrismBench.mGetOptionAbsent - 0.0 0.0 -0.1%
CapsBench.foldMapCap - 0.0 0.0 -0.1%
OrderAvroBench.monocleModifyNames size=64 39,865.9 39,842.0 -0.1%
JsoniterBench.jReplaceId size=512 41,913.0 41,889.0 -0.1%
LensBench.eoGet - 0.0 0.0 +0.1%
GenericsBench.genLensGet - 0.0 0.0 -0.0%
CapsBench.getDeepDirect - 0.0 0.0 +0.0%
GenericsBench.genPrismGetMiss - 0.0 0.0 -0.0%
OrderJsoniterBench.nativeReadStreet size=512 454.2 454.4 +0.0%
AffineFoldBench.mGetOption_3 - 0.0 0.0 +0.0%
OrderJsoniterBench.nativeSumPrices size=8 1,512.9 1,512.5 -0.0%
OrderCirceBench.monocleStreet size=64 113,798.4 113,830.6 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=2048 104,682.6 104,711.4 +0.0%
JsoniterBench.cSumPrices size=64 156,276.9 156,250.6 -0.0%
ZioDiBench.eoDrillGet - 0.0 0.0 -0.0%
OrderCirceBench.hcursorNames size=64 77,818.8 77,807.8 -0.0%
OrderJsoniterBench.nativeSumPrices size=512 86,318.9 86,330.3 +0.0%
OrderCirceBench.naiveNames size=64 120,885.7 120,901.0 +0.0%
OrderJsoniterBench.nativeSumPrices size=64 10,928.5 10,929.7 +0.0%
JsoniterBench.jSumPrices size=64 8,120.3 8,119.6 -0.0%
OrderCirceBench.eoNamesIor size=64 87,499.6 87,492.3 -0.0%
PowerSeriesNestedBench.monocle_nested size=64 58,833.0 58,836.9 +0.0%
OrderJsoniterBench.eoReadStreet size=512 72.2 72.2 +0.0%
OrderCirceBench.eoNamesIor size=512 695,877.4 695,907.1 +0.0%
OrderCirceBench.eoStreet size=512 2,720.9 2,720.8 -0.0%
PowerSeriesBench.monocle_powerEach size=4 1,176.0 1,176.0 -0.0%
OrderJsoniterBench.nativeReadStreet size=64 424.5 424.5 +0.0%
OrderCirceBench.naiveStreet size=512 908,042.0 908,058.9 +0.0%
JsoniterBench.cReplaceId size=512 1,066,801.7 1,066,782.2 -0.0%
MultiFocusBench.eoModify_powerEach size=1024 115,175.0 115,176.8 +0.0%
OrderCirceBench.eoNames size=512 626,351.3 626,361.0 +0.0%
OrderCirceBench.naiveNames size=512 965,277.2 965,291.8 +0.0%
OrderJsoniterBench.eoSumPrices size=512 63,689.7 63,690.6 +0.0%
MultiFocusBench.eoModify_multiFocus size=1024 331,085.7 331,081.2 -0.0%
JsoniterBench.cSumPrices size=8 22,704.6 22,704.9 +0.0%
OrderCirceBench.directStreet size=512 2,728.8 2,728.8 +0.0%
OrderJsoniterBench.naiveSumPrices size=512 230,119.8 230,122.6 +0.0%
JsoniterBench.cModifyId size=512 1,066,876.5 1,066,889.3 +0.0%
OrderJsoniterBench.monocleReadStreet size=512 193,227.0 193,229.2 +0.0%
OrderJsoniterBench.monocleModifyStreet size=512 333,567.6 333,563.9 -0.0%
PowerSeriesNestedBench.monocle_nested size=256 430,204.3 430,199.8 -0.0%
PowerSeriesPrismBench.naive_sparse size=2048 24,612.6 24,612.4 -0.0%
OrderCirceBench.monocleStreet size=512 908,026.0 908,035.2 +0.0%
OrderCirceBench.eoStreetIor size=512 2,736.9 2,736.8 -0.0%
OrderCirceBench.hcursorStreet size=512 3,032.9 3,032.8 -0.0%
JsoniterBench.jSumPrices size=512 63,633.4 63,632.8 -0.0%
JsoniterBench.cReadId size=512 797,938.9 797,943.9 +0.0%
PlatedBench.mTransformExpr n=4096 753,739.0 753,734.6 -0.0%
MultiFocusBench.eoModify_powerEach size=256 26,080.6 26,080.4 -0.0%
JsoniterBench.cReadId size=64 101,309.3 101,308.8 -0.0%
PowerSeriesBench.naive_powerEach size=4096 114,782.3 114,781.7 -0.0%
PowerSeriesPrismBench.monocle_sparse size=2048 523,143.6 523,141.1 -0.0%
OrderJsoniterBench.monocleModifyStreet size=64 30,081.8 30,081.9 +0.0%
JsoniterBench.cReadStreet size=64 101,308.7 101,309.1 +0.0%
JsoniterBench.jReadId size=512 48.0 48.0 +0.0%
JsoniterBench.jReadStreet size=512 128.1 128.1 +0.0%
PlatedBench.eoUniverseJson n=4096 786,468.7 786,471.2 +0.0%
OrderJsoniterBench.eoModifyStreet size=512 42,027.6 42,027.8 +0.0%
OrderCirceBench.monocleNames size=512 1,121,829.0 1,121,825.5 -0.0%
OrderAvroBench.monocleModifyStreet size=512 169,073.6 169,074.0 +0.0%
PowerSeriesNestedBench.monocle_nested size=1024 1,118,856.5 1,118,853.7 -0.0%
OrderJsoniterBench.nativeReadStreet size=8 424.0 424.0 +0.0%
PlatedBench.eoTransformExpr n=4096 655,358.8 655,357.2 -0.0%
OrderAvroBench.naiveModifyStreet size=512 169,060.9 169,061.3 +0.0%
JsoniterBench.cModifyId size=64 136,289.8 136,290.1 +0.0%
MultiFocusBench.eoFold_powerEach size=1024 43,035.7 43,035.7 -0.0%
OrderJsoniterBench.eoSumPrices size=64 8,121.2 8,121.2 +0.0%
OrderCirceBench.monocleNames size=64 132,761.8 132,762.1 +0.0%
PowerSeriesBench.eoModify_powerEach size=4096 164,373.4 164,373.7 +0.0%
OrderCirceBench.eoStreetIor size=64 2,736.1 2,736.1 -0.0%
TraversalBench.eoModify size=512 36,897.2 36,897.1 -0.0%
TraversalBench.mModify size=512 176,897.9 176,898.2 +0.0%
OrderAvroBench.naiveReadStreet size=512 69,794.8 69,794.7 -0.0%
PlatedBench.mUniverseExpr n=4096 4,687,725.9 4,687,733.6 +0.0%
OrderJsoniterBench.naiveReadStreet size=512 193,227.2 193,227.5 +0.0%
PlatedBench.mTransformExpr n=512 69,585.6 69,585.7 +0.0%
JsoniterBench.cReplaceId size=64 136,241.4 136,241.2 -0.0%
OrderJsoniterBench.naiveModifyStreet size=512 333,565.0 333,564.5 -0.0%
PlatedBench.mUniverseJson n=4096 6,489,807.3 6,489,816.9 +0.0%
PlatedBench.eoUniverseExpr n=4096 786,383.1 786,384.2 +0.0%
OrderJsoniterBench.naiveSumPrices size=64 29,337.2 29,337.2 -0.0%
OrderJsoniterBench.monocleSumPrices size=512 1,178,456.4 1,178,454.8 -0.0%
PlatedBench.visitorTransformDeep n=4096 163,886.8 163,886.6 -0.0%
PowerSeriesBench.monocle_powerEach size=256 107,338.3 107,338.2 -0.0%
OrderAvroBench.eoReadStreet size=512 88.0 88.0 +0.0%
AvroEncodeRouteBench.eo_encodeValue - 568.0 568.0 -0.0%
OrderJsoniterBench.eoModifyStreet size=8 1,072.0 1,072.0 +0.0%
PowerSeriesNestedBench.naive_nested size=256 29,019.3 29,019.3 -0.0%
PlatedBench.eoUniverseDeep n=4096 786,575.0 786,575.7 +0.0%
JsoniterBench.cReadStreet size=512 797,936.8 797,937.5 +0.0%
JsoniterBench.cModifyId size=8 20,716.0 20,716.0 +0.0%
JsoniterBench.cSumPrices size=512 1,240,810.5 1,240,809.4 -0.0%
TraversalBench.eoFoldPrices size=512 12,312.3 12,312.3 -0.0%
PowerSeriesNestedBench.naive_nested size=1024 115,072.3 115,072.3 +0.0%
PlatedBench.visitorUniverseExpr n=4096 196,654.1 196,654.3 +0.0%
PowerSeriesNestedBench.monocle_nested size=4 5,568.0 5,568.0 +0.0%
OrderAvroBench.eoModifyNames size=512 97,420.4 97,420.3 -0.0%
OrderCirceBench.hcursorStreet size=8 3,032.0 3,032.0 +0.0%
PlatedBench.visitorTransformExpr n=4096 360,470.7 360,470.5 -0.0%
PlatedBench.visitorUniverseJson n=512 40,954.8 40,954.8 +0.0%
JsoniterBench.jReadStreet size=64 128.0 128.0 -0.0%
OrderCirceBench.eoNames size=64 79,299.2 79,299.3 +0.0%
OrderCirceBench.eoStreetIor size=8 2,736.0 2,736.0 +0.0%
OrderCirceBench.directStreet size=8 2,728.0 2,728.0 -0.0%
OrderCirceBench.eoStreet size=64 2,720.1 2,720.1 +0.0%
PlatedBench.mUniverseJson n=512 699,922.2 699,922.5 +0.0%
OrderCirceBench.eoStreet size=8 2,720.0 2,720.0 +0.0%
FoldBench.eoFoldPrices size=512 12,312.4 12,312.4 +0.0%
JsoniterBench.cReplaceId size=8 20,668.0 20,668.0 -0.0%
AvroBytesBench.naiveReadCountry - 4,256.0 4,256.0 +0.0%
PowerSeriesBench.monocle_powerEach size=4096 967,839.6 967,840.0 +0.0%
PlatedBench.eoTransformDeep n=4096 624,381.9 624,381.6 -0.0%
TraversalBench.eoFoldNested size=512 20,200.8 20,200.8 +0.0%
OrderCirceBench.directNames size=8 10,688.1 10,688.1 -0.0%
PowerSeriesPrismBench.monocle_sparse size=512 166,693.1 166,693.0 -0.0%
OrderAvroBench.eoModifyNames size=64 12,616.1 12,616.1 +0.0%
PowerSeriesNestedBench.monocle_nested size=16 15,696.1 15,696.1 +0.0%
OrderCirceBench.hcursorStreet size=64 3,032.1 3,032.1 -0.0%
MultiFocusBench.eoFold_powerEach size=256 9,240.2 9,240.2 +0.0%
PlatedBench.visitorUniverseDeep n=4096 196,703.3 196,703.4 +0.0%
OrderCirceBench.eoNamesIor size=8 11,560.1 11,560.1 +0.0%
OrderJsoniterBench.naiveModifyStreet size=64 30,057.9 30,057.9 -0.0%
PowerSeriesBench.eoModify_powerEach size=64 3,008.0 3,008.0 +0.0%
OrderJsoniterBench.monocleModifyStreet size=8 4,664.1 4,664.1 -0.0%
PowerSeriesNestedBench.eoModify_nested size=64 14,592.5 14,592.5 -0.0%
PowerSeriesBench.naive_powerEach size=64 1,848.0 1,848.0 -0.0%
OrderAvroBench.eoModifyStreet size=512 328.0 328.0 +0.0%
PlatedBench.eoUniverseExpr n=64 12,168.0 12,168.0 -0.0%
OrderJsoniterBench.eoModifyStreet size=64 5,432.1 5,432.1 +0.0%
JsoniterBench.jSumPrices size=8 1,176.0 1,176.0 +0.0%
KyoDiBench.handMapDrillModify - 216.0 216.0 -0.0%
OrderJsoniterBench.monocleReadStreet size=64 24,705.2 24,705.2 -0.0%
OrderAvroBench.monocleReadStreet size=512 69,794.9 69,794.9 +0.0%
OrderJsoniterBench.naiveSumPrices size=8 4,248.0 4,248.0 +0.0%
MultiFocusBench.naive_listMap size=1024 65,578.1 65,578.2 +0.0%
OrderJsoniterBench.naiveReadStreet size=8 3,648.0 3,648.0 -0.0%
PowerSeriesBench.naive_powerEach size=1024 28,731.2 28,731.2 -0.0%
ClickRecordBench.encode_derivedThroughPrism - 744.0 744.0 -0.0%
PowerSeriesPrismBench.naive_sparse size=128 1,568.0 1,568.0 +0.0%
PlatedBench.visitorUniverseJson n=64 5,096.0 5,096.0 -0.0%
AvroBytesBench.eoReadPartner - 480.0 480.0 -0.0%
OrderJsoniterBench.eoSumPrices size=8 1,176.0 1,176.0 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=32 1,360.0 1,360.0 +0.0%
PlatedBench.mUniverseExpr n=512 475,012.8 475,012.7 -0.0%
JsoniterBench.jModifyId size=512 41,921.1 41,921.1 -0.0%
PlatedBench.visitorTransformDeep n=512 20,496.5 20,496.5 +0.0%
OrderCirceBench.directStreet size=64 2,728.1 2,728.1 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=512 24,785.6 24,785.5 -0.0%
PowerSeriesBench.monocle_powerEach size=1024 279,425.9 279,425.9 +0.0%
PowerSeriesBench.eoModify_powerEach size=256 10,688.5 10,688.5 -0.0%
AffineFoldBench.eoGetOption_6 - 16.0 16.0 +0.0%
JsoniterBench.jModifyId size=64 5,328.0 5,328.0 -0.0%
PowerSeriesNestedBench.eoModify_nested size=16 4,720.1 4,720.1 -0.0%
AvroBytesBench.eoModifyCountry - 928.0 928.0 +0.0%
TraversalBench.mFoldPrices size=512 162,564.9 162,564.9 -0.0%
JsoniterBench.jReadId size=64 48.0 48.0 +0.0%
OrderAvroBench.eoReadStreet size=64 88.0 88.0 +0.0%
OrderCirceBench.hcursorNames size=8 10,768.1 10,768.1 +0.0%
OrderAvroBench.naiveModifyNames size=512 226,287.3 226,287.3 -0.0%
OrderJsoniterBench.monocleSumPrices size=64 45,817.6 45,817.6 -0.0%
OrderJsoniterBench.eoReadStreet size=8 128.0 128.0 -0.0%
OrderAvroBench.monocleModifyNames size=512 382,757.0 382,757.1 +0.0%
PlatedBench.mUniverseExpr n=64 45,424.4 45,424.4 -0.0%
PlatedBench.visitorTransformExpr n=512 45,032.8 45,032.8 -0.0%
AvroBytesBench.eoModifyPartner - 1,000.0 1,000.0 +0.0%
AvroDecodeReuseBench.confluentRecordReaderFresh - 3,696.0 3,696.0 -0.0%
MultiFocusBench.eoModify_powerEach size=4 800.0 800.0 +0.0%
AffineFoldBench.eoGetOption_3 - 16.0 16.0 -0.0%
OpticBuildBench.reuseUse - 2,720.0 2,720.0 +0.0%
PlatedBench.eoUniverseExpr n=512 98,185.5 98,185.5 +0.0%
OrderJsoniterBench.monocleReadStreet size=8 3,648.0 3,648.0 -0.0%
OrderJsoniterBench.naiveReadStreet size=64 24,705.2 24,705.2 -0.0%
PlatedBench.mUniverseJson n=64 73,208.5 73,208.5 +0.0%
AvroVulcanBench.rootGet_native - 600.0 600.0 +0.0%
PlatedBench.eoTransformDeep n=512 57,361.2 57,361.2 -0.0%
PowerSeriesNestedBench.naive_nested size=64 7,512.2 7,512.2 -0.0%
OrderAvroBench.monocleModifyStreet size=8 2,992.0 2,992.0 -0.0%
FoldBench.eoFoldMap size=512 7,936.2 7,936.2 -0.0%
PowerSeriesPrismBench.naive_sparse size=512 6,176.3 6,176.3 +0.0%
SchemesBench.eoCata - 197,568.5 197,568.5 -0.0%
OrderJsoniterBench.monocleSumPrices size=8 6,448.1 6,448.1 +0.0%
MultiFocusBench.naive_sumQty size=256 3,840.0 3,840.1 +0.0%
PowerSeriesPrismBench.eoModify_sparse size=128 4,816.1 4,816.1 -0.0%
OrderAvroBench.eoModifyStreet size=8 328.0 328.0 -0.0%
MultiFocusBench.eoFold_powerEach size=32 920.0 920.0 -0.0%
AvroDecodeReuseBench.freshDecodeRecord - 3,344.0 3,344.0 -0.0%
AvroBytesBench.naiveModifyCountry - 7,616.0 7,616.0 +0.0%
PowerSeriesBench.eoModify_powerEach size=1024 41,413.9 41,413.9 +0.0%
AvroDecodeReuseBench.confluentRecordReader - 1,560.0 1,560.0 -0.0%
PlatedBench.eoUniverseJson n=512 98,186.6 98,186.6 -0.0%
OrderAvroBench.naiveReadStreet size=64 8,848.1 8,848.1 +0.0%
PowerSeriesBench.naive_powerEach size=256 7,224.3 7,224.3 +0.0%
LensBench.mModifyDeep - 176.0 176.0 -0.0%
AvroJsonBridgeBench.eoWideToAvro - 2,040.0 2,040.0 -0.0%
OptionalBench.mModify_6 - 496.0 496.0 +0.0%
PowerSeriesPrismBench.monocle_sparse size=32 7,040.0 7,040.0 +0.0%
AvroBytesBench.prunedReadCountry - 1,976.0 1,976.0 -0.0%
AvroBytesBench.prunedReadPartner - 1,592.0 1,592.0 +0.0%
PlatedBench.eoUniverseDeep n=512 98,377.5 98,377.5 +0.0%
AvroBytesBench.eoReadCountry - 520.0 520.0 -0.0%
AvroVulcanBench.fieldGet_bridged - 432.0 432.0 -0.0%
FoldBench.mFoldMap size=512 7,936.2 7,936.2 +0.0%
JsoniterBench.cReadId size=8 15,568.0 15,568.0 +0.0%
AvroJsonBridgeBench.eoWideToJson - 1,472.0 1,472.0 +0.0%
MultiFocusCollectBench.eoCollectList_listSum - 56.0 56.0 +0.0%
JsoniterBench.cReadStreet size=8 15,568.0 15,568.0 -0.0%
AvroBytesBench.naivePassthroughPayload - 14,088.1 14,088.1 -0.0%
AvroJsonBridgeBench.eoClickToAvro - 4,664.0 4,664.0 -0.0%
MultiFocusBench.naive_listMap size=256 16,424.1 16,424.1 +0.0%
PowerSeriesPrismBench.monocle_sparse size=128 27,808.2 27,808.2 -0.0%
PowerSeriesPrismBench.monocle_sparse size=8 1,952.0 1,952.0 -0.0%
OrderCirceBench.naiveStreet size=8 17,040.1 17,040.1 +0.0%
MultiFocusBench.naive_sumQty size=32 256.0 256.0 -0.0%
MultiFocusBench.eoModify_multiFocus size=32 8,600.0 8,600.0 -0.0%
PlatedBench.eoUniverseJson n=64 12,168.1 12,168.1 -0.0%
OrderAvroBench.naiveModifyStreet size=8 2,968.0 2,968.0 -0.0%
AvroVulcanBench.fieldGet_native - 432.0 432.0 +0.0%
SetterBench.eoModify_6 - 120.0 120.0 +0.0%
GenericsBench.genLensModify - 24.0 24.0 +0.0%
AvroJsonBridgeBench.naiveWideToAvro - 3,504.0 3,504.0 -0.0%
PlatedBench.eoTransformDeep n=64 7,184.0 7,184.0 -0.0%
JsoniterBench.jReplaceId size=64 5,296.0 5,296.0 -0.0%
SchemesBench.eoHylo - 295,848.7 295,848.6 -0.0%
OrderAvroBench.monocleReadStreet size=64 8,848.1 8,848.1 -0.0%
JsoniterBench.jReadId size=8 48.0 48.0 +0.0%
KyoDiBench.eoVarUpdateFocus - 216.0 216.0 -0.0%
ClickRecordBench.encode_derived - 744.0 744.0 -0.0%
PowerSeriesBench.eoModify_powerEach size=16 1,088.0 1,088.0 +0.0%
LensBench.eoModifyDeep - 152.0 152.0 +0.0%
PlatedBench.visitorUniverseDeep n=64 3,128.0 3,128.0 +0.0%
AvroVulcanBench.encode_vulcanRaw - 1,272.0 1,272.0 -0.0%
OrderCirceBench.eoNames size=8 10,944.1 10,944.1 +0.0%
FoldBench.mFoldPrices size=512 12,312.4 12,312.4 -0.0%
PlatedBench.eoTransformExpr n=512 81,825.7 81,825.7 -0.0%
AvroVulcanBench.decode_vulcanRaw - 832.0 832.0 -0.0%
OpticBuildBench.buildAndUse - 2,888.0 2,888.0 +0.0%
SchemesBench.handAna - 163,816.1 163,816.1 +0.0%
AvroVulcanBench.rootGet_bridged - 1,424.0 1,424.0 +0.0%
TraversalBench.mFoldPrices size=8 2,000.0 2,000.0 -0.0%
ZioDiBench.handDrillModify - 592.0 592.0 +0.0%
MultiFocusBench.eoModify_multiFocus size=256 76,112.6 76,112.6 -0.0%
TraversalBench.mModify size=64 14,408.0 14,408.0 -0.0%
PowerSeriesBench.monocle_powerEach size=16 3,720.0 3,720.0 +0.0%
PlatedBench.visitorTransformDeep n=64 2,576.0 2,576.0 -0.0%
AvroBytesBench.eoGraftPayload - 720.0 720.0 +0.0%
JsoniterBench.jReplaceId size=8 936.0 936.0 -0.0%
TraversalBench.eoFoldNested size=64 2,680.0 2,680.0 -0.0%
PowerSeriesPrismBench.naive_sparse size=8 128.0 128.0 -0.0%
OrderAvroBench.eoReadStreet size=8 88.0 88.0 +0.0%
PlatedBench.eoTransformExpr n=64 10,144.0 10,144.0 +0.0%
OrderAvroBench.naiveModifyNames size=8 3,752.0 3,752.0 -0.0%
AvroBytesBench.eoSliceGraftPayload - 1,192.0 1,192.0 +0.0%
AvroJsonBridgeBench.naiveClickToAvro - 3,928.0 3,928.0 +0.0%
AvroEncodeRouteBench.handwritten_stream - 240.0 240.0 +0.0%
PlatedBench.visitorTransformExpr n=64 5,608.0 5,608.0 -0.0%
PlatedBench.eoUniverseDeep n=64 12,360.0 12,360.0 +0.0%
ZioDiBench.eoServiceReplace - 400.0 400.0 +0.0%
MultiFocusCollectBench.naive_tuple3Rewrite - 96.0 96.0 +0.0%
ClickRecordBench.encode_positional - 23,912.0 23,912.0 -0.0%
OrderAvroBench.eoModifyStreet size=64 328.0 328.0 -0.0%
FoldBench.eoFoldPrices size=8 216.0 216.0 +0.0%
OrderJsoniterBench.naiveModifyStreet size=8 4,640.1 4,640.1 -0.0%
FoldBench.eoFoldMap size=64 768.0 768.0 -0.0%
MultiFocusBench.eoModify_multiFocus size=4 1,320.0 1,320.0 -0.0%
KyoDiBench.eoEnvFocus - 320.0 320.0 -0.0%
OrderAvroBench.naiveReadStreet size=8 1,208.0 1,208.0 +0.0%
PlatedBench.visitorUniverseExpr n=64 3,080.0 3,080.0 +0.0%
LensBench.mReplace - 40.0 40.0 -0.0%
PlatedBench.visitorUniverseDeep n=512 24,632.7 24,632.7 +0.0%
ReviewBench.eoReverseGet_6 - 120.0 120.0 +0.0%
TraversalBench.eoModify size=64 4,640.0 4,640.0 -0.0%
AvroDecodeReuseBench.cachedDecodeRecord - 1,224.0 1,224.0 -0.0%
MultiFocusBench.eoFold_powerEach size=4 328.0 328.0 +0.0%
MultiFocusCollectBench.naive_listSum - 56.0 56.0 +0.0%
SchemesBench.drosteHylo - 328,640.5 328,640.5 -0.0%
AvroVulcanBench.decode_native - 48.0 48.0 +0.0%
MultiFocusBench.naive_sumQty size=1024 16,129.1 16,129.1 -0.0%
AvroJsonBridgeBench.naiveClickToJson - 5,856.0 5,856.0 -0.0%
GenericsBench.handPrismModifyHit - 24.0 24.0 -0.0%
KyoDiBench.handVarUpdate - 200.0 200.0 +0.0%
AvroBytesBench.naiveReadPartner - 5,424.0 5,424.0 -0.0%
PowerSeriesBench.eoModify_powerEach size=4 608.0 608.0 +0.0%
CompositionBench.reuseLensOptional3 - 160.0 160.0 -0.0%
FoldBench.mFoldPrices size=64 1,560.0 1,560.0 -0.0%
AvroJsonBridgeBench.eoClickToJson - 4,000.0 4,000.0 -0.0%
CompositionBench.reuseLens6 - 120.0 120.0 -0.0%
TraversalBench.eoFoldPrices size=8 216.0 216.0 +0.0%
GenericsBench.rawLensModify - 24.0 24.0 -0.0%
TraversalBench.mModify size=8 1,896.0 1,896.0 +0.0%
OrderCirceBench.monocleStreet size=8 17,048.1 17,048.1 -0.0%
KyoDiBench.handEnvUse - 312.0 312.0 -0.0%
AffineFoldBench.eoGetOption_0_asOptional - 16.0 16.0 -0.0%
MultiFocusCollectBench.naive_tuple6Rewrite - 184.0 184.0 +0.0%
CapsBench.modifyDeepDirect - 152.0 152.0 -0.0%
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 96.0 96.0 +0.0%
PowerSeriesBench.monocle_powerEach size=64 14,504.1 14,504.1 -0.0%
PlatedBench.visitorUniverseExpr n=512 24,584.7 24,584.7 +0.0%
JsoniterBench.jModifyId size=8 968.0 968.0 -0.0%
ZioDiBench.eoDrillModify - 472.0 472.0 -0.0%
SetterBench.eoModify_orderId - 40.0 40.0 -0.0%
AvroJsonBridgeBench.naiveWideToJson - 4,376.0 4,376.0 -0.0%
KyoDiBench.eoMapDrillModify - 216.0 216.0 +0.0%
MultiFocusBench.naive_listMap size=32 2,088.0 2,088.0 +0.0%
OrderAvroBench.monocleReadStreet size=8 1,208.0 1,208.0 +0.0%
ZioDiBench.handDrillGet - 120.0 120.0 +0.0%
TraversalBench.mFoldPrices size=64 15,408.1 15,408.1 +0.0%
GenericsBench.handLensModify - 24.0 24.0 -0.0%
AvroEncodeRouteBench.eo_encodeToAny - 312.0 312.0 -0.0%
OptionalBench.eoModify_0 - 112.0 112.0 -0.0%
LensBench.eoReplace - 40.0 40.0 -0.0%
PowerSeriesNestedBench.naive_nested size=4 792.0 792.0 +0.0%
CompositionBench.reuseLens1 - 40.0 40.0 +0.0%
GenericsBench.genPrismGetHit - 16.0 16.0 +0.0%
AvroEncodeRouteBench.naive_freshPlumbing - 2,624.0 2,624.0 +0.0%
SetterBench.mModify_orderId - 40.0 40.0 +0.0%
ReviewBench.naiveBuild_3 - 72.0 72.0 -0.0%
MultiFocusCollectBench.naive_constSum - 16.0 16.0 +0.0%
OpticBuildBench.build - 184.0 184.0 +0.0%
FoldBench.mFoldMap size=64 768.0 768.0 -0.0%
PowerSeriesPrismBench.naive_sparse size=32 416.0 416.0 -0.0%
CompositionBench.buildLens1 - 72.0 72.0 -0.0%
SetterBench.mModify_0 - 24.0 24.0 +0.0%
OptionalBench.eoModify_loyalty - 112.0 112.0 +0.0%
SchemesBench.drosteCata - 164,824.3 164,824.3 -0.0%
GenericsBench.rawPrismModifyHit - 24.0 24.0 -0.0%
FoldBench.mFoldPrices size=8 216.0 216.0 +0.0%
PrismBench.mReverseGet - 16.0 16.0 -0.0%
GenericsBench.genPrismModifyHit - 24.0 24.0 +0.0%
OptionalBench.mModify_0 - 112.0 112.0 +0.0%
ReviewBench.naiveBuild_6 - 120.0 120.0 -0.0%
OptionalBench.eoModify_6 - 208.0 208.0 +0.0%
TraversalBench.eoFoldPrices size=64 1,560.0 1,560.0 +0.0%
AvroVulcanBench.encode_native - 56.0 56.0 -0.0%
AvroVulcanBench.decode_bridged - 832.0 832.0 +0.0%
SetterBench.eoModify_3 - 72.0 72.0 +0.0%
MultiFocusCollectBench.naive_zipMeanBroadcast - 1,176.0 1,176.0 +0.0%
ZioDiBench.handServiceGet - 120.0 120.0 +0.0%
PowerSeriesBench.naive_powerEach size=16 504.0 504.0 -0.0%
PrismBench.eoGetRightPresent - 16.0 16.0 -0.0%
OptionalBench.mReplace_0 - 40.0 40.0 -0.0%
CompositionBench.buildLens3 - 184.0 184.0 -0.0%
OrderAvroBench.monocleModifyNames size=8 5,400.0 5,400.0 -0.0%
PrismBench.eoRightReverseGet - 16.0 16.0 +0.0%
CapsBench.modifyDirect - 40.0 40.0 +0.0%
MultiFocusCollectBench.eoCollectMap_zipMean - 880.0 880.0 +0.0%
AvroBytesBench.naiveModifyPartner - 8,696.0 8,696.0 -0.0%
TraversalBench.eoModify size=8 608.0 608.0 -0.0%
GenericsBench.rawPrismGetHit - 16.0 16.0 -0.0%
IsoBench.mGet - 32.0 32.0 -0.0%
GenericsBench.handPrismGetHit - 16.0 16.0 +0.0%
CapsBench.modifyDerivedPerCall - 40.0 40.0 +0.0%
OptionalBench.eoReplace_loyalty - 88.0 88.0 -0.0%
PrismBench.eoReverseGet - 16.0 16.0 -0.0%
SchemesBench.drosteAna - 327,632.3 327,632.3 +0.0%
PowerSeriesBench.naive_powerEach size=4 168.0 168.0 -0.0%
SchemesBench.eoAna - 589,712.7 589,712.7 +0.0%
CompositionBench.reuseLeaf - 24.0 24.0 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=8 496.0 496.0 -0.0%
PlatedBench.mTransformExpr n=64 11,728.0 11,728.0 +0.0%
ReviewBench.naiveBuild_0 - 24.0 24.0 -0.0%
CapsBench.modifyCap - 40.0 40.0 -0.0%
CapsBench.modifyDerivedHeld - 40.0 40.0 +0.0%
ClickRecordBench.encode_vulcanFull - 28,408.1 28,408.1 +0.0%
IsoBench.eoGet - 32.0 32.0 -0.0%
ZioDiBench.handServiceReplace - 520.0 520.0 -0.0%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 248.0 248.0 +0.0%
OptionalBench.mModify_loyalty - 112.0 112.0 +0.0%
ClickRecordBench.encode_hand - 768.0 768.0 -0.0%
OptionalBench.mModify_3 - 304.0 304.0 -0.0%
SetterBench.eoModify_0 - 24.0 24.0 -0.0%
CapsBench.modifyDeepCap - 176.0 176.0 +0.0%
FoldBench.eoFoldPrices size=64 1,560.0 1,560.0 -0.0%
OptionalBench.eoModify_3 - 160.0 160.0 -0.0%
IsoBench.eoReverseGet - 32.0 32.0 -0.0%
MultiFocusBench.naive_listMap size=4 296.0 296.0 -0.0%
SetterBench.mModify_6 - 288.0 288.0 +0.0%
PrismBench.mRightReverseGet - 16.0 16.0 -0.0%
OrderAvroBench.naiveModifyStreet size=64 20,880.2 20,880.2 +0.0%
CompositionBench.reuseLens3 - 72.0 72.0 +0.0%
PrismBench.mGetRightPresent - 16.0 16.0 -0.0%
CompositionBench.buildLensOptional3 - 184.0 184.0 -0.0%
LensBench.eoModify - 40.0 40.0 +0.0%
IsoBench.mReverseGet - 32.0 32.0 +0.0%
OptionalBench.eoReplace_0 - 40.0 40.0 +0.0%
OptionalBench.mReplace_loyalty - 88.0 88.0 +0.0%
ReviewBench.eoReverseGet_3 - 72.0 72.0 +0.0%
LensBench.mModify - 40.0 40.0 +0.0%
SetterBench.mModify_3 - 168.0 168.0 +0.0%
CompositionBench.buildLens6 - 352.0 352.0 -0.0%
ReviewBench.eoReverseGet_0 - 24.0 24.0 -0.0%
PowerSeriesNestedBench.naive_nested size=16 2,136.0 2,136.0 +0.0%
Timing (ns/op) — directional only, same-VM but shared runner
Benchmark params base head Δ
MultiFocusBench.eoModify_powerEach size=32 788.3 998.6 +26.7%
MultiFocusBench.eoModify_powerEach size=1024 27,044.8 33,992.1 +25.7%
MultiFocusBench.eoModify_powerEach size=256 8,245.9 6,207.5 -24.7%
AvroVulcanBench.encode_bridged - 306.2 244.5 -20.2%
KyoDiBench.handMapDrillModify - 42.4 34.4 -18.9%
PowerSeriesNestedBench.monocle_nested size=4 1,258.0 1,458.8 +16.0%
OrderJsoniterBench.eoModifyStreet size=8 297.2 342.7 +15.3%
TraversalBench.eoFoldNested size=8 56.8 48.8 -14.0%
GetterBench.mGet_6 - 24.6 28.1 +13.8%
AvroEncodeRouteBench.eo_encodeValue - 635.5 556.5 -12.4%
OrderCirceBench.eoStreet size=512 1,189.0 1,058.5 -11.0%
GetterBench.mGet_3 - 8.7 7.8 -10.7%
JsoniterBench.jReadStreet size=8 214.0 193.0 -9.8%
JsoniterBench.jMiss size=8 167.8 183.8 +9.5%
PlatedBench.visitorUniverseJson n=4096 157,135.0 171,426.5 +9.1%
JsoniterBench.jMiss size=64 169.3 184.2 +8.8%
AvroBytesBench.naiveReadCountry - 1,619.8 1,742.0 +7.5%
PowerSeriesNestedBench.monocle_nested size=256 99,219.2 91,877.5 -7.4%
PowerSeriesNestedBench.monocle_nested size=16 2,493.7 2,671.8 +7.1%
PowerSeriesPrismBench.eoModify_sparse size=2048 22,738.0 24,328.2 +7.0%
PlatedBench.mTransformExpr n=512 15,267.3 16,330.2 +7.0%
MultiFocusBench.eoModify_powerEach size=4 193.8 206.5 +6.6%
JsoniterBench.jModifyId size=64 496.9 464.5 -6.5%
AffineFoldBench.mGetOption_6 - 24.4 22.9 -5.9%
OrderJsoniterBench.nativeReadStreet size=8 813.5 860.2 +5.7%
TraversalBench.eoModify size=512 7,533.7 7,113.8 -5.6%
AvroVulcanBench.rootGet_native - 168.0 177.3 +5.5%
SchemesBench.handHylo - 9,521.4 10,028.0 +5.3%
JsoniterBench.cSumPrices size=64 41,072.0 43,220.1 +5.2%
OrderCirceBench.eoNames size=512 248,605.8 260,943.3 +5.0%
LensBench.mModifyDeep - 31.2 29.7 -4.9%
JsoniterBench.cReadId size=512 202,180.1 211,943.5 +4.8%
OrderJsoniterBench.eoSumPrices size=512 84,866.3 88,938.4 +4.8%
OrderCirceBench.hcursorNames size=512 235,531.7 246,719.3 +4.7%
OrderCirceBench.eoStreetIor size=64 1,086.5 1,036.7 -4.6%
OrderJsoniterBench.eoReadStreet size=64 213.4 203.8 -4.5%
ClickRecordBench.encode_derivedThroughPrism - 545.2 521.4 -4.4%
OrderCirceBench.directStreet size=512 1,011.6 1,055.6 +4.4%
OpticBuildBench.reuseUse - 1,052.5 1,097.2 +4.3%
OrderCirceBench.eoNamesIor size=8 4,397.2 4,577.5 +4.1%
GenericsBench.genLensModify - 3.6 3.7 +4.0%
OrderAvroBench.eoModifyNames size=64 3,947.1 4,097.6 +3.8%
OrderCirceBench.eoNames size=8 4,017.5 4,167.1 +3.7%
SchemesBench.eoCata - 70,899.5 68,346.0 -3.6%
PlatedBench.mTransformExpr n=4096 169,034.5 162,952.3 -3.6%
OptionalBench.mModify_6 - 120.6 124.9 +3.5%
SchemesBench.handAna - 20,385.0 21,106.8 +3.5%
OrderCirceBench.naiveStreet size=64 20,402.5 21,118.0 +3.5%
OrderJsoniterBench.naiveSumPrices size=512 93,263.7 96,515.9 +3.5%
AvroDecodeReuseBench.confluentRecordReaderFresh - 1,370.3 1,325.1 -3.3%
OrderCirceBench.hcursorStreet size=512 1,112.4 1,076.4 -3.2%
AvroVulcanBench.fieldGet_bridged - 103.2 100.0 -3.1%
MultiFocusCollectBench.naive_tuple3Rewrite - 7.7 8.0 +3.1%
OrderJsoniterBench.naiveSumPrices size=64 12,093.0 11,717.7 -3.1%
SetterBench.eoModify_6 - 23.5 24.2 +3.1%
OrderCirceBench.eoStreetIor size=512 1,077.3 1,044.1 -3.1%
TraversalBench.eoFoldPrices size=512 1,919.3 1,860.2 -3.1%
AffineFoldBench.eoGetOption_0_empty - 0.9 0.9 -3.1%
JsoniterBench.cReplaceId size=512 421,330.3 408,427.9 -3.1%
GetterBench.eoGet_6 - 29.1 30.0 +3.0%
OrderAvroBench.monocleModifyStreet size=8 953.8 925.7 -2.9%
OrderJsoniterBench.monocleReadStreet size=512 87,617.9 90,172.6 +2.9%
AvroBytesBench.eoReadPartner - 213.3 207.1 -2.9%
AvroBytesBench.eoModifyCountry - 291.7 300.0 +2.9%
ZioDiBench.handDrillModify - 89.8 92.3 +2.8%
OrderJsoniterBench.monocleModifyStreet size=512 160,657.0 156,303.2 -2.7%
AffineFoldBench.eoGetOption_0 - 0.9 0.9 -2.7%
PlatedBench.visitorUniverseJson n=64 2,120.0 2,063.9 -2.6%
PowerSeriesPrismBench.monocle_sparse size=8 344.6 335.5 -2.6%
OrderJsoniterBench.naiveSumPrices size=8 1,858.7 1,906.4 +2.6%
AvroVulcanBench.fieldGet_native - 102.1 104.7 +2.6%
JsoniterBench.cSumPrices size=8 6,232.3 6,078.4 -2.5%
LensBench.mReplace - 3.5 3.4 -2.4%
AvroVulcanBench.encode_vulcanRaw - 265.0 258.5 -2.4%
OrderAvroBench.naiveModifyStreet size=512 45,596.9 46,672.8 +2.4%
PowerSeriesBench.eoModify_powerEach size=64 772.2 790.4 +2.4%
AvroDecodeReuseBench.confluentRecordReader - 446.9 436.6 -2.3%
OrderJsoniterBench.monocleModifyStreet size=8 3,192.1 3,118.4 -2.3%
JsoniterBench.jSumPrices size=512 89,334.3 87,274.2 -2.3%
LensBench.eoModifyDeep - 33.0 33.7 +2.2%
OrderCirceBench.monocleStreet size=512 177,393.3 181,357.0 +2.2%
MultiFocusBench.eoFold_powerEach size=1024 14,445.1 14,122.7 -2.2%
OrderJsoniterBench.nativeReadStreet size=64 4,285.8 4,381.2 +2.2%
OrderAvroBench.eoModifyStreet size=8 112.8 110.4 -2.2%
JsoniterBench.jSumPrices size=8 1,456.7 1,488.4 +2.2%
OrderJsoniterBench.naiveReadStreet size=8 1,814.9 1,775.9 -2.2%
OrderCirceBench.directNames size=8 4,068.2 3,980.8 -2.2%
JsoniterBench.cReadStreet size=64 25,758.5 26,300.5 +2.1%
AffineFoldBench.eoGetOption_3 - 14.3 14.0 -2.1%
PowerSeriesPrismBench.monocle_sparse size=32 1,032.8 1,054.4 +2.1%
JsoniterBench.jReplaceId size=8 107.0 104.7 -2.1%
AvroJsonBridgeBench.naiveWideToAvro - 991.0 970.8 -2.0%
AvroJsonBridgeBench.eoWideToAvro - 868.8 851.4 -2.0%
JsoniterBench.jSumPrices size=64 10,871.8 11,087.7 +2.0%
TraversalBench.mFoldPrices size=8 322.0 315.7 -2.0%
OrderJsoniterBench.eoModifyStreet size=64 655.0 667.8 +2.0%
JsoniterBench.cReadStreet size=8 4,106.5 4,026.5 -1.9%
SchemesBench.eoHylo - 93,028.9 91,237.8 -1.9%
JsoniterBench.jReadId size=512 33.3 33.9 +1.9%
OrderCirceBench.hcursorNames size=8 4,052.9 4,129.8 +1.9%
MultiFocusCollectBench.naive_tuple6Rewrite - 13.9 14.2 +1.9%
JsoniterBench.cReadId size=64 26,511.9 26,012.0 -1.9%
AffineFoldBench.mGetOption_0_empty - 0.9 0.8 -1.9%
GetterBench.eoGet_0 - 0.9 0.9 -1.9%
AvroVulcanBench.decode_vulcanRaw - 190.3 186.8 -1.9%
AvroBytesBench.eoModifyPartner - 398.5 405.9 +1.9%
PlatedBench.mUniverseJson n=64 23,192.3 23,623.1 +1.9%
KyoDiBench.eoVarUpdateFocus - 64.7 63.5 -1.9%
JsoniterBench.cReadId size=8 4,045.0 4,119.7 +1.8%
FoldBench.eoFoldPrices size=512 2,162.6 2,202.6 +1.8%
OrderAvroBench.eoModifyNames size=8 551.2 541.2 -1.8%
PlatedBench.mUniverseExpr n=64 19,078.3 18,736.8 -1.8%
AffineFoldBench.eoGetOption_6 - 27.7 28.2 +1.8%
AvroJsonBridgeBench.eoWideToJson - 665.4 676.9 +1.7%
GenericsBench.rawLensModify - 2.3 2.2 -1.7%
OrderJsoniterBench.eoReadStreet size=512 210.0 213.6 +1.7%
OrderAvroBench.eoModifyNames size=512 31,225.8 31,754.2 +1.7%
PowerSeriesNestedBench.monocle_nested size=64 8,929.6 9,080.0 +1.7%
MultiFocusBench.eoFold_powerEach size=256 3,086.2 3,137.7 +1.7%
AvroDecodeReuseBench.freshDecodeRecord - 1,368.3 1,345.5 -1.7%
PlatedBench.eoTransformExpr n=4096 130,263.8 128,093.4 -1.7%
OrderCirceBench.naiveNames size=512 193,272.9 196,459.6 +1.6%
OrderCirceBench.monocleNames size=512 231,799.8 227,990.0 -1.6%
OrderCirceBench.hcursorStreet size=8 1,103.2 1,121.3 +1.6%
OrderAvroBench.eoReadStreet size=64 35.1 35.6 +1.6%
CapsBench.getCap - 1.2 1.2 -1.6%
PlatedBench.eoUniverseExpr n=4096 97,648.0 99,216.8 +1.6%
SetterBench.eoModify_orderId - 3.3 3.2 -1.6%
MultiFocusBench.naive_sumQty size=4 8.5 8.4 -1.6%
AvroVulcanBench.rootGet_bridged - 389.9 396.0 +1.6%
PlatedBench.eoUniverseJson n=4096 215,307.3 218,690.6 +1.6%
JsoniterBench.jReplaceId size=64 468.3 461.0 -1.6%
ZioDiBench.eoServiceReplace - 64.8 65.8 +1.6%
PowerSeriesNestedBench.eoModify_nested size=16 1,445.7 1,424.4 -1.5%
AffineFoldBench.eoGetOption_loyalty_empty - 1.0 1.0 +1.5%
PlatedBench.mUniverseJson n=512 248,213.2 251,866.2 +1.5%
GenericsBench.handPrismModifyHit - 2.8 2.7 -1.5%
GetterBench.mGet_orderId - 0.5 0.5 +1.5%
OrderJsoniterBench.nativeSumPrices size=8 1,132.6 1,149.2 +1.5%
JsoniterBench.cReplaceId size=64 51,574.9 52,327.2 +1.5%
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 8.7 8.8 +1.4%
OrderCirceBench.eoNames size=64 30,523.3 30,952.8 +1.4%
MultiFocusBench.eoModify_multiFocus size=32 1,384.9 1,365.6 -1.4%
JsoniterBench.cModifyId size=64 51,484.1 52,198.8 +1.4%
OrderCirceBench.monocleNames size=64 24,283.0 24,619.3 +1.4%
MultiFocusBench.naive_sumQty size=32 58.9 58.1 -1.4%
MultiFocusBench.eoFold_powerEach size=32 381.1 375.9 -1.4%
PowerSeriesBench.eoModify_powerEach size=256 2,982.7 2,942.8 -1.3%
OrderAvroBench.naiveModifyStreet size=8 935.2 923.1 -1.3%
OptionalBench.eoModify_0_empty - 1.3 1.2 -1.3%
OrderJsoniterBench.eoSumPrices size=64 10,567.8 10,701.8 +1.3%
AvroBytesBench.naiveModifyCountry - 2,637.7 2,671.0 +1.3%
OrderJsoniterBench.monocleModifyStreet size=64 19,217.9 18,979.2 -1.2%
PowerSeriesBench.monocle_powerEach size=4 207.6 210.1 +1.2%
OrderCirceBench.naiveStreet size=8 3,115.5 3,153.9 +1.2%
TraversalBench.eoFoldNested size=512 4,956.8 5,017.6 +1.2%
OrderCirceBench.eoStreet size=64 1,054.9 1,067.8 +1.2%
AffineFoldBench.mGetOption_0 - 0.9 0.8 -1.2%
OrderCirceBench.hcursorNames size=64 30,666.4 31,039.4 +1.2%
GetterBench.mGet_0 - 0.5 0.5 -1.2%
LensBench.eoReplace - 3.4 3.3 -1.2%
MultiFocusBench.eoModify_multiFocus size=4 219.7 217.1 -1.2%
OrderCirceBench.monocleNames size=8 3,651.6 3,609.4 -1.2%
OrderCirceBench.hcursorStreet size=64 1,151.4 1,138.1 -1.2%
OrderAvroBench.eoReadStreet size=512 35.3 35.7 +1.1%
JsoniterBench.jReadStreet size=64 199.2 197.0 -1.1%
CompositionBench.buildLens1 - 5.5 5.4 -1.1%
AffineFoldBench.eoGetOption_0_asOptional - 2.2 2.1 -1.1%
PowerSeriesBench.eoModify_powerEach size=16 254.5 257.2 +1.1%
LensBench.mGet - 1.2 1.2 +1.1%
MultiFocusCollectBench.eoCollectList_listSum - 32.3 32.7 +1.1%
OrderAvroBench.naiveReadStreet size=64 3,197.0 3,230.9 +1.1%
OrderJsoniterBench.monocleReadStreet size=8 1,794.3 1,775.4 -1.1%
GenericsBench.handLensModify - 2.8 2.7 -1.0%
OpticBuildBench.buildAndUse - 1,138.6 1,150.4 +1.0%
PowerSeriesPrismBench.naive_sparse size=2048 4,939.3 4,990.4 +1.0%
TraversalBench.eoFoldPrices size=8 25.5 25.8 +1.0%
OrderJsoniterBench.monocleSumPrices size=8 2,433.1 2,457.6 +1.0%
SchemesBench.drosteHylo - 64,697.6 64,048.0 -1.0%
MultiFocusCollectBench.naive_constSum - 1.7 1.8 +1.0%
PlatedBench.eoUniverseDeep n=4096 97,591.6 98,562.1 +1.0%
GenericsBench.handLensGet - 1.0 1.0 +1.0%
PowerSeriesPrismBench.naive_sparse size=8 25.0 24.8 -1.0%
ReviewBench.naiveBuild_3 - 6.6 6.6 -1.0%
PrismBench.mGetOptionPresent - 1.0 1.0 -1.0%
SetterBench.mModify_orderId - 3.2 3.3 +1.0%
JsoniterBench.cModifyId size=8 8,650.7 8,733.6 +1.0%
ClickRecordBench.encode_positional - 6,415.1 6,354.4 -0.9%
OrderCirceBench.eoStreet size=8 1,052.6 1,062.5 +0.9%
AvroJsonBridgeBench.eoClickToAvro - 2,942.9 2,915.5 -0.9%
PowerSeriesBench.monocle_powerEach size=256 21,332.3 21,530.3 +0.9%
AvroBytesBench.eoReadCountry - 176.5 174.8 -0.9%
TraversalBench.mModify size=64 1,792.0 1,775.4 -0.9%
PowerSeriesBench.monocle_powerEach size=16 596.3 601.7 +0.9%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.9 0.9 -0.9%
OrderCirceBench.monocleStreet size=64 20,937.7 21,124.6 +0.9%
AffineFoldBench.eoGetOption_loyalty - 1.0 1.0 -0.9%
PlatedBench.visitorUniverseJson n=512 26,092.6 26,324.7 +0.9%
AvroBytesBench.prunedReadPartner - 618.9 624.4 +0.9%
ZioDiBench.handDrillGet - 13.8 13.9 +0.9%
PowerSeriesNestedBench.eoModify_nested size=64 4,585.8 4,546.9 -0.8%
OrderJsoniterBench.monocleSumPrices size=512 416,801.4 420,315.8 +0.8%
SetterBench.mModify_0 - 2.4 2.4 +0.8%
PlatedBench.visitorTransformDeep n=512 4,878.6 4,918.7 +0.8%
KyoDiBench.eoEnvFocus - 86.1 85.4 -0.8%
JsoniterBench.jModifyId size=8 110.1 109.2 -0.8%
PowerSeriesNestedBench.eoModify_nested size=256 17,671.5 17,527.8 -0.8%
AvroBytesBench.naivePassthroughPayload - 4,923.9 4,884.5 -0.8%
JsoniterBench.jReadId size=64 33.8 34.1 +0.8%
JsoniterBench.jModifyId size=512 3,747.3 3,717.6 -0.8%
PlatedBench.eoUniverseExpr n=512 13,922.1 14,032.2 +0.8%
PowerSeriesNestedBench.naive_nested size=256 5,236.9 5,195.4 -0.8%
GenericsBench.rawPrismModifyHit - 2.3 2.2 -0.8%
PlatedBench.visitorTransformDeep n=64 424.9 421.5 -0.8%
TraversalBench.mModify size=8 282.6 284.8 +0.8%
PlatedBench.visitorTransformExpr n=512 7,569.8 7,511.1 -0.8%
ReviewBench.naiveBuild_6 - 10.9 10.8 -0.8%
JsoniterBench.jReadStreet size=512 196.9 198.4 +0.8%
GenericsBench.genPrismGetHit - 2.1 2.1 +0.8%
OrderJsoniterBench.eoSumPrices size=8 1,447.9 1,458.8 +0.7%
GetterBench.eoGet_orderId - 0.9 0.9 -0.7%
CapsBench.getDirect - 1.1 1.1 +0.7%
OptionalBench.mModify_0_empty - 1.4 1.4 -0.7%
ReviewBench.eoReverseGet_6 - 33.7 34.0 +0.7%
PowerSeriesPrismBench.monocle_sparse size=128 3,835.5 3,807.5 -0.7%
AvroJsonBridgeBench.naiveClickToAvro - 1,456.8 1,467.3 +0.7%
MultiFocusBench.naive_listMap size=1024 8,288.7 8,347.8 +0.7%
KyoDiBench.eoMapDrillModify - 38.8 39.1 +0.7%
OrderCirceBench.eoStreetIor size=8 1,055.6 1,063.0 +0.7%
ClickRecordBench.encode_derived - 535.4 531.7 -0.7%
AvroVulcanBench.decode_native - 17.2 17.3 +0.7%
GenericsBench.genPrismModifyMiss - 1.2 1.2 +0.7%
OrderCirceBench.directStreet size=64 1,023.1 1,030.0 +0.7%
OrderJsoniterBench.eoReadStreet size=8 201.2 199.9 -0.7%
MultiFocusBench.eoFold_powerEach size=4 84.8 85.3 +0.7%
MultiFocusBench.eoModify_multiFocus size=1024 49,796.0 49,463.3 -0.7%
PowerSeriesBench.eoModify_powerEach size=4 122.2 123.0 +0.7%
AvroBytesBench.prunedReadCountry - 936.4 930.3 -0.7%
ZioDiBench.eoDrillModify - 94.0 93.4 -0.7%
PlatedBench.visitorTransformDeep n=4096 42,353.4 42,081.1 -0.6%
OrderAvroBench.monocleModifyStreet size=64 6,025.7 5,987.1 -0.6%
OrderAvroBench.naiveModifyNames size=8 1,093.9 1,087.0 -0.6%
CapsBench.modifyDeepDirect - 33.1 32.9 -0.6%
CapsBench.foldMapDirect - 21.5 21.6 +0.6%
GenericsBench.genPrismModifyHit - 2.9 2.9 +0.6%
OrderCirceBench.directNames size=512 240,127.3 238,655.0 -0.6%
PlatedBench.eoUniverseDeep n=64 1,853.7 1,865.0 +0.6%
AvroEncodeRouteBench.eo_encodeToAny - 54.2 53.9 -0.6%
PlatedBench.visitorTransformExpr n=64 963.1 957.2 -0.6%
KyoDiBench.handVarUpdate - 61.0 61.4 +0.6%
TraversalBench.mModify size=512 32,689.9 32,883.6 +0.6%
MultiFocusBench.naive_sumQty size=256 726.2 730.4 +0.6%
PowerSeriesNestedBench.monocle_nested size=1024 249,813.0 248,362.3 -0.6%
AvroBytesBench.eoSliceGraftPayload - 310.4 312.2 +0.6%
AvroBytesBench.eoGraftPayload - 158.8 159.7 +0.6%
PrismBench.eoGetOptionAbsent - 0.9 0.9 -0.6%
OptionalBench.eoModify_loyalty - 16.6 16.7 +0.6%
OptionalBench.eoReplace_loyalty - 7.5 7.5 -0.6%
JsoniterBench.jMiss size=512 168.1 169.0 +0.6%
KyoDiBench.handEnvUse - 84.2 83.7 -0.6%
MultiFocusBench.naive_listMap size=256 2,047.4 2,058.7 +0.6%
OrderJsoniterBench.naiveModifyStreet size=64 18,959.2 18,854.4 -0.6%
TraversalBench.mFoldPrices size=512 30,881.8 30,712.0 -0.5%
OptionalBench.eoModify_0 - 21.4 21.3 -0.5%
OrderJsoniterBench.monocleReadStreet size=64 11,657.6 11,595.2 -0.5%
JsoniterBench.cReadStreet size=512 202,091.2 203,156.4 +0.5%
MultiFocusCollectBench.naive_listSum - 29.6 29.7 +0.5%
SetterBench.eoModify_3 - 11.1 11.2 +0.5%
JsoniterBench.jReplaceId size=512 3,661.4 3,642.2 -0.5%
OptionalBench.mReplace_0 - 3.6 3.6 -0.5%
PlatedBench.eoTransformDeep n=512 11,804.6 11,743.7 -0.5%
JsoniterBench.jReadId size=8 33.7 33.9 +0.5%
PowerSeriesPrismBench.eoModify_sparse size=128 1,328.3 1,321.5 -0.5%
GenericsBench.handPrismModifyMiss - 1.1 1.1 +0.5%
FoldBench.mFoldPrices size=64 154.4 153.6 -0.5%
PowerSeriesNestedBench.naive_nested size=64 1,319.0 1,312.4 -0.5%
CompositionBench.reuseLensOptional3 - 57.9 57.6 -0.5%
PowerSeriesBench.naive_powerEach size=64 394.7 396.7 +0.5%
OrderJsoniterBench.nativeReadStreet size=512 33,539.6 33,704.9 +0.5%
OrderAvroBench.eoReadStreet size=8 35.0 35.2 +0.5%
AvroEncodeRouteBench.handwritten_stream - 156.8 157.6 +0.5%
AvroDecodeReuseBench.cachedDecodeRecord - 405.4 403.5 -0.5%
MultiFocusBench.naive_listMap size=32 247.7 248.9 +0.5%
JsoniterBench.cModifyId size=512 416,619.3 414,640.3 -0.5%
PlatedBench.visitorTransformExpr n=4096 64,222.8 63,922.9 -0.5%
FoldBench.mFoldPrices size=8 26.2 26.3 +0.5%
ZioDiBench.handServiceGet - 13.8 13.9 +0.5%
PlatedBench.mUniverseExpr n=512 197,011.0 196,102.7 -0.5%
GenericsBench.handPrismGetMiss - 1.0 1.0 +0.5%
PlatedBench.mUniverseJson n=4096 3,113,279.7 3,127,409.7 +0.5%
OrderJsoniterBench.naiveReadStreet size=512 87,819.5 88,214.6 +0.4%
TraversalBench.eoFoldNested size=64 530.8 528.4 -0.4%
PrismBench.mGetRightAbsent - 1.1 1.1 -0.4%
OrderJsoniterBench.monocleSumPrices size=64 15,512.7 15,443.7 -0.4%
PrismBench.mReverseGet - 2.6 2.6 -0.4%
OrderCirceBench.directStreet size=8 1,045.9 1,041.5 -0.4%
CompositionBench.buildLens3 - 21.3 21.2 -0.4%
JsoniterBench.cSumPrices size=512 346,505.7 347,953.6 +0.4%
MultiFocusCollectBench.naive_zipMeanBroadcast - 157.0 157.6 +0.4%
GenericsBench.rawPrismGetHit - 1.8 1.8 -0.4%
PrismBench.eoGetOptionPresent - 0.9 0.9 +0.4%
AvroJsonBridgeBench.naiveClickToJson - 2,913.1 2,901.9 -0.4%
MultiFocusCollectBench.eoCollectMap_constSum - 2.0 2.0 -0.4%
FoldBench.eoFoldMap size=512 1,240.3 1,235.6 -0.4%
OrderJsoniterBench.naiveModifyStreet size=512 157,589.0 156,994.6 -0.4%
OrderCirceBench.eoNamesIor size=64 33,958.2 34,084.9 +0.4%
PlatedBench.eoTransformDeep n=64 1,424.1 1,429.4 +0.4%
OrderAvroBench.monocleModifyStreet size=512 45,904.0 45,734.2 -0.4%
PrismBench.eoGetRightPresent - 2.3 2.3 -0.4%
OrderCirceBench.monocleStreet size=8 3,181.0 3,169.4 -0.4%
IsoBench.mGet - 3.6 3.6 -0.4%
PlatedBench.eoUniverseDeep n=512 14,211.5 14,263.5 +0.4%
AvroEncodeRouteBench.naive_freshPlumbing - 659.6 662.0 +0.4%
OrderAvroBench.naiveModifyNames size=512 59,493.3 59,707.9 +0.4%
OrderAvroBench.eoModifyStreet size=512 111.1 111.5 +0.4%
PlatedBench.visitorUniverseExpr n=4096 52,404.9 52,592.6 +0.4%
PowerSeriesBench.eoModify_powerEach size=4096 51,391.6 51,575.1 +0.4%
PowerSeriesBench.monocle_powerEach size=64 2,145.2 2,137.6 -0.4%
SchemesBench.drosteCata - 38,142.9 38,008.2 -0.4%
LensBench.eoGet - 1.0 1.0 +0.4%
PowerSeriesNestedBench.eoModify_nested size=1024 71,737.3 71,987.2 +0.3%
GenericsBench.genPrismGetMiss - 1.1 1.1 -0.3%
PowerSeriesPrismBench.monocle_sparse size=512 33,424.5 33,308.4 -0.3%
PowerSeriesNestedBench.naive_nested size=4 124.1 124.6 +0.3%
OrderCirceBench.naiveNames size=8 3,328.7 3,340.2 +0.3%
CapsBench.modifyDerivedPerCall - 4.7 4.7 +0.3%
OptionalBench.mModify_loyalty_empty - 1.6 1.6 -0.3%
CapsBench.getDeepCap - 1.5 1.5 -0.3%
PlatedBench.eoTransformDeep n=4096 118,007.7 117,616.8 -0.3%
MultiFocusCollectBench.eoCollectMap_zipMean - 122.0 122.4 +0.3%
PowerSeriesPrismBench.eoModify_sparse size=512 5,652.3 5,634.1 -0.3%
GenericsBench.handPrismGetHit - 2.0 2.0 +0.3%
OpticBuildBench.build - 44.3 44.4 +0.3%
CapsBench.getDerivedPerCall - 1.6 1.6 +0.3%
OrderAvroBench.monocleModifyNames size=8 1,396.1 1,391.7 -0.3%
PrismBench.eoRightReverseGet - 2.3 2.3 +0.3%
PowerSeriesPrismBench.monocle_sparse size=2048 105,585.8 105,265.0 -0.3%
PlatedBench.visitorUniverseExpr n=64 796.7 799.1 +0.3%
ReviewBench.naiveBuild_0 - 2.3 2.2 -0.3%
TraversalBench.eoModify size=64 838.9 836.4 -0.3%
OptionalBench.eoModify_loyalty_empty - 1.3 1.3 +0.3%
AvroVulcanBench.encode_native - 11.8 11.7 -0.3%
OrderJsoniterBench.nativeSumPrices size=512 62,426.1 62,242.5 -0.3%
OrderCirceBench.directNames size=64 29,770.0 29,856.5 +0.3%
OrderAvroBench.monocleReadStreet size=8 474.2 475.6 +0.3%
AvroJsonBridgeBench.naiveWideToJson - 1,894.1 1,888.6 -0.3%
OrderAvroBench.monocleReadStreet size=64 3,226.4 3,217.2 -0.3%
IsoBench.eoGet - 3.5 3.4 -0.3%
OrderAvroBench.naiveReadStreet size=8 476.1 477.5 +0.3%
CapsBench.getDerivedHeld - 2.3 2.3 -0.3%
PowerSeriesNestedBench.eoModify_nested size=4 686.2 688.0 +0.3%
OrderAvroBench.monocleModifyNames size=512 90,906.7 91,150.6 +0.3%
CapsBench.modifyCap - 4.2 4.2 -0.3%
CompositionBench.reuseLeaf - 3.0 3.0 -0.3%
PlatedBench.eoUniverseJson n=512 24,713.0 24,649.4 -0.3%
MultiFocusBench.naive_listMap size=4 32.7 32.6 -0.3%
OrderJsoniterBench.eoModifyStreet size=512 3,924.3 3,914.4 -0.3%
AvroVulcanBench.decode_bridged - 192.5 193.0 +0.3%
IsoBench.mReverseGet - 3.2 3.2 +0.3%
PrismBench.eoReverseGet - 2.3 2.3 -0.2%
OrderCirceBench.eoNamesIor size=512 272,512.5 273,169.2 +0.2%
OrderJsoniterBench.naiveReadStreet size=64 11,526.6 11,499.0 -0.2%
PowerSeriesNestedBench.naive_nested size=1024 21,714.4 21,766.2 +0.2%
PlatedBench.mUniverseExpr n=4096 2,816,936.2 2,823,657.5 +0.2%
FoldBench.eoFoldPrices size=8 25.4 25.5 +0.2%
CompositionBench.reuseLens1 - 16.4 16.5 +0.2%
PrismBench.mGetOptionAbsent - 1.0 1.0 +0.2%
TraversalBench.mFoldPrices size=64 2,039.5 2,044.3 +0.2%
PowerSeriesPrismBench.naive_sparse size=512 1,160.9 1,163.5 +0.2%
CapsBench.foldMapCap - 21.5 21.5 -0.2%
CapsBench.modifyDerivedHeld - 5.1 5.1 +0.2%
PrismBench.eoGetRightAbsent - 1.0 1.0 +0.2%
FoldBench.eoFoldMap size=64 157.1 157.5 +0.2%
OptionalBench.eoReplace_0 - 4.5 4.5 +0.2%
ClickRecordBench.encode_vulcanFull - 7,796.9 7,780.7 -0.2%
OptionalBench.mModify_0 - 21.5 21.5 +0.2%
PowerSeriesBench.naive_powerEach size=1024 6,678.9 6,665.1 -0.2%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 30.5 30.6 +0.2%
FoldBench.mFoldMap size=512 1,235.7 1,238.2 +0.2%
SetterBench.eoModify_0 - 2.4 2.4 -0.2%
OrderAvroBench.naiveModifyNames size=64 7,578.8 7,563.6 -0.2%
PowerSeriesBench.naive_powerEach size=256 1,603.8 1,607.0 +0.2%
CapsBench.modifyDirect - 4.0 4.1 +0.2%
AvroBytesBench.naiveReadPartner - 2,009.1 2,005.2 -0.2%
JsoniterBench.cReplaceId size=8 8,627.0 8,610.8 -0.2%
CapsBench.getDeepDirect - 1.3 1.3 -0.2%
PowerSeriesPrismBench.eoModify_sparse size=32 344.5 345.2 +0.2%
SchemesBench.eoAna - 95,818.7 95,993.8 +0.2%
ZioDiBench.handServiceReplace - 73.5 73.4 -0.2%
PlatedBench.eoTransformExpr n=64 1,989.6 1,986.1 -0.2%
PowerSeriesBench.monocle_powerEach size=1024 60,208.4 60,105.9 -0.2%
TraversalBench.eoModify size=8 94.6 94.4 -0.2%
IsoBench.eoReverseGet - 3.0 3.0 -0.2%
TraversalBench.eoFoldPrices size=64 153.4 153.7 +0.2%
PowerSeriesBench.naive_powerEach size=4 24.9 24.9 -0.2%
CompositionBench.reuseLens6 - 123.7 123.5 -0.2%
OrderJsoniterBench.naiveModifyStreet size=8 3,177.6 3,172.4 -0.2%
PlatedBench.visitorUniverseDeep n=64 745.9 744.7 -0.2%
GetterBench.eoGet_3 - 16.2 16.2 +0.2%
PowerSeriesPrismBench.naive_sparse size=32 73.9 73.7 -0.2%
SchemesBench.handCata - 12,571.3 12,590.5 +0.2%
OrderAvroBench.eoModifyStreet size=64 111.0 110.8 -0.1%
OrderAvroBench.naiveReadStreet size=512 25,142.6 25,107.1 -0.1%
AvroJsonBridgeBench.eoClickToJson - 2,797.4 2,793.6 -0.1%
PlatedBench.visitorUniverseDeep n=4096 54,071.2 54,142.2 +0.1%
PowerSeriesBench.naive_powerEach size=16 100.4 100.3 -0.1%
FoldBench.mFoldMap size=64 156.8 156.6 -0.1%
PlatedBench.eoTransformExpr n=512 15,896.1 15,875.9 -0.1%
OrderCirceBench.naiveNames size=64 22,843.2 22,814.5 -0.1%
FoldBench.mFoldPrices size=512 2,182.0 2,179.3 -0.1%
CapsBench.modifyDeepCap - 29.6 29.6 +0.1%
ClickRecordBench.encode_hand - 141.4 141.2 -0.1%
OptionalBench.eoModify_6 - 136.0 136.2 +0.1%
OrderAvroBench.monocleReadStreet size=512 25,014.3 24,987.8 -0.1%
LensBench.eoModify - 4.1 4.1 +0.1%
CompositionBench.buildLensOptional3 - 21.0 21.0 -0.1%
PowerSeriesBench.naive_powerEach size=4096 23,158.8 23,136.1 -0.1%
AffineFoldBench.mGetOption_loyalty - 1.0 1.0 +0.1%
OrderCirceBench.naiveStreet size=512 178,917.6 179,091.6 +0.1%
PowerSeriesBench.monocle_powerEach size=4096 176,685.7 176,855.6 +0.1%
KyoDiBench.eoMapGet - 2.4 2.4 -0.1%
MultiFocusBench.eoModify_multiFocus size=256 11,268.5 11,258.0 -0.1%
SchemesBench.drosteAna - 46,591.6 46,633.4 +0.1%
PowerSeriesBench.eoModify_powerEach size=1024 12,415.9 12,426.9 +0.1%
PrismBench.mRightReverseGet - 2.6 2.6 -0.1%
PowerSeriesPrismBench.eoModify_sparse size=8 118.6 118.8 +0.1%
OptionalBench.mModify_3 - 71.0 70.9 -0.1%
OptionalBench.mReplace_loyalty - 7.0 7.0 +0.1%
PlatedBench.eoUniverseExpr n=64 1,784.2 1,785.3 +0.1%
PlatedBench.visitorUniverseDeep n=512 6,493.0 6,497.3 +0.1%
SetterBench.mModify_6 - 64.1 64.1 +0.1%
MultiFocusBench.naive_sumQty size=1024 4,098.2 4,095.6 -0.1%
OptionalBench.eoModify_3 - 57.9 57.8 -0.1%
OrderJsoniterBench.nativeSumPrices size=64 7,720.6 7,724.8 +0.1%
PlatedBench.visitorUniverseExpr n=512 6,508.8 6,512.4 +0.1%
PlatedBench.mTransformExpr n=64 2,495.3 2,496.5 +0.0%
KyoDiBench.handMapGet - 1.9 1.9 -0.0%
GenericsBench.genLensGet - 1.0 1.0 -0.0%
FoldBench.mFoldMap size=8 20.9 20.9 +0.0%
OrderAvroBench.naiveModifyStreet size=64 6,017.5 6,020.1 +0.0%
AvroBytesBench.naiveModifyPartner - 2,903.7 2,902.4 -0.0%
ReviewBench.eoReverseGet_0 - 2.4 2.4 -0.0%
CompositionBench.buildLens6 - 38.3 38.3 -0.0%
PrismBench.mGetRightPresent - 2.4 2.4 -0.0%
LensBench.mModify - 4.7 4.7 +0.0%
CapsBench.foldMapDerivedPerCall - 21.0 21.0 -0.0%
PowerSeriesPrismBench.naive_sparse size=128 285.4 285.3 -0.0%
CompositionBench.reuseLens3 - 45.4 45.4 +0.0%
SetterBench.mModify_3 - 28.0 28.0 +0.0%
FoldBench.eoFoldMap size=8 21.4 21.4 -0.0%
ReviewBench.eoReverseGet_3 - 19.3 19.3 +0.0%
OrderAvroBench.monocleModifyNames size=64 8,997.8 8,999.5 +0.0%
OptionalBench.mModify_loyalty - 16.1 16.1 +0.0%
ZioDiBench.eoDrillGet - 10.3 10.3 -0.0%
AffineFoldBench.mGetOption_3 - 9.7 9.7 +0.0%
ZioDiBench.eoServiceGet - 5.4 5.4 -0.0%
CapsBench.foldMapDerivedHeld - 22.2 22.2 -0.0%
FoldBench.eoFoldPrices size=64 154.6 154.6 +0.0%
PowerSeriesNestedBench.naive_nested size=16 363.0 363.0 +0.0%
AffineFoldBench.mGetOption_loyalty_empty - 1.0 1.0 +0.0%
GenericsBench.rawLensGet - 0.6 0.6 -0.0%
PlatedBench.eoUniverseJson n=64 2,975.9 2,975.9 +0.0%

base_sha: b9cf7637720af556c6ed112c74522ec64d493103 · head_sha: df2062c3b219e2325c8b1fa931fb775869d2a081 · jdk: temurin-25 · runner: ubuntu-22.04 · jmh_params: -i 3 -wi 2 -f 1 -t 1 -foe true -prof gc -rf json -jvmArgsAppend -XX:-ResizeTLAB -jvmArgsAppend -Xms1g -jvmArgsAppend -Xmx1g · profile: pr:-i3-wi2-f1-t1-gc-rt1g

Informational only · head df2062c3b219e2325c8b1fa931fb775869d2a081 · benchmark run

- Issues: the stream's issues come from ScalaCheck generators derived
  from the model by scalacheck-derived. Only the leaves are written by
  hand: text, JSON-safe doubles, and the opaque Module / Votes.
  `Issues(seed)` samples at size 7 (about 4 KB per message), with a
  `Seed.slide` per issue. Consecutive `Seed.next` seeds drew overlapping
  values, which skewed the kinds.
- TriageSpec: a property over random policies and issues of every size
  (2 to 40), and derived Arbitrary / Cogen for the policy and the enums.
- GrpcFrames: `decode` / `encode` are renamed `splitFrames` / `joinFrames`.
  - `frame` builds a frame as a Chunk (header ++ message, the message not
    copied), and `joinFrames` is `mapChunks(_.flatMap(frame))`.
  - `split` is `unframe` (one frame, pure) run with `tailRecM`.
- Docs and benchmarks re-measured on the new messages: one message
  judged in 5.9 µs vs 13.8 µs decoded (1.2 µs with `detail` first); the
  whole pipe 8.9 µs vs 17.7 µs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv
- The left menu lists Demos before the Cookbook.
- `cookbook.md` (1 100 lines) is split into `cookbook/`:
  - `README.md` is the section's landing page (rendered as
    `cookbook/index.html`): the intro, the task index linking into the
    pages, and further reading;
  - one page per job: `navigating-structures.md`, `decoupling.md`,
    `effect-threading.md`.
- Each page compiles on its own under mdoc, so each carries the imports
  and definitions it uses. Effect threading re-declares the invoice
  model it borrowed from Decoupling, and links back to it.
- Links into the cookbook from other pages point at the specific page
  and recipe.
- `laika-static/_redirects` sends the old `/cookbook.html` to the
  section (Cloudflare Pages), and the README link is updated.

Built with `docs/mdoc` and `docs/laikaSite` on JDK 25: no errors. The
only link warnings are mdoc's, and they predate this change (mdoc slugs
`what's` differently from Laika).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv
- `site/docs/demos/` moves into `site/docs/cookbook/`, and the Demos
  menu entry goes away. The two demos are the first entries in the
  Cookbook's list, retitled:
  - `grpc-filter.md` → "Allocation-free stream triage demo";
  - `uplc-jvm.md` → "Blockchain smart contract compilation demo".
- The Cookbook landing page introduces both demos.
- Links to the old paths are updated: benchmarks, the jsoniter page,
  both demo READMEs, the UPLC walkthrough's comment and CLAUDE.md.
- `_redirects` sends `/demos/*.html` to the new pages.

Built with `docs/mdoc` and `docs/laikaSite` on JDK 25: no errors, and
the sidebar shows Cookbook → the two demos, then the three recipe pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JG5LJsPA524HKbSMvjStrv
@kryptt
kryptt merged commit 66aa202 into main Oct 15, 2026
13 checks passed
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.

2 participants