Skip to content

Commit 0b0146a

Browse files
dfa1claude
andcommitted
docs: record experimental-tier exclusion (CCtxParams) in binding scope
The ZSTD_CCtx_params bundle is ZSTDLIB_STATIC_API — experimental tier. The symbols are exported (the macro resolves to visibility("default"), so the FFM layer could bind them by name), but they carry no API-stability guarantee and may change or be removed between zstd releases. The bundle only saves a few setParameter calls at context init, and the stable per-context ZSTD_CCtx_setParameter path (already bound) covers the same need, so it is intentionally not bound. Extend ADR 0013 to exclude the experimental tier and note the reason on the supported.md Advanced parameters row. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 99e7dd6 commit 0b0146a

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

adr/0013-binding-coverage-scope.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ADR 0013: Binding coverage scope — exclude legacy/deprecated
1+
# ADR 0013: Binding coverage scope — exclude legacy/deprecated/experimental
22

33
- **Status:** Accepted
44
- **Date:** 2026-06-27
@@ -18,6 +18,16 @@ training), and frame/skippable-frame introspection. **Exclude** deprecated
1818
functions and the `legacy/` and `deprecated/` source trees (the native build
1919
compiles only `common`, `compress`, `decompress`, `dictBuilder`).
2020

21+
Also **exclude the experimental tier** — symbols declared `ZSTDLIB_STATIC_API`.
22+
These are exported by the build (the macro resolves to `visibility("default")`,
23+
so the FFM layer could bind them by name), but they carry no API-stability
24+
guarantee and may change or be removed between zstd releases. Notably this
25+
covers the `ZSTD_CCtx_params` bundle (`ZSTD_createCCtxParams`,
26+
`ZSTD_CCtxParams_setParameter`, `ZSTD_CCtx_setParametersUsingCCtxParams`, …):
27+
it only saves a few `setParameter` calls at context init — never on a hot path —
28+
so the experimental-API risk is not worth the marginal value. The stable,
29+
already-bound per-context `ZSTD_CCtx_setParameter` path covers the same need.
30+
2131
The full coverage map — every public symbol, what is bound, and what is
2232
intentionally omitted — is maintained in `docs/supported.md`.
2333

docs/supported.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ rather than the deprecated `ZSTD_getDecompressedSize`.
3333
| Dictionary training (ZDICT) | 8 / 12 | trainFromBuffer, cover/fastCover optimizers, finalizeDictionary, getDictHeaderSize |
3434
| Streaming — compress | 3 / 22 | `ZstdOutputStream` (compressStream2 + buffer sizes) |
3535
| Streaming — decompress | 3 / 15 | `ZstdInputStream` (decompressStream + buffer sizes) |
36-
| Advanced parameters | 14 / 38 | all `ZSTD_cParameter` + `ZSTD_dParameter` via `ZstdCompressParameter`/`ZstdDecompressParameter`; `compress2`, `C/DCtx_setParameter`, `C/DCtx_reset`, `C/DCtx_loadDictionary`, `CCtx_refCDict`/`DCtx_refDDict`, `C/DCtx_refPrefix`, `c/dParam_getBounds`; MT inert on single-thread build |
36+
| Advanced parameters | 14 / 38 | all `ZSTD_cParameter` + `ZSTD_dParameter` via `ZstdCompressParameter`/`ZstdDecompressParameter`; `compress2`, `C/DCtx_setParameter`, `C/DCtx_reset`, `C/DCtx_loadDictionary`, `CCtx_refCDict`/`DCtx_refDDict`, `C/DCtx_refPrefix`, `c/dParam_getBounds`; MT inert on single-thread build. The `CCtxParams` cluster is experimental (`ZSTDLIB_STATIC_API`, no stability guarantee — exported, but intentionally not surfaced) — see [ADR 0013](../adr/0013-binding-coverage-scope.md) |
3737
| Frame inspection | 12 / 13 | `ZstdFrame` + getFrameProgression; `_advanced` not bound |
3838
| Memory sizing | 9 / 14 | sizeof_C/DCtx, sizeof_C/DDict, estimate C/DCtx + C/DDict size, in-place decompression margin |
3939
| Low-level block | 0 / 12 | expert block/continue API not bound |

0 commit comments

Comments
 (0)