buffer-builder: Library for efficiently building up buffers, one piece at a time
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
Warnings:
- 'ghc-options: -O2' is rarely needed. Check that it is giving a real benefit and not just imposing longer compile times on your users.
- 'cc-options: -O[n]' is generally not needed. When building with optimisations Cabal automatically adds '-O2' for C code. Setting it yourself interferes with the --disable-optimization flag.
Data.BufferBuilder is an efficient library for incrementally building
up ByteString
s, one chunk at a time. Early benchmarks show it
is over twice as fast as ByteString Builder, primarily because
BufferBuilder
is built upon an ST-style restricted monad and
mutable state instead of ByteString Builder's monoidal AST.
Internally, BufferBuilder is backed by a few C functions. Examination of GHC's output shows nearly optimal code generation with no intermediate thunks -- and thus, continuation passing and its associated indirect jumps and stack traffic only occur when BufferBuilder is asked to append a non-strict ByteString.
I benchmarked four approaches with a URL encoding benchmark:
State monad, concatenating ByteStrings: 6.98 us
State monad, ByteString Builder: 2.48 us
Crazy explicit RealWorld baton passing with unboxed state: 28.94 us (GHC generated really awful code for this, but see the revision history for the technique)
C + FFI + ReaderT: 1.11 us
Using BufferBuilder is very simple:
import qualified Data.BufferBuilder as BB let byteString = BB.runBufferBuilder $ do BB.appendBS "http" BB.appendChar8 '/' BB.appendBS "//"
This package also provides Data.BufferBuilder.Utf8 for generating UTF-8 buffers and Data.BufferBuilder.Json for encoding data structures into JSON.
Properties
Versions | 0.1.0.0, 0.2.0.0, 0.2.0.1, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.2.1.0, 0.2.2.0, 0.2.2.1, 0.2.2.2, 0.2.3.0, 0.2.4.0, 0.2.4.1, 0.2.4.2, 0.2.4.3, 0.2.4.4, 0.2.4.5, 0.2.4.6, 0.2.4.7, 0.2.4.8 |
---|---|
Change log | None available |
Dependencies | base (>=4 && <5), bytestring, mtl, text, unordered-containers, vector [details] |
License | BSD-3-Clause |
Copyright | IMVU Inc., Chad Austin, Andy Friesen |
Author | Chad Austin, Andy Friesen |
Maintainer | chad@chadaustin.me |
Category | Data |
Home page | https://github.com/chadaustin/buffer-builder |
Uploaded | by chadaustin at 2015-02-22T19:41:05Z |
Modules
[Index]
Downloads
- buffer-builder-0.2.0.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees