Skip to content

Releases: mirage/decompress

1.5.3

19 Sep 10:15
52ff65a
Compare
Choose a tag to compare

CHANGES:

  • Delete libdecompress.a (@dinosaure, #152)

    This artifact is unused and complexify the distribution. We decided to delete
    it. If people want to use libdecompress.a, we can provide an other package
    which will implement the ctypes ceremony to safely produce a
    libdecompress.a.

  • Lint dependencies (lower bounds) (@dinosaure, #153)

  • Remove unsafe accesses into our decompress.lzo implementation
    (@dinosaure, #154)

  • Improve and fix our decompress.lzo implementation
    (@dinosaure, #155, #158, #159)

1.5.2

24 Jan 17:11
Compare
Choose a tag to compare

CHANGES:

  • Remove remaining bigarray-compat dependencies (@copy, #147)

1.5.1

30 Aug 12:08
Compare
Choose a tag to compare

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

28 Aug 08:54
Compare
Choose a tag to compare

CHANGES:

  • Update with ocamlformat.0.20.0 (@dinosaure, #133)

  • Add lzo into 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 a Flat block. The Flat block will contains what the queue
    has and nothing more: if the queue has 4 elements, we will encode a Flat
    block with 4 elements, if the queue has more than 65535 elements, we will
    encore only 65535 elements into the Flat block.

    The user is not able to stream a Flat block: we can not fill one Flat
    block with multiple Await. This behavior is specific to the Flat block,
    the rest (Fixed and Dynamic blocks) did not change.

    For higher level API, the level = 0 informs the deflator to copy as is
    input - no compression was done for zlib and gzip and we emit only Flat
    blocks. By default, the level = 4 is given so you probably will not notice
    anything but be care that we shifted compression level and 0 becomes a
    level without compression.

1.4.3

08 Apr 11:39
Compare
Choose a tag to compare

CHANGES:

1.4.2

03 Aug 05:25
Compare
Choose a tag to compare

CHANGES:

v1.4.1

11 May 14:49
Compare
Choose a tag to compare

CHANGES:

  • Fix and of file and end of block op-code (@dinosaure, #123)
    breaking changes
    Semantically, the module De has 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 0 to say the end of the stream. Now, such
    call is required to notice to De.Inf the 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
    (see tests/invalid_distance_code).

    For Zl/Gz users, this update does not imply anything when these
    implementations take care about such detail. Only De users 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 decompress to optint.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 memcpy used on the non-stream implementation (@clecat,
    @dinosaure, #129)

v1.4.0

22 Apr 13:43
Compare
Choose a tag to compare

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 to De.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 optint and how we handle large files with Gz. Fix an error
    when we encode the isize into 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 as read and write. It's useful when we want to plug decompress
    behind something like a socket and 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-git and
    irmin with 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

03 Mar 16:14
Compare
Choose a tag to compare

CHANGES:

  • Add a little executable to benchmark inflation into the distribution (@dinosaure, #93)

  • Add instructions for running benchmark (@gs0510, #94)

  • Clarify the description (@XVilka, #96)

  • 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.compress arguments (@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 of De.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.lz libraries 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 ctypes reverse binding (@dinosaure, #98)

  • Provide a binary decompress.pipe which can compress/uncompress with
    deflate, zlib or gzip format.

v1.2.0

07 Jul 18:30
Compare
Choose a tag to compare

CHANGES: