When the hash function and the internal representation of hash tables
was changed in 4.00, some compatibility code was left so that "old"
hash tables (created with OCaml < 4.00 and marshaled to files)
could still be operated upon by the functions of the new implementation.
This was 9 years ago, so it is reasonable to expect that none of these
"old" hash tables are still in use.
This commit removes the compatibility code in stdlib/hashtbl.ml.
It still tries to detect "old" hash tables and raise an
Invalid_argument exception instead of crashing.
This provides an officially-sanctioned, guaranteed-to-work way to
import a hash table that has been built with an old version of OCaml
(say, before 4.00) and marshaled to persistent storage.
Hashtbl.MakeSeeded.{add,replace}_seq were not using the hash function
provided by the functor (Hashtbl.MakeSeeded.of_seq uses replace_seq and
so also has to be redefined locally).
* add `Seq` module, expose iterator conversions in most containers
* small typo
* typo
* change order of arguments for `{Map,Set}.add_seq`
* watch for max string length in `Bytes.of_seq`
* wip: make it build again
* Fix dependency
Sys needs to be linked before Bytes in stdlib.
* Update threads/stdlib.ml
* Update stdlib_no_prefixed/.depend
* fix inconsistencies with label modules
* update testsuite to work with seq
* update change file
* small change in `Hashtbl.to_seq`, capturing only the underlying array
* add some documentation to seq.mli
* revert to good ol' module type names for hashtables
* fix test
* change style of comments in seq.mli
* follow some demands in review of GPR #1002
* some fixes for #1002
* add Seq-related functions to Ephemeron
* add some comments on `Hashtbl.of_seq`
* add more tests for `Hashtbl.{to,of}_seq`
* fix bug in `Ephemeron.to_seq`
* Update Changes
Provide an xxx_opt alternative for functions raising Not_found
and many instances of Failure/Invalid_arg.
The only exception is the rarely used Buffer.add_substitute, where
the [Not_found] can really be interpreted as an error condition.
Most new functions are implemented directly (instead of wrapping the
raising version). This is for performance reasons and also to avoid
destroying the stacktrace (if the function is used in an exception
handler). One could instead implement the raising versions on top of
the new functions, but there might be a small penalty.
This significantly improves the benchmark below:
let ht = Hashtbl.create 100 in
for x = 1 to 2500000 do
Hashtbl.replace ht x ();
Hashtbl.remove ht x
done
(about 20% faster, still not as good as #328, which is about 35% faster
than trunk on this one)
In addition to the speedup, using raise_notrace should avoid destroying
the current stack trace when Hashtbl.replace is used in an exception
handler.
. Added optional "random" parameter to Hashtbl.create to randomize
collision patterns and improve security (PR#5572, CVE-2012-0839)
. Added "randomize" function and "R" parameter to OCAMLRUNPARAM
to turn randomization on by default (PR#5572, CVE-2012-0839)
- Filename: on-demand (lazy) initialization of the PRNG used by "temp_file".
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12384 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Hashtbl.Make returns a "create" function without an optional seed parameter.
(Which would be ignored anyway.)
Hashtbl.MakeSeeded returns a "create" function with an optional seed parameter.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@11204 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
- New generic hash function based on Murmur 3, with better statistical
properties (PR#5225), and better speed
- Make sure equal floats hash equally (PR#5222)
- Breadth-first traversal instead of depth-first
- Added seeded hash functions and seeded functorial interface to Hashtbl.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@11056 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
string.mli: documentation des cas d'erreur de create, make
buffer.ml, buffer.mli: blindage de create
hashtbl.ml, hashtbl.mli: blindage de create
pervasives.ml: fix typo dans bool_of_string
gc.mli: utilisation de {r with l=v} dans l'exemple
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@2411 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02