mirror of
https://github.com/jberthold/packman.git
synced 2024-08-16 17:00:22 +03:00
183 lines
6.7 KiB
Plaintext
183 lines
6.7 KiB
Plaintext
name: packman
|
|
version: 0.5.1
|
|
synopsis: Serialization library for GHC
|
|
|
|
description:
|
|
This package provides Haskell data serialisation independent of evaluation,
|
|
by accessing the Haskell heap using foreign primitive operations.
|
|
Any Haskell data structure apart from mutable data structures (@MVar@s
|
|
and @TVar@s) can be serialised and later deserialised during the same run,
|
|
or loaded into a new run, of the same program (the same executable file).
|
|
.
|
|
The library provides operations to @serialize@ Haskell heap data,
|
|
and to @deserialize@ it:
|
|
.
|
|
> trySerializeWith :: a -> Int -> IO (Serialized a) -- Int is maximum buffer size to use
|
|
> trySerialize :: a -> IO (Serialized a) -- uses default (maximum) buffer size
|
|
> deserialize :: Serialized a -> IO a
|
|
.
|
|
The data type @Serialized a@ is an opaque representation of serialised
|
|
Haskell data (it contains a @ByteArray@).
|
|
A phantom type @a@ ensures type safety within the same program run.
|
|
Type @a@ can be polymorphic (at compile time, that is) when @Serialized a@
|
|
is not used apart from being argument to @deserialize@.
|
|
When data are externalised (written to disk or communicated over the
|
|
network) using the provided instances of @Binary@ or @Read@ and @Show@,
|
|
@a@ needs to be monomorphic because they require @Typeable@ context.
|
|
The instances for @Show@ and @Read@ satisfy @read . show == id@.
|
|
.
|
|
Packman serialisation is /orthogonal/ to evaluation, heap data are
|
|
serialised /in their current state of evaluation/, they might be entirely
|
|
unevaluated (a thunk) or only partially evaluated (containing thunks).
|
|
Therefore, there can be cases where a mutable data structure is captured by
|
|
a thunk, and lead to serialisation failures (typically related to lazy I/O).
|
|
.
|
|
The serialisation routine will throw a @PackException@ if an error occurs
|
|
inside the C code which accesses the Haskell heap, if a mutable data
|
|
structure is serialised, or if the serialised data is too large.
|
|
In presence of concurrent threads, another thread might be evaluating
|
|
data /referred to/ by the data to be serialised. In this case, the calling
|
|
thread will /block/ on the ongoing evaluation and continue when evaluated
|
|
data is available.
|
|
Internally, there is a @PackException@ @P_BLACKHOLE@ to signal the
|
|
condition, but it is hidden inside the core library
|
|
|
|
category: Serialization, Data, GHC
|
|
license: BSD3
|
|
license-file: LICENSE
|
|
author: Michael Budde, Ásbjørn V. Jøkladal, Jost Berthold
|
|
maintainer: jost.berthold@gmail.com
|
|
build-type: Simple
|
|
cabal-version: >= 1.18
|
|
tested-with: GHC==7.8.2, GHC==7.8.3, GHC==7.10.2, GHC==8.0.2, GHC==8.2.1, GHC==8.2.2, GHC==8.4.3
|
|
extra-source-files: cbits/Wrapper.cmm
|
|
cbits/Pack.c
|
|
cbits/Errors.h
|
|
cbits/Types.h
|
|
cbits/GHCFunctions.h
|
|
cbits/GhcHeapAlloc.h
|
|
cbits/BeginPrivate.h
|
|
cbits/EndPrivate.h
|
|
|
|
flag debug
|
|
manual: True
|
|
default: False
|
|
description: Enable debug support
|
|
-- we abuse flags "prof(p)" and "sparks(r)" and use "sanity(S)"
|
|
|
|
library
|
|
exposed-modules: GHC.Packing
|
|
GHC.Packing.PackException
|
|
GHC.Packing.Type
|
|
GHC.Packing.Core
|
|
build-depends: base >= 4.7 && < 5,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5
|
|
if flag(debug)
|
|
ghc-options: -debug -optc-DDEBUG -optc-g
|
|
|
|
c-sources: cbits/Wrapper.cmm
|
|
cbits/Pack.c
|
|
include-dirs: cbits
|
|
includes:
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
cc-options: -g -DDEBUG -DLIBRARY_CODE
|
|
else
|
|
cc-options: -DLIBRARY_CODE
|
|
|
|
test-suite simpletest
|
|
type: exitcode-stdio-1.0
|
|
main-is: TestSerialisation.hs
|
|
hs-source-dirs: Test
|
|
build-depends: base >= 4.7,
|
|
directory >= 1.2,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5,
|
|
packman
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
ghc-options: -debug -optc-g -optc-DDEBUG
|
|
|
|
test-suite testexceptions
|
|
type: exitcode-stdio-1.0
|
|
main-is: TestExceptions.hs
|
|
hs-source-dirs: Test
|
|
build-depends: base >= 4.7,
|
|
directory >= 1.2,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5,
|
|
Cabal >= 1.18,
|
|
packman
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
ghc-options: -debug -optc-g -optc-DDEBUG
|
|
|
|
test-suite alltests
|
|
type: detailed-0.9
|
|
test-module: AllTests
|
|
hs-source-dirs: Test
|
|
build-depends: base >= 4.7,
|
|
directory >= 1.2,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5,
|
|
Cabal >= 1.20,
|
|
packman
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
ghc-options: -debug -optc-g -optc-DDEBUG
|
|
|
|
test-suite testmthread
|
|
type: exitcode-stdio-1.0
|
|
main-is: TestMThread.hs
|
|
hs-source-dirs: Test
|
|
build-depends: base >= 4.7,
|
|
directory >= 1.2,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5,
|
|
Cabal >= 1.20,
|
|
packman
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
ghc-options: -with-rtsopts=-N4 -debug -threaded -optc-g -optc-DDEBUG
|
|
else
|
|
ghc-options: -with-rtsopts=-N4 -threaded
|
|
|
|
test-suite quickchecktest
|
|
type: detailed-0.9
|
|
test-module: QCTest
|
|
hs-source-dirs: Test
|
|
build-depends: base >= 4.7,
|
|
directory >= 1.2,
|
|
ghc-prim >= 0.3,
|
|
array >= 0.5,
|
|
binary >= 0.7,
|
|
bytestring >= 0.10,
|
|
primitive >= 0.5,
|
|
Cabal >= 1.20,
|
|
QuickCheck >= 2.6,
|
|
packman
|
|
default-language: Haskell2010
|
|
if flag(debug)
|
|
ghc-options: -debug -optc-g -optc-DDEBUG
|
|
|
|
|
|
source-repository head
|
|
type: git
|
|
location: https://github.com/jberthold/packman.git
|