The core crates (clawhdf5, -agent, -format, -io, -filters, -ann, -accel, -netcdf4, -cli) now build no C by default: deflate defaults to zlib-rs, a pure-Rust port of zlib-ng, and zlib-ng becomes the opt-in `fast-deflate`, which overrides zlib-rs wherever it is enabled. A default build no longer needs cmake or a C compiler. Measured on tank, both builds run alternately, three rounds, medians: zlib-rs is within 6% of zlib-ng on every HDF5 read and write (512x512 deflate-6 chunked write 1.458 vs 1.484 ms; 64 MB compressed read 64.4 vs 65.2 ms), and compressed output is byte-identical. Details in BENCHMARKS.md, "Deflate backend". Getting there took two fixes the first measurement exposed: - zlib-rs needs `std` to detect SIMD at runtime. flate2 enables it via its default `runtime_detection`, which `default-features = false` had switched off, leaving zlib-rs 3.5x slower on inflate. The `zlib-rs` features now enable it. - Both deflate paths streamed through flate2's 32 KiB read/write wrappers. They now hand the codec the whole chunk in one call, into a buffer sized up front (~5% on chunked writes). This also fixes a silent short read: the streaming reader returned a truncated stream's bytes without an error; a truncated chunk is now DecompressionError. In clawhdf5-filters, output longer than the stated size is now an error rather than silently cut off. CI: ci-test.sh lints and tests the zlib-ng path, and fails if a C-building crate (*-sys, cc, cmake) enters a core crate's default dependency tree. The arm64 job no longer installs cmake. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
51 lines
1.7 KiB
TOML
51 lines
1.7 KiB
TOML
[package]
|
|
name = "clawhdf5"
|
|
version = "2.7.0"
|
|
edition = "2024"
|
|
description = "Pure-Rust HDF5 reader/writer — no C dependencies"
|
|
license = "MIT"
|
|
repository = "https://git.redclaw.dev/quantumclaw/clawhdf5"
|
|
readme = "README.md"
|
|
keywords = ["hdf5", "science", "data", "binary"]
|
|
categories = ["parser-implementations", "science", "encoding"]
|
|
|
|
[dependencies]
|
|
clawhdf5-format = { path = "../clawhdf5-format", version = "2.7.0" }
|
|
clawhdf5-io = { path = "../clawhdf5-io", version = "2.7.0" }
|
|
rayon = { version = "1", optional = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = { workspace = true }
|
|
criterion = { workspace = true }
|
|
clawhdf5-io = { path = "../clawhdf5-io", version = "2.7.0", features = ["mmap"] }
|
|
clawhdf5-format = { path = "../clawhdf5-format", version = "2.7.0", features = ["parallel", "fast-checksum"] }
|
|
clawhdf5-filters = { path = "../clawhdf5-filters", version = "2.7.0" }
|
|
|
|
[[bench]]
|
|
name = "mmap_bench"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "parallel_bench"
|
|
harness = false
|
|
|
|
[features]
|
|
default = ["mmap", "provenance"]
|
|
mmap = ["clawhdf5-io/mmap"]
|
|
parallel = ["clawhdf5-format/parallel", "rayon"]
|
|
# zlib-ng (C, needs cmake) instead of the default pure-Rust zlib-rs.
|
|
fast-deflate = ["clawhdf5-format/fast-deflate"]
|
|
apple-compression = []
|
|
zstd = ["clawhdf5-format/zstd"]
|
|
blake3_hash = ["clawhdf5-format/blake3_hash"]
|
|
lz4 = ["clawhdf5-format/lz4"]
|
|
pcodec = ["clawhdf5-format/pcodec"]
|
|
# Dataset::verify_provenance() — recompute a dataset's SHA-256 and compare
|
|
# against its stored _provenance_sha256 attribute. On by default, matching
|
|
# clawhdf5-format's own default-on `provenance` feature.
|
|
provenance = ["clawhdf5-format/provenance"]
|
|
|
|
[package.metadata.docs.rs]
|
|
features = ["mmap"]
|
|
targets = ["x86_64-unknown-linux-gnu"]
|