Cabal revisions of buffer-builder-0.2.0.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-name: buffer-builder-version: 0.2.0.0-synopsis: Library for efficiently building up buffers, one piece at a time-description:-- "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.--license: BSD3-license-file: LICENSE-author: Chad Austin, Andy Friesen-maintainer: chad@chadaustin.me-copyright: IMVU Inc., Chad Austin, Andy Friesen-category: Data-build-type: Simple-stability: experimental-homepage: https://github.com/chadaustin/buffer-builder-cabal-version: >=1.10--library- exposed-modules:- Data.BufferBuilder- Data.BufferBuilder.Utf8- Data.BufferBuilder.Json-- build-depends: base ==4.*- , bytestring- , mtl- , text- , vector- , unordered-containers-- default-language: Haskell2010- ghc-options: -O2 -Wall-- c-sources: buffer.cpp branchlut.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- , text- , tasty- , tasty-hunit- , tasty-th- , tasty-quickcheck- , HUnit- , text- , vector- , bytestring- , attoparsec- , aeson--benchmark bench- type: exitcode-stdio-1.0- main-is: Bench.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -O2 -Wall- --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file-- build-depends: base ==4.*- , bytestring- , buffer-builder- , criterion--benchmark json-bench- type: exitcode-stdio-1.0- main-is: JsonBench.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -O2 -Wall- --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file- build-depends: base- , buffer-builder- , aeson- , bytestring- , text- , deepseq- , vector- , criterion- , vector--test-suite tinyjson- type: exitcode-stdio-1.0- main-is: TinyJson.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -O2 -Wall- --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file- build-depends: base- , buffer-builder- , aeson- , bytestring- , text- , deepseq- , criterion--test-suite tinyjson2- type: exitcode-stdio-1.0- main-is: TinyJson2.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -O2 -Wall- --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file- build-depends: base- , buffer-builder- , aeson- , bytestring- , deepseq- , criterion- , vector+name: buffer-builder +version: 0.2.0.0 +x-revision: 1 +synopsis: Library for efficiently building up buffers, one piece at a time +description: + + "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. + +license: BSD3 +license-file: LICENSE +author: Chad Austin, Andy Friesen +maintainer: chad@chadaustin.me +copyright: IMVU Inc., Chad Austin, Andy Friesen +category: Data +build-type: Simple +stability: experimental +homepage: https://github.com/chadaustin/buffer-builder +cabal-version: >=1.10 + +library + -- broken release due to missing file + build-depends: base<0 + + exposed-modules: + Data.BufferBuilder + Data.BufferBuilder.Utf8 + Data.BufferBuilder.Json + + build-depends: base ==4.* + , bytestring + , mtl + , text + , vector + , unordered-containers + + default-language: Haskell2010 + ghc-options: -O2 -Wall + + c-sources: buffer.cpp branchlut.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 + , text + , tasty + , tasty-hunit + , tasty-th + , tasty-quickcheck + , HUnit + , text + , vector + , bytestring + , attoparsec + , aeson + +benchmark bench + type: exitcode-stdio-1.0 + main-is: Bench.hs + hs-source-dirs: bench + default-language: Haskell2010 + ghc-options: -O2 -Wall + --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file + + build-depends: base ==4.* + , bytestring + , buffer-builder + , criterion + +benchmark json-bench + type: exitcode-stdio-1.0 + main-is: JsonBench.hs + hs-source-dirs: bench + default-language: Haskell2010 + ghc-options: -O2 -Wall + --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file + build-depends: base + , buffer-builder + , aeson + , bytestring + , text + , deepseq + , vector + , criterion + , vector + +test-suite tinyjson + type: exitcode-stdio-1.0 + main-is: TinyJson.hs + hs-source-dirs: bench + default-language: Haskell2010 + ghc-options: -O2 -Wall + --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file + build-depends: base + , buffer-builder + , aeson + , bytestring + , text + , deepseq + , criterion + +test-suite tinyjson2 + type: exitcode-stdio-1.0 + main-is: TinyJson2.hs + hs-source-dirs: bench + default-language: Haskell2010 + ghc-options: -O2 -Wall + --ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file + build-depends: base + , buffer-builder + , aeson + , bytestring + , deepseq + , criterion + , vector