mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
488 lines
17 KiB
Text
488 lines
17 KiB
Text
= Changelog
|
|
|
|
== 0.16
|
|
|
|
=== breaking
|
|
|
|
- change the signature of `CCHeap.{of_gen,of_seq,of_klist}`
|
|
- change the API of `CCMixmap`
|
|
- make type `CCHash.state` abstract (used to be `int64`)
|
|
- optional argument `~eq` to `CCGraph.Dot.pp`
|
|
- rename `CCFuture` into `CCPool`
|
|
|
|
=== deprecations
|
|
|
|
- deprecate `containers.bigarray`
|
|
- deprecate `CCHashtbl.{Counter,Default}` tables
|
|
- deprecate `CCLinq` in favor of standalone `OLinq` (to be released)
|
|
|
|
=== bugfixes
|
|
|
|
- fix wrong signature of `CCHashtbl.Make.{keys,values}_list`
|
|
- missing constraint in `CCSexpM.ID_MONAD`
|
|
|
|
=== new features
|
|
|
|
- add a tutorial file
|
|
- add a printer into CCHeap
|
|
- add `{CCList,CCOpt}.Infix` modules
|
|
- add `CCOpt.map_or`, deprecating `CCopt.maybe`
|
|
- add `CCFormat.sprintf_no_color`
|
|
- add `CCFormat.{h,v,hov,hv}box` printer combinators
|
|
- add `CCFormat.{with_color, with_colorf}`
|
|
- add `CCList.hd_tl`
|
|
- add `CCResult.{map_or,get_or}`
|
|
- add `CCGraph.make` and utils
|
|
- add `CCHashtbl.add_list`
|
|
- add counter function in `CCHashtbl`, to replace `CCHashtbl.Counter`
|
|
- add `CCPair.make`
|
|
- add `CCString.Split.{left,right}_exn`
|
|
- add `CCIO.File.{read,write,append}` for quickly handling files
|
|
- add `CCRandom.pick_{list,array}`
|
|
- add `CCList.Assoc.update`
|
|
- add `CCList.Assoc.mem`
|
|
- add `{CCMap,CCHashtbl}.get_or` for lookup with default value
|
|
- add `CCLock.{decr_then_get, get_then_{decr,set,clear}}`
|
|
- rename `CCFuture` into `CCPool`, expose the thread pool
|
|
- split `CCTimer` out of `CCFuture`, a standalone 1-thread timer
|
|
- move `CCThread.Queue` into `CCBlockingQueue`
|
|
- add `CCResult`, with dependency on `result` for retrocompat
|
|
- add `CCThread.spawn{1,2}`
|
|
- add many helpers in `CCUnix` (for sockets, files, and processes)
|
|
- add `CCFun.finally{1,2}`, convenience around `finally`
|
|
- add `CCLock.update_map`
|
|
- add `CCLock.{incr_then_get,get_then_incr}`
|
|
- add breaking space in `CCFormat.{pair,triple,quad}`
|
|
- update `examples/id_sexp` so it can read on stdin
|
|
- add `CCList.fold_map2`
|
|
|
|
== 0.15
|
|
|
|
=== breaking changes
|
|
|
|
- remove deprecated `CCFloat.sign`
|
|
- remove deprecated `CCSexpStream`
|
|
|
|
=== other changes
|
|
|
|
- basic color handling in `CCFormat`, using tags and ANSI codes
|
|
- add `CCVector.ro_vector` as a convenience alias
|
|
- add `CCOrd.option`
|
|
- add `CCMap.{keys,values}`
|
|
- add wip `CCAllocCache`, an allocation cache for short-lived arrays
|
|
- add `CCError.{join,both}` applicative functions for CCError
|
|
- opam: depend on ecamlbuild
|
|
- work on `CCRandom` by octachron:
|
|
* add an uniformity test
|
|
* Make `split_list` uniform
|
|
* Add sample_without_replacement
|
|
|
|
- bugfix: forgot to export `{Set.Map}.OrderedType` in `Containers`
|
|
|
|
== 0.14
|
|
|
|
=== breaking changes
|
|
|
|
- change the type `'a CCParse.t` with continuations
|
|
- add labels on `CCParse.parse_*` functions
|
|
- change semantics of `CCList.Zipper.is_empty`
|
|
|
|
=== other changes
|
|
|
|
- deprecate `CCVector.rev'`, renamed into `CCVector.rev_in_place`
|
|
- deprecate `CCVector.flat_map'`, renamed `flat_map_seq`
|
|
|
|
- add `CCMap.add_{list,seqe`
|
|
- add `CCSet.add_{list,seq}`
|
|
- fix small uglyness in `Map.print` and `Set.print`
|
|
- add `CCFormat.{ksprintf,string_quoted}`
|
|
- add `CCArray.sort_generic` for sorting over array-like structures in place
|
|
- add `CCHashtbl.add` mimicking the stdlib `Hashtbl.add`
|
|
- add `CCString.replace` and tests
|
|
- add `CCPersistentHashtbl.stats`
|
|
- reimplementation of `CCPersistentHashtbl`
|
|
- add `make watch` target
|
|
- add `CCVector.rev_iter`
|
|
- add `CCVector.append_list`
|
|
- add `CCVector.ensure_with`
|
|
- add `CCVector.return`
|
|
- add `CCVector.find_map`
|
|
- add `CCVector.flat_map_list`
|
|
- add `Containers.Hashtbl` with most combinators of `CCHashtbl`
|
|
- many more functions in `CCList.Zipper`
|
|
- large update of `CCList.Zipper`
|
|
- add `CCHashtbl.update`
|
|
- improve `CCHashtbl.MakeCounter`
|
|
- add `CCList.fold_flat_map`
|
|
- add module `CCChar`
|
|
- add functions in `CCFormat`
|
|
- add `CCPrint.char`
|
|
- add `CCVector.to_seq_rev`
|
|
- doc and tests for `CCLevenshtein`
|
|
- expose blocking decoder in `CCSexpM`
|
|
- add `CCList.fold_map`
|
|
- add `CCError.guard_str_trace`
|
|
- add `CCError.of_exn_trace`
|
|
- add `CCKlist.memoize` for costly computations
|
|
- add `CCLevenshtein.Index.{of,to}_{gen,seq}` and `cardinal`
|
|
|
|
- small bugfix in `CCSexpM.print`
|
|
- fix broken link to changelog (fix #51)
|
|
- fix doc generation for `containers.string`
|
|
- bugfix in `CCString.find`
|
|
- raise exception in `CCString.replace` if `sub=""`
|
|
- bugfix in hashtable printing
|
|
- bugfix in `CCKList.take`, it was slightly too eager
|
|
|
|
== 0.13
|
|
|
|
=== Breaking changes
|
|
|
|
- big refactoring of `CCLinq` (now simpler and cleaner)
|
|
- changed the types `input` and `ParseError` in `CCParse`
|
|
- move `containers.misc` and `containers.lwt` into their own repo
|
|
- change the exceptions in `CCVector`
|
|
- change signature of `CCDeque.of_seq`
|
|
|
|
=== Other changes
|
|
|
|
- add module `CCWBTree`, a weight-balanced tree, in `containers.data`.
|
|
- add module `CCBloom` in `containers.data`, a bloom filter
|
|
- new module `CCHashTrie` in `containers.data`, HAMT-like associative map
|
|
- add module `CCBitField` in `containers.data`, a safe abstraction for bitfields of < 62 bits
|
|
- add module `CCHashSet` into `containers.data`, a mutable set
|
|
- add module `CCInt64`
|
|
- move module `RAL` into `containers.data` as `CCRAL`
|
|
- new module `CCThread` in `containers.thread`, utils for threading (+ blocking queue)
|
|
- new module `CCSemaphore` in `containers.thread`, with simple semaphore
|
|
- add `containers.top`, a small library that installs printers
|
|
|
|
- add `CCParse.memo` for memoization (changes `CCParse.input`)
|
|
- add `CCString.compare_versions`
|
|
- update `CCHash` with a functor and module type for generic hashing
|
|
- add `CCList.{take,drop}_while`; improve map performance
|
|
- add `CCList.cons_maybe`
|
|
- add `CCArray.bsearch` (back from batteries)
|
|
- add fair functions to `CCKList`
|
|
- deprecate `CCList.split`, introduce `CCList.take_drop` instead.
|
|
- add `CCKtree.force`
|
|
- add tests to `CCIntMap`; now flagged "stable" (for the API)
|
|
- add `CCOpt.choice_seq`
|
|
- add `CCOpt.print`
|
|
- add `CCIntMap.{equal,compare,{of,to,add}_{gen,klist}}`
|
|
- add `CCThread.Barrier` for simple synchronization
|
|
- add `CCPersistentArray.{append,flatten,flat_map,of_gen,to_gen}`
|
|
- add `CCDeque.clear`
|
|
- add `CCDeque.{fold,append_{front,back},{of,to}_{gen,list}}` and others
|
|
- add `CCKList.{zip, unzip}`
|
|
- add `CCKList.{of_array,to_array}`
|
|
- add `CCKList.{head,tail,mapi,iteri}`
|
|
- add `CCKList.{unfold,of_gen}`
|
|
- add `CCParse.{input_of_chan,parse_file,parse_file_exn}`
|
|
- modify `CCParse.U.list` to skip newlines
|
|
- add `CCDeque.print`
|
|
- add `CCBV.print`
|
|
- add printer to `CCHashtbl`
|
|
|
|
- bugfix in `CCSexpM`
|
|
- new tests in `CCTrie`; bugfix in `CCTrie.below`
|
|
- lots of new tests
|
|
- more benchmarks; cleanup of benchmarks
|
|
- migration of tests to 100% qtest
|
|
- migration markdown to asciidoc for doc (readme, etc.)
|
|
- add tests to `CCIntMap`, add type safety, and fix various bugs in `{union,inter}`
|
|
- more efficient `CCThread.Queue.{push,take}_list`
|
|
- slightly different implem for `CCThread.Queue.{take,push}`
|
|
- new implementation for `CCDeque`, more efficient
|
|
- update makefile (target devel)
|
|
|
|
== 0.12
|
|
|
|
=== breaking
|
|
|
|
- change type of `CCString.blit` so it writes into `Bytes.t`
|
|
- better default opening flags for `CCIO.with_{in, out}`
|
|
|
|
=== non-breaking
|
|
|
|
NOTE: use of `containers.io` is deprecated (its only module has moved to `containers`)
|
|
|
|
- add `CCString.mem`
|
|
- add `CCString.set` for updating immutable strings
|
|
- add `CCList.cons` function
|
|
- enable `-safe-string` on the project; fix `-safe-string` issues
|
|
- move `CCIO` from `containers.io` to `containers`, add dummy module in `containers.io`
|
|
- add `CCIO.read_all_bytes`, reading a whole file into a `Bytes.t`
|
|
- add `CCIO.with_in_out` to read and write a file
|
|
- add `CCArray1` in containers.bigarray, a module on 1-dim bigarrays (experimental)
|
|
- add module `CCGraph` in `containers.data`, a simple graph abstraction similar to `LazyGraph`
|
|
- add a lot of string functions in `CCString`
|
|
- add `CCError.catch`, in prevision of the future standard `Result.t` type
|
|
- add `CCError.Infix` module
|
|
- add `CCHashconsedSet` in `containers.data` (set with maximal struct sharing)
|
|
|
|
- fix: use the proper array module in `CCRingBuffer`
|
|
- bugfix: `CCRandom.float_range`
|
|
|
|
== 0.11
|
|
|
|
- add `CCList.{remove,is_empty}`
|
|
- add `CCOpt.is_none`
|
|
- remove packs for `containers_string` and `containers_advanced`
|
|
- add `Containers_string.Parse`, very simple monadic parser combinators
|
|
- add `CCList.{find_pred,find_pred_exn}`
|
|
- bugfix in `CCUnix.escape_str`
|
|
- add methods and accessors to `CCUnix`
|
|
- in `CCUnix`, use `Unix.environment` as the default environment
|
|
- add `CCList.partition_map`
|
|
- `RingBuffer.{of_array, to_array}` convenience functions
|
|
- `containers.misc.RAL`: more efficient in memory (unfold list)
|
|
- add `CCInt.pow` (thanks to bernardofpc)
|
|
- add `CCList.group_succ`
|
|
- `containers.data.CCMixset`, set of values indexed by poly keys
|
|
- disable warning 32 (unused val) in .merlin
|
|
- some infix operators for `CCUnix`
|
|
- add `CCUnix.async_call` for spawning and communicating with subprocess
|
|
- add `CCList.Set.{add,remove}`
|
|
- fix doc of `CCstring.Split.list_`
|
|
|
|
== 0.10
|
|
|
|
- add `containers.misc.Puf.iter`
|
|
- add `CCString.{lines,unlines,concat_gen}`
|
|
- `CCUnix` (with a small subprocess API)
|
|
- add `CCList.{sorted_merge_uniq, uniq_succ}`
|
|
- breaking: fix documentation of `CCList.sorted_merge` (different semantics)
|
|
- `CCPersistentArray` (credit to @gbury and Jean-Christophe Filliâtre)
|
|
- `CCIntMap` (big-endian patricia trees) in containers.data
|
|
- bugfix in `CCFQueue.add_seq_front`
|
|
- add `CCFQueue.{rev, --}`
|
|
- add `App_parse` in `containers.string`, experimental applicative parser combinators
|
|
- remove `containers.pervasives`, add the module `Containers` to core
|
|
- bugfix in `CCFormat.to_file`
|
|
|
|
== 0.9
|
|
|
|
- add `Float`, `Ref`, `Set`, `Format` to `CCPervasives`
|
|
- `CCRingBuffer.append` (simple implementation)
|
|
- `containers.data` now depends on bytes
|
|
- new `CCRingBuffer` module, imperative deque with batch (blit) operations,
|
|
mostly done by Carmelo Piccione
|
|
- new `Lwt_pipe` and `Lwt_klist` streams for Lwt, respectively (un)bounded
|
|
synchronized queues and lazy lists
|
|
- `CCKTree.print`, a simple S-expressions printer for generic trees
|
|
- Add `CCMixmap` in containers.data (close #40), functional alternative to `CCMixtbl`
|
|
- remove old META file
|
|
- simplified `CCTrie` implementation
|
|
- use "compiledObject: best" in `_oasis` for binaries
|
|
- document some invariants in `CCCache` (see #38)
|
|
- tests for `CCCache.lru`
|
|
- fix `CCFormat.seq` combinator
|
|
- add `CCSet` module in core/
|
|
- add `CCRef` module in core/
|
|
|
|
== 0.8
|
|
|
|
- add `@Emm` to authors
|
|
- refactored heavily `CCFuture` (much simpler, cleaner, basic API and thread pool)
|
|
- add `CCLock` in containers.thread
|
|
- merged `test_levenshtein` with other tests
|
|
- Add experimental rose tree in `Containers_misc.RoseTree`.
|
|
- remove a lot of stuff from `containers.misc` (see `_oasis` for details)
|
|
- `make devel` command, activating most flags, for developpers (see #27)
|
|
- use benchmark 1.4, with the upstreamed tree system
|
|
- test `ccvector.iteri`
|
|
- add `CCFormat` into core/
|
|
- infix map operators for `CCArray`
|
|
- `fold_while` impl for `CCList` and `CCArray`
|
|
- Added `CCBigstring.length` for more consistency with the `CCString` module.
|
|
- Added name and dev fields in the OPAM file for local pinning.
|
|
- Fix `CCIO.remove*` functions.
|
|
- Added `CCIO.remove_safe`.
|
|
- only build doc if all the required flags are enabled
|
|
- `CCHashtbl.{keys,values}_list` in the functor as well. Better doc.
|
|
- `CCHashtbl.{keys,values}_list`
|
|
- more accurate type for `CCHashtbl.Make`
|
|
|
|
== 0.7
|
|
|
|
=== breaking
|
|
|
|
- remove `cgi`/
|
|
- removed useless Lwt-related module
|
|
- remove `CCGen` and `CCsequence` (use the separate libraries)
|
|
- split the library into smaller pieces (with `containers.io`, `containers.iter`,
|
|
`containers.sexp`, `containers.data`)
|
|
|
|
=== other changes
|
|
|
|
- cleanup: move sub-libraries to their own subdir each; mv everything into `src/`
|
|
- `sexp`:
|
|
* `CCSexp` now splitted into `CCSexp` (manipulating expressions) and `CCSexpStream`
|
|
* add `CCSexpM` for a simpler, monadic parser of S-expressions (deprecating `CCSexpStream`)
|
|
- `core`:
|
|
* `CCString.fold`
|
|
* `CCstring.suffix`
|
|
* more efficient `CCString.init`
|
|
* fix errors in documentation of `CCString` (slightly over-reaching sed)
|
|
* add `CCFloat.{fsign, sign_exn}` (thanks @bernardofpc)
|
|
- new `containers.bigarray`, with `CCBigstring`
|
|
- `CCHashtbl.map_list`
|
|
- `io`:
|
|
* `CCIO.read_all` now with ?size parameter
|
|
* use `Bytes.extend` (praise modernity!)
|
|
* bugfix in `CCIO.read_all` and `CCIO.read_chunks`
|
|
- use `-no-alias-deps`
|
|
|
|
== 0.6.1
|
|
|
|
- use subtree `gen/` for `CCGen` (symlink) rather than a copy.
|
|
- Add benchmarks for the function `iter` of iterators.
|
|
- `CCKTree`: more printers (to files), `Format` printer
|
|
- `CCOpt.get_lazy` convenience function
|
|
- introduce `CCFloat`, add float functions to `CCRandom` (thanks to @struktured)
|
|
|
|
== 0.6
|
|
|
|
=== breaking changes
|
|
|
|
- new `CCIO` module, much simpler, but incompatible interface
|
|
- renamed `CCIO` to `advanced.CCMonadIO`
|
|
|
|
=== other changes
|
|
|
|
- `CCMultiSet.{add_mult,remove_mult,update}`
|
|
- `CCVector.{top,top_exn}`
|
|
- `CCFun.compose_binop` (binary composition)
|
|
- `CCList.init`
|
|
- `CCError.map2` has a more general type (thanks to @hcarty)
|
|
- new module `CCCache`
|
|
* moved from `misc`
|
|
* add `CCache`.{size,iter}
|
|
* incompatible interface (functor -> values), much simpler to use
|
|
- `lwt/Lwt_actor` stub, for erlang-style concurrency (albeit much much more naive)
|
|
- `misc/Mixtbl` added from its old repository
|
|
- more benchmarks, with a more general system to select/run them
|
|
- more efficient versions of `CCList.{flatten,append,flat_map}`, some functions
|
|
are now tailrec
|
|
|
|
|
|
== 0.5
|
|
|
|
=== breaking changes
|
|
|
|
- dependency on `cppo` (thanks to @whitequark, see `AUTHORS.md`) and `bytes`
|
|
- `CCError`:
|
|
* now polymorphic on the error type
|
|
* some retro-incompatibilies (wrap,guard)
|
|
- `CCPervasives.Opt` -> `CCPervasives.Option`
|
|
- `Levenshtein.Index.remove` changed signature (useless param removed)
|
|
|
|
=== other changes
|
|
|
|
- stronger inlining for `CCVector` (so that e.g. push is inline)
|
|
- more tests for `CCVector`
|
|
- removed many warnings
|
|
- `CCSequence` now provides some bytes-dependent operations
|
|
- `CCList.(>|=)` map operator
|
|
- `CCOpt.filter`
|
|
- `CCInt.neg`
|
|
- `CCMap` wrapper to the standard `Map` module
|
|
- make some functions in `CCFun` and `CCString` depend on ocaml version
|
|
- thanks to @whitequark, could use cppo for preprocessing files
|
|
- add Format printers to `CCString`
|
|
- `AUTHORS.md`
|
|
|
|
== 0.4.1
|
|
|
|
- `CCOpt.get`
|
|
- new functions in `CCSexp.Traverse`
|
|
- comments in `CCMultiSet.mli`, to explain meet/intersection/union
|
|
- `CCMultiset`: Add meet
|
|
- update of readme
|
|
- generate doc for `containers.advanced`
|
|
|
|
== 0.4
|
|
|
|
- `core/CCSexp` for fast and lightweight S-expressions parsing/printing
|
|
- moved `CCLinq`, `CCBatch` and `CCat` from core/ to advanced/
|
|
- ensure compatibility with ocaml 4.00
|
|
- get rid of deprecated `Array.create`
|
|
- move benchmarks to benchs/ so they are separate from tests
|
|
- `CCError.{iter,get_exn}`
|
|
- `CCPair.print`
|
|
- some small improvements to `CCRandom`
|
|
- moved `CCHashtbl` to `CCFlatHashtbl`; new module `CCHashtbl` that
|
|
wraps and extends the standard hashtable
|
|
- `CCPervasives` module, replacing modules of the standard library
|
|
- removed type alias `CCString.t` (duplicate of String.t which already exists)
|
|
|
|
== 0.3.4
|
|
|
|
- subtree for `sequence` repo
|
|
- `CCSequence` is now a copy of `sequence`
|
|
- `CCOpt.wrap{1,2}`
|
|
- `CCList.findi`, `CCArray.findi` and `CCArray.find_idx`
|
|
- better `Format` printers (using break hints)
|
|
- specialize some comparison functions
|
|
- `CCOrd.map`
|
|
|
|
== 0.3.3
|
|
|
|
- readme: add ci hook (to http://ci.cedeela.fr)
|
|
- `CCIO`: monad for IO actions-as-values
|
|
- explicit finalizer system, to use a `>>>=` operator rather than callbacks
|
|
- `File` for basic filenames manipulations
|
|
- `Seq` for streams
|
|
- `CCMultiMap`: functor for bidirectional mappings
|
|
- `CCMultiSet`: sequence
|
|
- renamed threads/future to threads/CCFuture
|
|
- big upgrade of `RAL` (random access lists)
|
|
- `CCList.Ref` to help use references on lists
|
|
- `CCKList`: `group,uniq,sort,sort_uniq,repeat` and `cycle`, infix ops, applicative,product
|
|
- `CCTrie.above/below`: ranges of items
|
|
- more functions in `CCPair`
|
|
- `CCCat`: funny (though useless) definitions inspired from Haskell
|
|
- `CCList`: applicative instance
|
|
- `CCString.init`
|
|
- `CCError.fail_printf`
|
|
|
|
== 0.3.2
|
|
|
|
- small change in makefile
|
|
- conversions for `CCString`
|
|
- `CCHashtbl`: open-addressing table (Robin-Hood hashing)
|
|
- registered printers for `CCError`.guard,wrap1,etc.
|
|
- monadic operator in `CCList`: `map_m_par`
|
|
- simple interface to `PrintBox` now more powerful
|
|
- constructors for 1 or 2 elements fqueues
|
|
- bugfixes in BTree (insertion should work now)
|
|
- `CCFQueue`: logarithmic access by index
|
|
- add BTree partial implementation (not working yet)
|
|
- fix bug in `CCPrint.to_file`
|
|
- `CCArray.lookup` for divide-and-conquer search
|
|
- `CCList.sort_uniq`
|
|
- `CCError`: retry and choose combinators
|
|
- stub for monadic IO in `CCPrint`
|
|
- `CCopt.pure`
|
|
- updated `CCPersistentHashtbl` with new functions; updated doc, simplified code
|
|
- move `CCString` into core/, since it deals with a basic type; also add some features to `CCString` (Sub and Split modules to deal with slices and splitting by a string)
|
|
- `CCArray.blit`, `.Sub.to_slice`; some bugfixes
|
|
- applicative and lifting operators for `CCError`
|
|
- `CCError.map2`
|
|
- more combinators in `CCError`
|
|
|
|
== 0.3.1
|
|
|
|
- test for `CCArray.shuffle`
|
|
- bugfix in `CCArray.shuffle`
|
|
- `CCOpt.get_exn`
|
|
- `CCOpt.sequence_l`
|
|
- mplus instance for `CCOpt`
|
|
- monad instance for `CCFun`
|
|
- updated description in `_oasis`
|
|
- `CCTrie`, a compressed functorial persistent trie structure
|
|
- fix `CCPrint.unit`, add `CCPrint.silent`
|
|
- fix type mismatch
|
|
|
|
NOTE: `git log --no-merges previous_version..HEAD --pretty=%s`
|