Expand description
§Planned Breaking Changes
This page lists (incomplete) list of planned changes on the next major release (most likely version 0.4).
§Major design change (and prelude module)
Since the next major release will heavily utilize traits and for better
ergonomics, you will want to import ssdeep::prelude::*.
This module is added (as an empty module) in version 0.3.13 for transition.
§Stabilization of RLE-based compression in dual fuzzy hashes
We found no issues on dual fuzzy hashes and recognized that separately storing “reverse normalization” data is helpful on some cases.
So, the next major release will stabilize currently internal RLE-based compression used by dual fuzzy hashes.
Also, we will attempt to reduce memory footprint and if (and only if) we are sure that this is performant enough (considering the use cases), the compression ratio will be improved from ≒5/8 to ≒1/2(=4/8) (with the exact same size as the one fuzzy hash, it will be able to represent both normalized and raw contents).
§MSRV
Depending on the Rust edition target (we haven’t decided yet), MSRV on the next major release will be raised to the version specific to that edition.
- Edition 2021 case: at least 1.79 (most likely 1.83)
Rust 1.79’s associated type bounds feature makes our new trait-based design far more easier. - Edition 2024 case (more likely): 1.85 (not released yet)
§Features
§Removal of strict-parser
Simply, the next version will make this default and there will be no option to disable that strict behavior.
§Removal of opt-reduce-fnv-table
This feature is rather subtractive than recommended additive feature rules (although not completely against it) and the change is too subtle (memory footprint of 4KiB can be easily justified on the environment which ssdeep hashes are generated).
So, this feature is going to be removed on the next major release.
It may return in the future when fine-tuning is absolutely necessary in this crate (but unlikely; since considered optimal algorithms are far better than past alternatives).
§Removal of nightly (use unstable instead)
Currently, the unstable feature is preferred to use Nightly Rust features.
nightly is preserved as an alias of unstable (although being undocumented)
but will be removed on the next major release.
§Removal of tests-very-slow
Since commit 96dfea7d4fd5 (a part of version 0.3.1), tests-very-slow was
empty for a long time. Since there’s no very time-consuming (hours-taking)
tests, this feature is going to be removed.
§Coverage: Removing grcov support
The support for grcov is going to be removed in the next major release because (along with Nightly compiler) cargo-llvm-cov supports taking a branch coverage and required many comments to control grcov behavior because of grcov not knowing implicit branches (e.g. when accessing slices, defining struct members).
§Removal (because of being deprecated)
§From implementation from Raw to Normalized variants
Because it is found that it breaks a semantic rule of the From trait,
conversion from raw fuzzy hash to normalized fuzzy hash as an implementation of
From is deprecated and will be removed on the next major release.
To convert a raw fuzzy hash to the normalized counterpart, you must use
normalize()-like methods (may be renamed in the next release but the
conversion feature itself will be preserved).
§+= operator overloads
Since it’s clear that this operator overload is not helpful enough, they are now deprecated and will be removed on the next major release.
§Removal (temporally)
§Numeric windows
crate::block_hash::NumericWindows is going to be removed temporally.
This is because the iterator which iterates more natural index values:
crate::block_hash::IndexWindows is there (note that how to access this kind
of iterator will change in an incompatible way).
crate::block_hash::NumericWindows will be back if removing it
can be a problem for some use cases.
§Removal (for other reasons)
§FuzzyHashData::IS_*_FORM (and related constants)
crate::FuzzyHashData::IS_NORMALIZED_FORM and
crate::FuzzyHashData::IS_LONG_FORM (and related constants) will be removed
because of consistency issues on the new trait-based design (it’s easy to keep
those but traits will not have easy access to them) and
because we have a workaround.
§Going to be Private: Internal Hashes / Comparison Structures
They were useful to experiment with ssdeep internals but we could not justify keeping them public. If you need to use those, just vendor the source code for your needs (they are relatively simple and will be easy to vendor them).
Two internal hashes for fuzzy hash generator is separated to new internal modules to make vendoring the source code much easier (although not completely separate from the rest, it should be easy to cut the dependencies).
For specific needs, a comparison target storing just one block hash (instead of two block hashes) will be public as a new type.