The unboxed-ref package

[ Tags: bsd3, data, library ] [ Propose Tags ]

Fast unboxed references for ST and IO monad


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.2.0.0, 0.3.0.0, 0.4.0.0 (info)
Change log ChangeLog.md
Dependencies base (>=4.8 && <5.0), ghc-prim (>=0.4), primitive [details]
License BSD3
Copyright Copyright (c) Winter 2017
Author winter
Maintainer drkoster@qq.com
Category Data
Home page https://github.com/winterland1989/unboxed-ref
Bug tracker https://github.com/winterland1989/unboxed-ref/issues
Source repository head: git clone git://github.com/winterland1989/unboxed-ref.git
Uploaded Mon Jul 17 09:46:39 UTC 2017 by winterland
Distributions NixOS:0.4.0.0, Stackage:0.4.0.0
Downloads 663 total (45 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-07-17 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for unboxed-ref-0.4.0.0

[back to package description]

unboxed-ref

Hackage Test Status

This package provide fast unboxed references for ST and IO monad and atomic operations for IORefU Int type. Unboxed reference is implemented using single cell MutableByteArray s to eliminate indirection overhead which MutVar# s a carry, on the otherhand unboxed reference only support limited type(instances of Prim class).

A simple diagram could show the difference between IORef Int with IORefU Int:

data Foo = Foo {-# UNPACK #-} (IORef Int)

        +-----------+    +-------------+    +---------+
        | Foo |  *  +--->+ MutVar# | * +--->+ I# | i# |
        +-----------+    +-------------+    +---------+

data Bar = Bar {-# UNPACK #-} (IORefU Int)

        +-----------+    +------------------------+
        | Bar |  *  +--->+ MutableByteArray# | i# |
        +-----------+    +------------------------+

Benchmark

Modified from this benchmark.

$ cd bench && cabal build
$ time ./dist/build/bench-ref/bench-ref
143
./dist/build/bench-ref/bench-ref  19.76s user 0.02s system 99% cpu 19.785 total
------------------------------------------------------------
$ time ./dist/build/bench-unboxed-ref/bench-unboxed-ref
143
./dist/build/bench-unboxed-ref/bench-unboxed-ref  16.66s user 0.02s system 99% cpu 16.694 total
------------------------------------------------------------
$ ./dist/build/bench-unboxed-ref-atomic/bench-unboxed-ref-atomic
50500000
------------------------------------------------------------
$ ./dist/build/bench-ref-atomic/bench-ref-atomic
3597361