diff --git a/rust/README.md b/rust/README.md index 1004593bf..f88dabc34 100644 --- a/rust/README.md +++ b/rust/README.md @@ -47,7 +47,10 @@ zstd ABI: sequence-store builder and no-compress fallback. Rust also owns the frame-chunk block loop, including block sizing, target/split/internal dispatch, output accounting, and frame-state updates; C supplies the - private state-preparation and block-compression callbacks. The + private state-preparation and block-compression callbacks. Rust also owns + the single-threaded buffered/stable stream state machine, including direct + versus buffered output, pending-output draining, and frame reset policy. + The external-sequence-and-literals block loop is Rust-owned as well; C retains only its CCtx-dependent sequence-conversion callback. - `zstd_compress_frame` serializes frame headers, skippable frames, and the @@ -79,7 +82,8 @@ zstd ABI: - `pool` implements the bounded worker pool used by multithreaded compression. - The `zstdmt_compress` integration keeps job descriptors and synchronization private to C while Rust owns input-retention scans, reusable input-range - overlap decisions, and pending-output decisions through scalar job + overlap decisions, outer scheduling and end-directive adjustments, + job-creation decisions, and pending-output decisions through scalar job projections. - Dictionary support - `zstd_ddict` owns, loads, copies, and references decode dictionaries. @@ -103,10 +107,10 @@ zstd ABI: - `zstd_cli` owns the Rust parser, safety policy, and dispatch. It is built by the separate `cli/` static-library package only for program archives, so library builds do not acquire program-only dependencies. The C - `fileio` layer retains the format-specific codec callbacks and metadata, - while Rust owns the mixed-format probe/dispatch loop, decompression result - policy/final accounting, and gzip, xz/lzma, and lz4 codec leaves. Rust - already owns the file preference policy, filename decisions, + `fileio` layer retains the format-specific codec callbacks, loops, and + metadata, while Rust owns the mixed-format probe/dispatch loop and + decompression result policy/final accounting. Rust already owns the file + preference policy, filename decisions, source/destination opening, dictionary buffers, asynchronous I/O pools, and pass-through copy leaf. - `timefn` provides the monotonic nanosecond clock behind `UTIL_time_t`, @@ -118,14 +122,15 @@ zstd ABI: feature, because the parser layer requires the C `fileio` backend that tests do not compile. -Generic high-level frame-compression state-machine orchestration and the -remaining multithreaded scheduling/outer-flush orchestration are still C. The -frame epilogue, produced-output flush policy, MT job-creation policy, -reusable MT input-range policy, external-sequence/literals block loop, block -decoder wrappers, decompression result policy, and gzip/xz/lzma/lz4 codec -leaves now run in Rust. The remaining C paths must move before the rewrite is -complete. Keeping that boundary explicit prevents a passing hybrid build from -being mistaken for the final all-Rust result. +Sequence-store construction and its no-compress fallback, remaining +CCtx-dependent block and sequence conversion, dictionary ingestion and CDict +lifecycle, optional-format decompression loops, and the CLI zstd compression +leaf remain in C. The single-threaded buffered/stable stream state machine, +MT outer scheduling and flush policy, external-sequence/literals block loop, +block decoder wrappers, and decompression result policy now run in Rust. The +remaining C paths must move before the rewrite is complete. Keeping that +boundary explicit prevents a passing hybrid build from being mistaken for the +final all-Rust result. ## Legacy decoding