Releases: brantburnett/Snappier
release/1.3.0
What's Changed
- Update to .NET 10 GA SDK by @brantburnett in #138
- Throw useful exception on very short output buffers by @brantburnett in #139
- Switch to modern SLNX solution format by @brantburnett in #141
- Remove dependency on System.Threading.Tasks.Extensions by @brantburnett in #142
- Drop all NETSTANDARD2_0 conditionals by @brantburnett in #143
- Enable NRT warnings on down-level target frameworks by @brantburnett in #144
- Add a .NET 4.7.2 target by @brantburnett in #145
Full Changelog: release/1.3.0-beta.1...release/1.3.0
release/1.3.0-beta.2
What's Changed
- Update to .NET 10 GA SDK by @brantburnett in #138
- Throw useful exception on very short output buffers by @brantburnett in #139
- Switch to modern SLNX solution format by @brantburnett in #141
- Remove dependency on System.Threading.Tasks.Extensions by @brantburnett in #142
- Drop all NETSTANDARD2_0 conditionals by @brantburnett in #143
- Enable NRT warnings on down-level target frameworks by @brantburnett in #144
- Add a .NET 4.7.2 target by @brantburnett in #145
Full Changelog: release/1.3.0-beta.1...release/1.3.0-beta.2
release/1.3.0-beta.1
Breaking Changes
- Dropped support for .NET 6
Key Changes
- Add initial support for .NET 10 by @brantburnett in #126
Other Changes
- Fix problems with C# 14 support in docfx by @brantburnett in #127
- Change docfx command to use dotnet by @brantburnett in #128
- Apply general modernization cleanup by @brantburnett in #129
- Use "ref readonly" for readonly input references by @brantburnett in #130
- Use OIDC for NuGet package publishing by @brantburnett in #133
- Get docfx from DLL/XML due to C# 14 incompatibility by @brantburnett in #134
- Update GitHub Sponsors and Buy Me a Coffee usernames by @brantburnett in #135
- Change method for detecting doc publish by @brantburnett in #136
- Correct issues with NuGet validation so we can publish by @brantburnett in #137
Full Changelog: release/1.2.0...release/1.3.0-beta.1
release/1.2.0
Major Changes
- Support for block compression and decompression using
ReadOnlySequence<byte>as the source andIBufferWriter<byte>as the destination Snappy.TryCompressandSnappy.TryDecompressoverloads that return false instead of throwing an exception if the output buffer is too smallSnappyStreamcompression now recognizes blocks that compress poorly and encodes them as uncompressed data- Temporary buffers returned to the
ArrayPoolare now cleared with zeroes before they are returned to protect any sensitive data being compressed or decompressed. This adds some overhead but benchmarks showed it wasn't very significant and it's worthwhile for better security. - General performance improvements
- Improved documentation
What's Changed
- Redesign LeftShiftOverflows test by @brantburnett in #95
- Optimize Read to use Math.Min by @brantburnett in #97
- Implement a faster encoding algoritm for varint by @brantburnett in #98
- Add .NET 9 targets for testing by @brantburnett in #100
- Remove an unnecessary branch from Log2Floor by @brantburnett in #101
- Optimize varint reading for Intel using intrinsics by @brantburnett in #102
- Refactor VarInt reading to support TryRead by @brantburnett in #103
- Use VarIntEncoding.TryRead in SnappyDecompressor by @brantburnett in #104
- Add overloads to decompress from ReadOnlySequence by @brantburnett in #105
- Compress from ReadOnlySequence to an IBufferWriter by @brantburnett in #107
- Add code coverage report to CI by @brantburnett in #108
- Improve the efficiency of decompressing to IBufferWriter by @brantburnett in #109
- Drop .NET 7 target by @brantburnett in #110
- Allow benchmarks to run on Linux/Mac by @brantburnett in #111
- Add coverage summary to build results by @brantburnett in #112
- Add some tweaks to SnappyStream by @brantburnett in #113
- Add uncompressed block support to stream compression by @brantburnett in #114
- Parallelize Windows tests in GHA by @brantburnett in #115
- Use artifacts dir and add NuGet package source mapping by @brantburnett in #116
- Validate proper implementation of bufferWriter to prevent overflows by @brantburnett in #117
- Add TryCompress and TryDecompress by @brantburnett in #118
- Update readme, add a package icon, and add package validation by @brantburnett in #119
- Add a documentation site by @brantburnett in #120
- Ensure compression buffers do not overlap by @brantburnett in #121
- Misc documentation and code coverage improvements by @brantburnett in #122
- Create SECURITY.md by @brantburnett in #123
- Clear buffers before returning them to the ArrayPool by @brantburnett in #124
Full Changelog: release/1.1.6...release/1.2.0
1.2.0-beta0001
Major Changes
- Support for block compression and decompression using
ReadOnlySequence<byte>as the source andIBufferWriter<byte>as the destination Snappy.TryCompressandSnappy.TryDecompressoverloads that return false instead of throwing an exception if the output buffer is too smallSnappyStreamcompression now recognizes blocks that compress poorly and encodes them as uncompressed data- Temporary buffers returned to the
ArrayPoolare now cleared with zeroes before they are returned to protect any sensitive data being compressed or decompressed. This adds some overhead but benchmarks showed it wasn't very significant and it's worthwhile for better security. - General performance improvements
- Improved documentation
What's Changed
- Redesign LeftShiftOverflows test by @brantburnett in #95
- Optimize Read to use Math.Min by @brantburnett in #97
- Implement a faster encoding algoritm for varint by @brantburnett in #98
- Add .NET 9 targets for testing by @brantburnett in #100
- Remove an unnecessary branch from Log2Floor by @brantburnett in #101
- Optimize varint reading for Intel using intrinsics by @brantburnett in #102
- Refactor VarInt reading to support TryRead by @brantburnett in #103
- Use VarIntEncoding.TryRead in SnappyDecompressor by @brantburnett in #104
- Add overloads to decompress from ReadOnlySequence by @brantburnett in #105
- Compress from ReadOnlySequence to an IBufferWriter by @brantburnett in #107
- Add code coverage report to CI by @brantburnett in #108
- Improve the efficiency of decompressing to IBufferWriter by @brantburnett in #109
- Drop .NET 7 target by @brantburnett in #110
- Allow benchmarks to run on Linux/Mac by @brantburnett in #111
- Add coverage summary to build results by @brantburnett in #112
- Add some tweaks to SnappyStream by @brantburnett in #113
- Add uncompressed block support to stream compression by @brantburnett in #114
- Parallelize Windows tests in GHA by @brantburnett in #115
- Use artifacts dir and add NuGet package source mapping by @brantburnett in #116
- Validate proper implementation of bufferWriter to prevent overflows by @brantburnett in #117
- Add TryCompress and TryDecompress by @brantburnett in #118
- Update readme, add a package icon, and add package validation by @brantburnett in #119
- Add a documentation site by @brantburnett in #120
- Ensure compression buffers do not overlap by @brantburnett in #121
- Misc documentation and code coverage improvements by @brantburnett in #122
- Create SECURITY.md by @brantburnett in #123
- Clear buffers before returning them to the ArrayPool by @brantburnett in #124
Full Changelog: release/1.1.6...release/1.2.0
release/1.1.6
What's Changed
- Fix nullable attributes leaking as public by @brantburnett in #94
Full Changelog: release/1.1.5...release/1.1.6
release/1.1.5
What's Changed
- Update README.md - Correcting wrong descriptions by @mjebrahimi in #91
- Switch NuGet to use a license expression to assist with SBOM analysis by @brantburnett in #93
New Contributors
- @mjebrahimi made their first contribution in #91
Full Changelog: release/1.1.4...release/1.1.5
release/1.1.4
This release primarily includes performance improvements around stream decompression in .NET 8, but does show some minor decompression improvements on other runtimes (except .NET 4.8 which is not a priority). Also includes a bug fix for a stream decompression corner case.
What's Changed
- Eliminate most CharTable range checks by @brantburnett in #81
- Apply various code analysis improvements by @brantburnett in #82
- Handle null chunk type using enum value by @brantburnett in #83
- Improve .NET 8 stream decompression perf by @brantburnett in #84
- Refactor DecompressAllTags to reduce duplicate code by @brantburnett in #85
- Use an inline array for decompression scratch by @brantburnett in #86
- Fix stream decompression corner case failure by @brantburnett in #89
- Don't pass around references to the scrach buffer by @brantburnett in #90
Decompression Benchmarks
BenchmarkDotNet v0.13.10, Windows 11 (10.0.22621.3007/22H2/2022Update/SunValley2)
12th Gen Intel Core i7-1270P, 1 CPU, 16 logical and 12 physical cores
.NET SDK 8.0.101
| Method | Runtime | Build | PGO | Mean | Error | StdDev | Ratio | RatioSD | Rank |
|---|---|---|---|---|---|---|---|---|---|
| BlockDecompress | .NET Framework 4.8 | Previous | N | 14.55 us | 0.089 us | 0.079 us | 1.00 | 0.00 | 1 |
| BlockDecompress | .NET Framework 4.8 | Default | N | 15.78 us | 0.189 us | 0.158 us | 1.08 | 0.01 | 2 |
| BlockDecompress | .NET 6.0 | Previous | N | 12.99 us | 0.151 us | 0.134 us | 1.00 | 0.00 | 2 |
| BlockDecompress | .NET 6.0 | Default | N | 12.75 us | 0.181 us | 0.170 us | 0.98 | 0.02 | 1 |
| BlockDecompress | .NET 8.0 | Previous | N | 10.57 us | 0.208 us | 0.214 us | 1.00 | 0.00 | 2 |
| BlockDecompress | .NET 8.0 | Default | N | 10.30 us | 0.163 us | 0.152 us | 0.97 | 0.02 | 1 |
| BlockDecompress | .NET 8.0 | Previous | Y | 10.51 us | 0.198 us | 0.194 us | 1.00 | 0.00 | 2 |
| BlockDecompress | .NET 8.0 | Default | Y | 10.15 us | 0.173 us | 0.162 us | 0.97 | 0.02 | 1 |
| Method | Runtime | Build | PGO | Mean | Error | StdDev | Ratio | RatioSD | Rank |
|---|---|---|---|---|---|---|---|---|---|
| StreamDecompress | .NET Framework 4.8 | Previous | N | 337.3 us | 6.35 us | 5.94 us | 1.00 | 0.00 | 1 |
| StreamDecompress | .NET Framework 4.8 | Default | N | 332.4 us | 5.09 us | 4.51 us | 0.99 | 0.02 | 1 |
| StreamDecompress | .NET 6.0 | Previous | N | 164.9 us | 2.57 us | 2.40 us | 1.00 | 0.00 | 2 |
| StreamDecompress | .NET 6.0 | Default | N | 161.2 us | 3.21 us | 3.29 us | 0.98 | 0.02 | 1 |
| StreamDecompress | .NET 8.0 | Previous | N | 194.4 us | 2.16 us | 2.02 us | 1.00 | 0.00 | 2 |
| StreamDecompress | .NET 8.0 | Default | N | 189.6 us | 2.59 us | 2.42 us | 0.98 | 0.02 | 1 |
| StreamDecompress | .NET 8.0 | Previous | Y | 201.7 us | 4.01 us | 4.45 us | 1.00 | 0.00 | 2 |
| StreamDecompress | .NET 8.0 | Default | Y | 176.6 us | 3.49 us | 3.43 us | 0.87 | 0.03 | 1 |
Full Changelog: release/1.1.3...release/1.1.4
release/1.1.3
What's Changed
- Update to target .NET 8 by @brantburnett in #80
Full Changelog: release/1.1.2...release/1.1.3
1.1.2
What's Changed
- Update COPYING.txt by @brantburnett in #74
- Rework test reporter for public PRs by @brantburnett in #78
- Fix test reporter typo by @brantburnett in #79
- check table size greater than by @ak88 in #77
New Contributors
Full Changelog: release/1.1.1...release/1.1.2