What's Changed
- fix(dart): a string-free scope must skip a string, not validate it (§6.4) by @Andste82 in #269
- fix(all but c/c-cpp): the declared integer width is a validity bound (#266) by @Andste82 in #274
- fix(rust,zig,java,csharp,dart): a skip is scoped and inert (#268 #270 #271 #272 #273) by @Andste82 in #276
- fix(dart): the fp32 raw-bits companion must be consumer-visible (#275) by @Andste82 in #278
- fix(bench): repair the two recipes that made rust-no-std and dart unmeasurable by @Andste82 in #280
- fix(cpp): arm readArray's element-width bound (#279) by @Andste82 in #281
- fix(bench): warm up the go harness before the collected op by @Andste82 in #282
- feat(bench): measure allow_dynamic, and record which python engine ran by @Andste82 in #284
- feat(bench): measure corelib-py's accelerator as its own row by @Andste82 in #285
- fix(rust): stack only live scopes, so a deep skip can't lose the field after it (#283) by @Andste82 in #286
- fix(cpp): compile the harness JSON reader as C, so clang can build the project by @Andste82 in #287
- refactor(cpp): guard an empty default with empty(), not a comparison by @Andste82 in #288
- feat(cpp)!: allow_dynamic selects storage on corelib: cpp too by @Andste82 in #289
- fix(c): don't double the " * " prefix in generated doc comments by @Andste82 in #290
- feat!: align the generated encode/decode API — public feed(), one streaming-encode name by @Andste82 in #291
- feat(typescript)!: chunked decode via decoder()/feed() by @Andste82 in #292
- fix(zig): a reassembled payload gets its own storage, not the shared buffer (#293) by @Andste82 in #294
- fix(zig)!: the streaming decoder owns its payloads, it cannot borrow (#295) by @Andste82 in #296
- fix(typescript): malformed UTF-8 leaves feed() as SofabError, not a TypeError (#297) by @Andste82 in #298
- feat(rust): allow_dynamic selects storage on corelib: rs too by @Andste82 in #299
- fix(typescript): the streaming visitor must test an array's element kind before bounding it (#300) by @Andste82 in #301
- chore(bench): regenerate results.txt from a full run by @Andste82 in #302
- feat(all): state a field's schema bound in its own doc comment by @Andste82 in #309
- fix(java): a schema type is a public class in its own file by @Andste82 in #310
- docs(rust): no_std: false also changes the crate shape by @Andste82 in #311
- fix(typescript): take the fixlen maxlen verdict at the length word by @Andste82 in #303
- fix(typescript): latch an array element's declared width at that element (#267) by @Andste82 in #304
- fix(go,dart,python): latch a schema bound at the word that carries it (#267) by @Andste82 in #277
- docs: record where a schema bound is latched, per backend (#267) by @Andste82 in #313
- docs: two CORELIB_PLAN rules went normative; record them and pin the evidence by @Andste82 in #314
- test(dart): take trydecode's first line with sed, not head by @Andste82 in #315
- feat(go): decode straight out of an io.Reader via AcceptStream (#312) by @Andste82 in #316
- test(rust): give rs-static a streaming leg (#306) by @Andste82 in #317
- fix(typescript): keep an fp32 array element's wire bits on the visitor path (#300) by @Andste82 in #318
- fix(rust,java,csharp,zig): latch a fixlen bound at its length word (#267) by @Andste82 in #319
- fix(typescript): a wrapper element's maxlen goes into the reader (#300) by @Andste82 in #320
- fix(go,dart,python): latch an array element's declared width at that element (#267) by @Andste82 in #321
- fix(rust): install an OStream through the fallible constructor by @Andste82 in #328
- docs(architecture,zig): heap-free field storage is a stated backend axis (#323) by @Andste82 in #324
- feat(go,python,typescript,dart)!: the caller owns the encode buffer by @Andste82 in #329
- fix(go,dart): guard a nested array row's element width by @Andste82 in #331
- fix(cpp): encode() must not cap an unbounded message at the ceiling by @Andste82 in #332
- fix(python): declare a schema-bounded field so the receiver cap stops binding it by @Andste82 in #333
- perf(java)!: the array path — decode -25% on the array-heavy shape by @Andste82 in #334
- perf(typescript): close the protobufjs gap on decode; fix bigint fields holding numbers by @Andste82 in #335
- bench: make the int64 axis measurable, and guard against a row that cannot (#336) by @Andste82 in #337
- feat(kotlin): an eleventh target, against corelib-kotlin-mp by @Andste82 in #340
- chore(deps): update gradle/actions action to v6 by @renovate[bot] in #341
- devcontainer: a kotlinc for the review corpus by @Andste82 in #342
- feat(typescript)!: int64 long backs u64/i64 scalars with Long, and the push decoder takes corelib's Long channel by @Andste82 in #343
- docs(architecture): §8 says where a static helper lives, by its shape by @Andste82 in #346
- docs(architecture): §8 asks for no version floor; API_VERSION cannot express one by @Andste82 in #347
- perf(typescript): take corelib's Long channel on the push decoder where it pays by @Andste82 in #348
- generator: emit the helper blocks only where something calls them by @Andste82 in #349
- refactor(go)!: emit sofab.UTF8Valid, the corelib's initialism-correct name by @Andste82 in #350
- refactor(zig)!: emit sofab.utf8Valid, the corelib's camelCase spelling by @Andste82 in #351
- fix(typescript): a nested row's element carries its declared width on the push path too by @Andste82 in #353
- refactor(zig)!: take the corelib's arrays.at instead of emitting the cast by @Andste82 in #354
- refactor(go)!: take corelib-go's collectors instead of emitting them (#345) by @Andste82 in #356
- refactor(java)!: take corelib-java's support layer instead of emitting it by @Andste82 in #357
- refactor(typescript)!: call the corelib's generated-layer helpers, stop emitting copies by @Andste82 in #359
- refactor(csharp)!: take the corelib's decode-side support helpers by @Andste82 in #360
- refactor(rust)!: take the corelib's PayloadAcc instead of emitting the accumulator by @Andste82 in #361
- refactor(cpp)!: take the corelib's MessageSeq instead of emitting WrapperSeq by @Andste82 in #362
- refactor(zig)!: take the corelib's support types instead of emitting them by @Andste82 in #363
- refactor(dart)!: reject through MessageVisitor.invalidate(), not a flag of our own by @Andste82 in #355
- refactor(kotlin)!: take the corelib's support layer instead of emitting Sbuf.kt by @Andste82 in #358
- refactor(dart)!: take the corelib's visitor base, list compare and strict UTF-8 by @Andste82 in #364
- refactor(dart)!: take the corelib's element collectors by @Andste82 in #365
- refactor(go)!: decline an unknown subtree instead of no-op'ing through it by @Andste82 in #366
- refactor(typescript)!: decline an unknown subtree instead of routing it to _DEAD by @Andste82 in #367
- fix(rust): the no-std corelib's PayloadAcc shape follows the crate, not the build flag by @Andste82 in #368
- docs(npm): the README lists every target, and current versions by @Andste82 in #372
- chore(packaging): npm/ becomes packaging/npm/, one directory per channel by @Andste82 in #370
- feat(packaging): build the sofabgen PyPI wheels by @Andste82 in #371
- feat(packaging): publish the wheels from the release tag via OIDC by @Andste82 in #373
- docs(readme): an Installation chapter, and Quick start stops building from source by @Andste82 in #374
Full Changelog: v0.22.0...v0.23.0