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.



Data.BufferBuilder is an efficient library for incrementally building up ByteStrings, 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:

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.


Change logNone available
Dependenciesbase (==4.*), bytestring, mtl, text, unordered-containers, vector [details]
CopyrightIMVU Inc., Chad Austin, Andy Friesen
AuthorChad Austin, Andy Friesen
Home pagehttps://github.com/chadaustin/buffer-builder
UploadedSun Feb 22 19:41:05 UTC 2015 by chadaustin




Maintainers' corner

For package maintainers and hackage trustees