Cabal revisions of buffer-builder-0.1.0.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-name: buffer-builder-version: 0.1.0.0-synopsis: Library for efficiently building up buffers, one piece at a time-description:-- '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 major implementations and benchmarked with the buildURL 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 "//"- --license: BSD3-license-file: LICENSE-author: Chad Austin-maintainer: chad@chadaustin.me-copyright: IMVU Inc., Chad Austin-category: Data-build-type: Simple-stability: experimental-homepage: https://github.com/chadaustin/buffer-builder-cabal-version: >=1.10--library- exposed-modules:- Data.BufferBuilder-- build-depends: base ==4.*- , bytestring- , mtl-- default-language: Haskell2010- ghc-options: -O2 -Wall-- c-sources: buffer.cpp- cc-options: -O2 -Wall--test-suite tests- type: exitcode-stdio-1.0- main-is: Main.hs- hs-source-dirs: test- default-language: Haskell2010- ghc-options: -O2 -Wall-- build-depends: base ==4.*- , buffer-builder- , tasty- , tasty-hunit- , tasty-th- , HUnit--benchmark bench- type: exitcode-stdio-1.0- main-is: Bench.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -O2 -Wall -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file-- build-depends: base ==4.*- , bytestring- , buffer-builder- , criterion+name: buffer-builder +version: 0.1.0.0 +x-revision: 1 +synopsis: Library for efficiently building up buffers, one piece at a time +description: + + '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 major implementations and benchmarked with the buildURL 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 "//" + + +license: BSD3 +license-file: LICENSE +author: Chad Austin +maintainer: chad@chadaustin.me +copyright: IMVU Inc., Chad Austin +category: Data +build-type: Simple +stability: experimental +homepage: https://github.com/chadaustin/buffer-builder +cabal-version: >=1.10 + +library + exposed-modules: + Data.BufferBuilder + + build-depends: base <4.8 + build-depends: base ==4.* + , bytestring + , mtl + + default-language: Haskell2010 + ghc-options: -O2 -Wall + + c-sources: buffer.cpp + cc-options: -O2 -Wall + +test-suite tests + type: exitcode-stdio-1.0 + main-is: Main.hs + hs-source-dirs: test + default-language: Haskell2010 + ghc-options: -O2 -Wall + + build-depends: base ==4.* + , buffer-builder + , tasty + , tasty-hunit + , tasty-th + , HUnit + +benchmark bench + type: exitcode-stdio-1.0 + main-is: Bench.hs + hs-source-dirs: bench + default-language: Haskell2010 + ghc-options: -O2 -Wall -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file + + build-depends: base ==4.* + , bytestring + , buffer-builder + , criterion