@hackage / snappy-c

Bindings to Google's Snappy: A fast compression library

Latest0.1.3

About

Metadata

  • Last updated , by EdskoDeVries
  • License BSD-3-Clause
  • Maintained by: finley@well-typed.com

  • Lottery factor: 1

Links

Installation

Tested Compilers

  1. 9.12.2
  2. 9.10.3
  3. 9.8.4
  4. 9.6.7
  5. 9.4.8
  6. 9.2.8
  7. 8.10.7

Package Flags

Use the -f option with cabal commands to enable flags

    pkg-config (off by default)

    Use pkg-config executable to locate foreign snappy library.

Readme

snappy-c

CI Status Badge

Haskell bindings to the C API of Snappy: A fast compression library.

Usage

[!IMPORTANT] To use this package, you must have the Snappy library installed and visible to cabal.

If your build fails with a message like:

Error: cabal-3.10.1.0: Missing dependency on a foreign library:
* Missing (or bad) C library: snappy

You need to explicitly configure the include and library paths via cabal. One way to do so is to add something like this to your cabal.project configuration:

package snappy-c
  extra-include-dirs:
    /path/to/snappy/include
  extra-lib-dirs:
    /path/to/snappy/lib

In my case, on a mac using homebrew, the following suffices:

package snappy-c
  extra-lib-dirs:
    /opt/homebrew/lib
  extra-include-dirs:
    /opt/homebrew/include

We wouldn't need to do this if the Snappy library supported pkg-config configuration, but as of writing they do not.

Installing Snappy

The Snappy library is available most package managers.

Homebrew
brew install snappy
APT
apt-get install libsnappy-dev

Performance

snappy-c stays true to the speedy spirit of Snappy compression.

The package includes a benchmark suite that compares the compression, decompression, and roundtrip performance of this package against

Run the benchmarks with:

cabal run bench-snappy-c -- --time-limit 5 -o bench.html

[!IMPORTANT] To build the benchmarks, you will need to set extra-include-dirs and extra-lib-dirs for the snappy package as you did for snappy-c (see Usage).

Here's a screenshot from the generated bench.html file:

benchmark results

snappy-cli performance

See snappy-cli/README.md for a demonstration of the performance of this library in a CLI tool.