Releases: mirage/decompress
1.5.3
CHANGES:
-
Delete
libdecompress.a(@dinosaure, #152)This artifact is unused and complexify the distribution. We decided to delete
it. If people want to uselibdecompress.a, we can provide an other package
which will implement thectypesceremony to safely produce a
libdecompress.a. -
Lint dependencies (lower bounds) (@dinosaure, #153)
-
Remove unsafe accesses into our
decompress.lzoimplementation
(@dinosaure, #154) -
Improve and fix our
decompress.lzoimplementation
(@dinosaure, #155, #158, #159)
1.5.2
1.5.1
CHANGES:
-
Fix the stream of gzip inflation. If the user wants to know how many bytes
are available into the output buffer, he/she must be in the DEFLATE internal
state. Otherwise, we raise an exception. However, such information is not
available into the API so we decided to say that the full output buffer is
free when we are into the GZip header state.It ensures a real full stream API. (@dinosaure, #144)
1.5.0
CHANGES:
-
Update with
ocamlformat.0.20.0(@dinosaure, #133) -
Add
lzointo the binary (@dinosaure, #140) -
Be able to deflate/inflate files (@dinosaure, #141)
-
Implement the zero-compression into zlib/gzip (@dinosaure, #142)
breaking change: The behavior of flat block changed. The user does not
specify how many bytes he/she wants to give. He/She can just specify that
he/she wants aFlatblock. TheFlatblock will contains what the queue
has and nothing more: if the queue has 4 elements, we will encode aFlat
block with 4 elements, if the queue has more than 65535 elements, we will
encore only 65535 elements into theFlatblock.The user is not able to stream a
Flatblock: we can not fill oneFlat
block with multipleAwait. This behavior is specific to theFlatblock,
the rest (FixedandDynamicblocks) did not change.For higher level API, the
level = 0informs the deflator to copy as is
input - no compression was done forzlibandgzipand we emit onlyFlat
blocks. By default, thelevel = 4is given so you probably will not notice
anything but be care that we shifted compression level and0becomes a
level without compression.
1.4.3
1.4.2
CHANGES:
- Fix lower bounds of
cmdliner(@kit-ty-kate, #130) - Fix big-endian support (@dinosaure, @talex5, #131)
v1.4.1
CHANGES:
-
Fix and of file and end of block op-code (@dinosaure, #123)
breaking changes
Semantically, the moduleDehas another behavior about the inflation.
Previously, the stream inflation was smart enough to recognize the end
of the stream and the user did not need to really emit:
De.Inf.src decoder empty 0 0to say the end of the stream. Now, such
call is required to notice toDe.Infthe end of the stream. By this
way, we are able to terminate the inflation correctly and we still
continue to raise an error for unterminated stream
(seetests/invalid_distance_code).For
Zl/Gzusers, this update does not imply anything when these
implementations take care about such detail. OnlyDeusers should update
their code to really emit the end of the stream with
De.Inf.src decoder empty 0 0. In the PR, the diff show how to upgrade such
code. -
Upgrade
decompresstooptint.0.1.0(@samoht, @dinosaure, #124) -
Fix compilation of benchmarks (@dinosaure, #128)
-
Fix out of bounds errors on the non-stream implementation (@clecat,
@ewanmellor, @dinosaure, #126, #127) -
Optimize
memcpyused on the non-stream implementation (@clecat,
@dinosaure, #129)
v1.4.0
CHANGES:
-
Add a well-know limitation about the encoding on the documentation, the
output buffer must be upper than 2 bytes in any cases.
(@dinosaure, #114) -
Improve the documentation
(@dinosaure, @brendanlong, #115) -
breaking changes, the type of the window used to deflate according
RFC 1951 was updated toDe.Lz77.window
(@dinosaure, #116 & #115) -
Fix a bug when we want to add the EOB op-code into the queue. The deflation
takes care about that. Note that the queue must be larger than 2.
(@dinosaure, @kluvin, #117) -
Improve the documentation a bit
(@mseri, @dinosaure, #119) -
Fix the use of
optintand how we handle large files withGz. Fix an error
when we encode theisizeinto the deflated stream.
(@dinosaure, @igarnier, #121 & #120) -
Add a non-stream implementation (@clecat, @dinosaure, #102 & #92)
The non-blocking stream API has a cost to maintain a state across syscall
such asreadandwrite. It's useful when we want to plugdecompress
behind something like asocketand care about memory-consumption but it has
a big cost when we want to compress/decompress an object saved into one and
unique buffer.The non-stream API gives an opportunity to inflate/deflate one and unique
buffer without the usual plumbing required by the non-blocking stream API.
However, we are limited to compute only objects which can fit into a
bigarray.About performance, the non-stream API is better than the non-blocking stream
API. See the PR for more details about performances. On the
book2(from the Calgary corpus) file:decompress(stream):
15 Mb/s (deflation), 76 Mb/s (inflation), ratio: 42.46 %decompress(non-stream):
17 Mb/s (deflation), 105 Mb/s (inflation), ratio: 34.66 %
Even if we checked the implementation with our tests (we ran
ocaml-gitand
irminwith this path), the implementation is young and we probably miss
some details/bugs. So we advise the user to compare, at least, the non-stream
implementation with the non-blocking stream implementation if something is
wrong.
v1.3.0
CHANGES:
-
Add a little executable to benchmark inflation into the distribution (@dinosaure, #93)
-
Improve the benchmark and outputs (@dinosaure, @gs0510, #95)
-
Avoid allocation of distance table (@Engil, @dinosaure, #97)
-
Swapping from arithmetic to logical bitshifts on
d.hold(@clecat, #99) -
Make the use of all
Higher.compressarguments (@vect0r-vicall, #103) -
Apply ocamlformat.0.16.0 (@dinosaure, #105, #107)
-
Improve Lz77 algorithms (@dinosaure, #108)
breaking changes the deflation expects a new window:De.Lz77.make_window
instead ofDe.make_window(which is twice larger to improve the compression
algorithm)Depending on the level and your corpus, we did not observe performance
regression on deflation (and #97 improves a lot performances). An higher level
is slower (but the compression ratio is better). We advise, by default, to use
the level 6.Note that the user is able to make its own compression algorithm according to
his corpus. An example of such implementation is available on the new
decompress.lzlibraries which fills a queue and compress the input.breaking changes decompress expects a level between 0 and 9 (inclusive)
(instead of 0 and 3). -
Add tests about level compression (@dinosaure, #109)
-
Add level on GZip layer (@dinosaure, #110)
-
Provide a
ctypesreverse binding (@dinosaure, #98) -
Provide a binary
decompress.pipewhich can compress/uncompress with
deflate, zlib or gzip format.
v1.2.0
CHANGES:
- add LZO support (@dinosaure, @cfcs, @XVilka, #82)
- update binaries (@dinosaure, @XVilka, #89)
- fix an exception leak (@dinosaure, @b1gtang, #88)
- update README.md (@dinosaure, @XVilka, #87)
- fix a mis-use of
ZlAPI (@dinosaure, #85) - add
duneas a dependency ofrfc1951(@dinosaure, @kit-ty-kate, #84) - real non-blocking state with
Zl(@dinosaure, #84)