summaryrefslogtreecommitdiff
path: root/dev-haskell/hashtables/metadata.xml
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-07-14 20:57:42 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-07-14 20:57:42 +0100
commit1798c4aeca70ac8d0a243684d6a798fbc65735f8 (patch)
treee48e19cb6fa03de18e1c63e1a93371b7ebc4eb56 /dev-haskell/hashtables/metadata.xml
parentd87262dd706fec50cd150aab3e93883b6337466d (diff)
gentoo resync : 14.07.2018
Diffstat (limited to 'dev-haskell/hashtables/metadata.xml')
-rw-r--r--dev-haskell/hashtables/metadata.xml108
1 files changed, 0 insertions, 108 deletions
diff --git a/dev-haskell/hashtables/metadata.xml b/dev-haskell/hashtables/metadata.xml
deleted file mode 100644
index 7443663f12a1..000000000000
--- a/dev-haskell/hashtables/metadata.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
- <maintainer type="project">
- <email>haskell@gentoo.org</email>
- </maintainer>
- <longdescription>
- This package provides a couple of different implementations of mutable hash
- tables in the ST monad, as well as a typeclass abstracting their common
- operations, and a set of wrappers to use the hash tables in the IO monad.
-
- /QUICK START/: documentation for the hash table operations is provided in the
- "Data.HashTable.Class" module, and the IO wrappers (which most users will
- probably prefer) are located in the "Data.HashTable.IO" module.
-
- This package currently contains three hash table implementations:
-
- 1. "Data.HashTable.ST.Basic" contains a basic open-addressing hash table
- using linear probing as the collision strategy. On a pure speed basis it
- should currently be the fastest available Haskell hash table
- implementation for lookups, although it has a higher memory overhead
- than the other tables and can suffer from long delays when the table is
- resized because all of the elements in the table need to be rehashed.
-
- 2. "Data.HashTable.ST.Cuckoo" contains an implementation of \"cuckoo
- hashing\" as introduced by Pagh and Rodler in 2001 (see
- &lt;https://en.wikipedia.org/wiki/Cuckoo_hashing&gt;). Cuckoo hashing has
- worst-case /O(1)/ lookups and can reach a high \"load factor\", in which
- the table can perform acceptably well even when more than 90% full.
- Randomized testing shows this implementation of cuckoo hashing to be
- slightly faster on insert and slightly slower on lookup than
- "Data.Hashtable.ST.Basic", while being more space efficient by about a
- half-word per key-value mapping. Cuckoo hashing, like the basic hash
- table implementation using linear probing, can suffer from long delays
- when the table is resized.
-
- 3. "Data.HashTable.ST.Linear" contains a linear hash table (see
- &lt;https://en.wikipedia.org/wiki/Linear_hashing&gt;), which trades some insert
- and lookup performance for higher space efficiency and much shorter
- delays when expanding the table. In most cases, benchmarks show this
- table to be currently slightly faster than @Data.HashTable@ from the
- Haskell base library.
-
- It is recommended to create a concrete type alias in your code when using this
- package, i.e.:
-
- &gt; import qualified Data.HashTable.IO as H
- &gt;
- &gt; type HashTable k v = H.BasicHashTable k v
- &gt;
- &gt; foo :: IO (HashTable Int Int)
- &gt; foo = do
- &gt; ht &lt;- H.new
- &gt; H.insert ht 1 1
- &gt; return ht
-
- Firstly, this makes it easy to switch to a different hash table implementation,
- and secondly, using a concrete type rather than leaving your functions abstract
- in the HashTable class should allow GHC to optimize away the typeclass
- dictionaries.
-
- This package accepts a couple of different cabal flags:
-
- * @unsafe-tricks@, default /ON/. If this flag is enabled, we use some
- unsafe GHC-specific tricks to save indirections (namely @unsafeCoerce#@
- and @reallyUnsafePtrEquality#@. These techniques rely on assumptions
- about the behaviour of the GHC runtime system and, although they've been
- tested and should be safe under normal conditions, are slightly
- dangerous. Caveat emptor. In particular, these techniques are
- incompatible with HPC code coverage reports.
-
- * @sse41@, default /OFF/. If this flag is enabled, we use some SSE 4.1
- instructions (see &lt;https://en.wikipedia.org/wiki/SSE4&gt;, first available on
- Intel Core 2 processors) to speed up cache-line searches for cuckoo
- hashing.
-
- * @bounds-checking@, default /OFF/. If this flag is enabled, array accesses
- are bounds-checked.
-
- * @debug@, default /OFF/. If turned on, we'll rudely spew debug output to
- stdout.
-
- * @portable@, default /OFF/. If this flag is enabled, we use only pure
- Haskell code and try not to use unportable GHC extensions. Turning this
- flag on forces @unsafe-tricks@ and @sse41@ /OFF/.
-
- This package has been tested with GHC 7.0.3, on:
-
- * a MacBook Pro running Snow Leopard with an Intel Core i5 processor,
- running GHC 7.0.3 in 64-bit mode.
-
- * an Arch Linux desktop with an AMD Phenom II X4 940 quad-core processor.
-
- * a MacBook Pro running Snow Leopard with an Intel Core 2 Duo processor,
- running GHC 6.12.3 in 32-bit mode.
-
- Please send bug reports to
- &lt;https://github.com/gregorycollins/hashtables/issues&gt;.
- </longdescription>
- <use>
- <flag name="bounds-checking">if on, use bounds-checking array accesses</flag>
- <flag name="portable">if on, use only pure Haskell code and no GHC extensions.</flag>
- <flag name="unsafe-tricks">turn on unsafe GHC tricks</flag>
- </use>
- <upstream>
- <remote-id type="github">gregorycollins/hashtables</remote-id>
- </upstream>
-</pkgmetadata>