This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
522
unikernel/duniverse/base/CHANGES.md
Normal file
522
unikernel/duniverse/base/CHANGES.md
Normal file
|
|
@ -0,0 +1,522 @@
|
|||
## Release v0.17.0
|
||||
|
||||
Added functionality:
|
||||
* Add `String.to_sequence`
|
||||
* Derive `equal` on `Set.Merge_with_duplicates_element.t`
|
||||
* Add `Queue.drain`
|
||||
* Add `Or_error.of_option`
|
||||
* Extend `Hashtbl_intf.Hashtbl` with `capacity`, intended for testing resizing behavior
|
||||
* Add `Nothing.must_be_*` functions discarding (parts of) inputs with `Nothing.t` as a
|
||||
type parameter
|
||||
* Add `Float.log2`
|
||||
* Add `Random.bits64`, re-exported from `Stdlib.Random`
|
||||
* Add `String.edit_distance` to compute Levenshtein distance between strings
|
||||
* Add `Comparator.to_module` and `Comparator.of_module`, converting between `Comparator.t` and `Comparator.Module.t`
|
||||
* Add `Map.sum`, `unzip`, `of_list_with_key_fold`, and `of_list_with_key_reduce`
|
||||
* Add `Applicative.Ident`, similar to `Monad.Ident`
|
||||
* Extend `Uniform_array` with more operations akin to `Array`
|
||||
* Added `List.singleton`
|
||||
* Add `Map.merge_disjoint_exn` for merging two disjoint maps of the same key/value types
|
||||
Raises an exception if there are conflicting keys
|
||||
* Added `Sequence.Expert.View` to consume sequences more flexibly and efficiently
|
||||
* Add a `Binary` submodule to `Int`, `Int32`, etc, which provide `to_string` and
|
||||
`sexp_of_t` with syntax matching the ocaml binary int literal syntax
|
||||
* Add `List.stable_dedup` and deprecate `Set.stable_dedup_list`
|
||||
* Add `Queue.enqueue_front` and `Queue.dequeue_back`
|
||||
* Add `Type_equal.Id.Create*` functors for polymorphic types
|
||||
|
||||
Added unicode support:
|
||||
* Added `Utf*` submodules to `Bytes`, `Uchar`, and `String`
|
||||
* Types for `Uchar` and `String` encoding UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF32-BE
|
||||
* Added conversions, read/write functions, etc
|
||||
|
||||
Changed behavior:
|
||||
* `Info` has improved parsing of DOS newlines and trailing newlines in backtraces
|
||||
|
||||
Removed definitions that were previously deprecated:
|
||||
* `Type_equal.equal` type alias now that destructive update is available
|
||||
* `Map.comparator` and `Set.comparator` type aliases
|
||||
* `Base.Popcount`, as it is exported via the various `Int*` modules
|
||||
* `Option` functions from `Container` that are not useful
|
||||
* `Result.ok_fst`, an alias for `to_either`
|
||||
* `Sequence.merge`, an alias for `merge_deduped_and_sorted`
|
||||
* `Info.to_string_hum_deprecated`
|
||||
* `?trunc_after` flag to `Info.of_list`, no longer used
|
||||
|
||||
Deprecated:
|
||||
* `Type_equal.Injective`, now that injectivity annotations exist
|
||||
|
||||
Removed without deprecating:
|
||||
* `Type_equal.Id.Uid.to_string`, `of_string`, and `t_of_sexp`. These were not compatible
|
||||
with the representation changes needed for the new `Id.Create*` functors
|
||||
|
||||
Interface changes:
|
||||
* `Container.Generic` now supports two "extra" (non-element) type parameters
|
||||
* Abstracted some of `Map` into `Dictionary_immutable` interfaces
|
||||
* Abstracted some of `Hashtbl` into `Dictionary_mutable` interfaces
|
||||
* Export `Set.Poly.set` type rather than using destructive update
|
||||
|
||||
Bug fixes:
|
||||
* Indexing was wrong in `Sequence.findi`, now fixed and with a regression test
|
||||
|
||||
Performance improvements:
|
||||
* Split up and refactored tests in `Base` to reduce build times
|
||||
* Stop using exceptions for control, primarily to speed up `js_of_ocaml` versions. Affects
|
||||
`Sequence.compare`, `String.index`, `String.rindex`, `String.index_from`,
|
||||
`String.rindex_from`, `Map.change`, and `Map.remove`
|
||||
* Unboxed `Int64.pow`
|
||||
* Branchless implementation of `Float.clamp_unchecked`, `Int.clamp_unchecked`
|
||||
* Branchless loop body in `Array.count` and `Array.counti`
|
||||
* Remove allocation in `List.Assoc.find_exn`
|
||||
* Reduce allocation of `With_return` under some compiler configurations
|
||||
* Restore `Array.equal` to zero allocation
|
||||
* Avoid boxing in `Int64.to_int_exn`, `Int64.hash_fold_t`, `Float.hash_fold_t`
|
||||
* Inlining annotation on `Float.sign_exn` to avoid boxing
|
||||
* Add `[@cold]` annotation to `Error.raise`
|
||||
* Tighten up conditional logic in `Hashtbl.set` and `Hashtbl.remove`
|
||||
* Reducing redundant computation in various `Map` functions
|
||||
* Rewrite `Array.min_elt` and `Array.max_elt` to reduce branching and allocation
|
||||
* Improve `ppx_hash` derived code for enumeration-like variants.
|
||||
* Moved queue mutation check to a function marked `[@cold]`.
|
||||
* Rewrite `List.dedup_and_sort` without a final remove-duplicates pass.
|
||||
* Fix `Info` to avoid blowing up the stack on `force` of the internal `lazy`.
|
||||
* Make `List.take`, `List.drop`, and `List.split` return the original list when possible.
|
||||
(issue 153, thanks `@mroch`)
|
||||
* Adapted `List` functions to take advantage of `[@tail_mod_cons]` where beneficial.
|
||||
* Use `[@tail_mod_cons]` in `Sequence.to_list`
|
||||
|
||||
Refactoring:
|
||||
* Update whitespace styling, primarily by no longer using ocp-indent on code
|
||||
* Use `Stdlib.Sys.Immediate64` in `Int63` instead of hand-written copy
|
||||
* Properly use loop variable in `List.chunks_of` helper
|
||||
* Rename internal variable in `Hashtbl.remove` for clarity
|
||||
* Lift some of `Int_conversions` to `Int_string_conversions` to share elsewhere
|
||||
* Remove unused `[@tailcall]` attribute in `List.group`
|
||||
* Use inlined records in `Map` and `Set` internal variant representations
|
||||
* Reimplement `Map.Build_increasing` to something simpler
|
||||
* Remove unnecessary helper in `Map.remove`
|
||||
* Remove unused functions from `String0`
|
||||
* Use inlining instead of duplication for helpers in `Set` implementation
|
||||
* Split out `Ocaml_intrinsics_kernel`, used it for some intrinsics in `Base`
|
||||
|
||||
Documentation:
|
||||
* Fix typo where `Set.union_list` documented itself as `union`
|
||||
* Various grammar and capitalization fixes (PR 145, thanks `@goodship1`)
|
||||
|
||||
Tests and benchmarks, largely to gain confidence in the changes above:
|
||||
* Updated allocation expect tests to actually use `let%expect_test` (oops)
|
||||
* Updated benchmarks for `Float.clamp*`.
|
||||
* Add benchmarks for `Hashtbl.map_inplace`, `create`, `remove`, `set`, `change`, and
|
||||
`find_and_remove`
|
||||
* Add benchmarks for `Map.set`, `remove`, and `change`
|
||||
* Add `js_of_ocaml`-only benchmarks for `Map.remove` and `Map.change`
|
||||
* Benchmark `Sequence.compare` and `String.index`
|
||||
* Benchmark `Set.add`, `find`, and `find_map`
|
||||
* Tests and benchmarks for `min_elt`, `max_elt`, `count`, and `counti` in `Array` and
|
||||
`List`
|
||||
|
||||
Windows:
|
||||
* Fixed the windows build. (PR 152, thanks `@hhugo`)
|
||||
|
||||
Work toward compatibility with OCaml 5.1:
|
||||
* Update `Random` to use new splittable PRNG
|
||||
* Other various changes
|
||||
|
||||
Improved support for compiler extensions found at https://github.com/ocaml-flambda/flambda-backend:
|
||||
* Various updated signatures, definitions, and new functionality to support `local_` mode
|
||||
and stack allocation
|
||||
* Added annotations for `[@zero_alloc]` compiler checks
|
||||
|
||||
## Release v0.16.0
|
||||
|
||||
Changes across many modules:
|
||||
|
||||
* Replaced `Caml` with `Stdlib`. The `Caml` module predated `Stdlib` and has been
|
||||
redundant for some time.
|
||||
|
||||
* Added support for local allocations. This is a nonstandard OCaml extension available at
|
||||
<https://github.com/ocaml-flambda/ocaml-jst>.
|
||||
|
||||
Support includes:
|
||||
- updating functions to accept `[@local]` arguments, especially closures
|
||||
- local constructors, like `Array.create_local` and `Bytes.create_local`
|
||||
- new versions of interfaces supporting `local` values, such as `Applicative.S_local`
|
||||
- `[@@deriving globalize]` on some types, for converting local values to global values
|
||||
|
||||
* Rename `Polymorphic_compare` submodules to `Comparisons`. The former was a misnomer.
|
||||
While the comparisons for a given type are meant to replace polymorphic compare
|
||||
operators, they are not polymorphic themselves.
|
||||
|
||||
* Added `Container.S_with_creators` and `Indexed_container.S_with_creators`. Used these in
|
||||
container modules such as `Array`, `List`, and `String`. These interfaces standardize
|
||||
functions like `map` and `filter`. Along the way, refactored module types in `Container`
|
||||
and `Indexed_container`.
|
||||
|
||||
* In signatures for `fold*` functions, renamed accumulator type variables to `'acc` for
|
||||
improved readability.
|
||||
|
||||
* Added `of_string_opt` to `Int_intf.S`.
|
||||
|
||||
* Added `dequeue_and_ignore_exn` to `Queue_intf.S`.
|
||||
|
||||
Changes to individual modules:
|
||||
|
||||
* `Bool`: added `select`, a primitive using `CMOV` on architectures that support it.
|
||||
|
||||
* `Comparable`:
|
||||
* Added `'a reversed` and `compare_reversed`, to support deriving inverted comparisons,
|
||||
e.g.: `[%compare: My_type.t Comparable.reversed]`
|
||||
* Added `Derived2_phantom`, similar to `Derived_phantom`.
|
||||
* Made `Derived*.comparator_witness` types injective.
|
||||
|
||||
* `Float`:
|
||||
* Added hyperbolic trig functions `acosh`, `asinh`, and `atanh` to `Float`.
|
||||
* Added `Float.of_string_opt`.
|
||||
|
||||
* `Hash_set`: Made `t` injective.
|
||||
|
||||
* `Hashtbl`:
|
||||
* Added `choose_randomly` and `choose_randomly_exn`.
|
||||
* Made `Hashtbl.t` injective.
|
||||
|
||||
* `Lazy`: Added `peek`, extracting an already-forced value if present.
|
||||
|
||||
* `Map`:
|
||||
* Added `split_le_gt`, `split_lt_ge`, and `transpose_keys`.
|
||||
* Added `Make_applicative_traversals`, allowing some applicatives to improve performance
|
||||
when operating on maps.
|
||||
* Corrected documentation of performance for `filter*` functions.
|
||||
* Refactored module types in `map_intf.ml`. Among other changes, propagated
|
||||
`~comparator` argument slightly differently to allow expressing type of
|
||||
`transpose_keys` properly.
|
||||
|
||||
* `Monad`: Documented performance characteristics of `Ident`.
|
||||
|
||||
* `Option`: Deprecated functions from `Container` but not particularly useful for options.
|
||||
|
||||
* `Ppx_compare_lib`: Removed primitive functions; `ppx_compare` now explicitly refers to
|
||||
these via `Stdlib`.
|
||||
|
||||
* `Sequence`: Changed `Step.t` variant type to use inlined records.
|
||||
|
||||
* `Set`:
|
||||
* Added `of_tree`, `to_tree`, `split_le_gt`, and `split_lt_ge`.
|
||||
* Created a single shared `'a Named.t` type to `set_intf.ml`, rather than using a new type
|
||||
in every instance of `Accessors`.
|
||||
* Made `Set.t` injective in both type arguments.
|
||||
* Refactored module types in `set_intf.ml`.
|
||||
|
||||
* `Sexpable`: `Of_stringable` now provides `t_sexp_grammar`.
|
||||
|
||||
* `Sign` and `Sign_or_nan`: Added `to_string_hum`.
|
||||
|
||||
* `Stack`: added `filter`, `filter_inplace`, and `filter_map`.
|
||||
|
||||
* `String`: added `concat_lines`, `pad_left`, `pad_right`, and `unsafe_sub`
|
||||
|
||||
* `Sys`: added `opaque_identity_global`, which forces its argument to be globally
|
||||
allocated.
|
||||
|
||||
* `Type_equal`: `Id.Uid` now implements `Identifiable.S`
|
||||
|
||||
* `Uniform_array`: add `sort`
|
||||
|
||||
## Old pre-v0.15 changelogs (very likely stale and incomplete)
|
||||
|
||||
## git version
|
||||
|
||||
- Renamed `Result.ok_fst` to `Result.to_either` (old name remains as
|
||||
deprecated alias). Added analogous `Result.of_either` function.
|
||||
|
||||
- Removed deprecated values `Array.truncate`, `{Obj_array,
|
||||
Uniform_array}.unsafe_truncate`, `Result.ok_unit`, `{Result,
|
||||
Or_error}.ignore`.
|
||||
|
||||
- Changed the signature of `Hashtbl.equal` to take the data equality
|
||||
function first, allowing it to be used with `[%equal: t]`.
|
||||
|
||||
- Remove deprecated function `List.dedup`.
|
||||
|
||||
- Remove deprecated string mutation functions from the `String` module.
|
||||
|
||||
- Removed deprecated function `Monad.all_ignore` in favor of
|
||||
`Monad.all_unit`.
|
||||
|
||||
- Deprecated `Or_error.ignore` and `Result.ignore` in favor of
|
||||
`Or_error.ignore_m` and `Result.ignore_m`.
|
||||
|
||||
- `Ordered_collection_common.get_pos_len` now returns an `Or_error.t`
|
||||
|
||||
- Added `Bool.Non_short_circuiting`.
|
||||
|
||||
- Added `Float.square`.
|
||||
|
||||
- Remove module `Or_error.Ok`.
|
||||
|
||||
- module `Ref` doesn't implement `Container.S1` anymore.
|
||||
|
||||
- Rename parameter of `Sequence.merge` from `cmp` to `compare`.
|
||||
|
||||
- Added `Info.of_lazy_t`
|
||||
|
||||
- Added `List.partition_result` function, to partition a list of `Result.t`
|
||||
values
|
||||
|
||||
- Changed the signature of `equal` from `'a t -> 'a t -> equal:('a -> 'a ->
|
||||
bool) -> bool` to `('a -> 'a -> bool) -> 'a t -> 'a t -> bool`.
|
||||
|
||||
- Optimized `Lazy.compare` to check physical equality before forcing the lazy
|
||||
values.
|
||||
|
||||
- Deprecated `Args` in the `Applicative` interface in favor of using `ppx_let`.
|
||||
|
||||
- Deprecated `Array.replace arr i ~f` in favor of using `arr.(i) <- (f (arr.(i)))`
|
||||
|
||||
- Rename collection length parameter of `Ordered_collection_common` functions
|
||||
from `length` to `total_length`, and add a unit argument to `get_pos_len` and
|
||||
`get_pos_len_exn`.
|
||||
|
||||
- Removed functions that were deprecated in 2016 from the `Array` and `Set`
|
||||
modules.
|
||||
|
||||
- `Int.Hex.of_string` and friends no longer silently ignore a suffix
|
||||
of non-hexadecimal garbage.
|
||||
|
||||
- Added `?backtrace` argument to `Or_error.of_exn_result`.
|
||||
|
||||
- `List.zip` now returns a `List.Or_unequal_lengths.t` instead of an `option`.
|
||||
|
||||
- Remove functions from the `Sequence` module that were deprecated in 2015.
|
||||
|
||||
- `Container.Make` and `Container.Make0` now require callers to either provide a
|
||||
custom `length` function or request that one be derived from `fold`.
|
||||
`Container.to_array`'s signature is also changed to accept `length` and `iter`
|
||||
instead of `fold`.
|
||||
|
||||
- Exposed module `Int_math`.
|
||||
|
||||
## v0.11
|
||||
|
||||
- Deprecated `Not_found`, people who need it can use `Caml.Not_found`, but its
|
||||
use isn't recommended.
|
||||
|
||||
- Added the `Sexp.Not_found_s` exception which will replace `Caml.Not_found` as
|
||||
the default exception in a future release.
|
||||
|
||||
- Document that `Array.find_exn`, `Array.find_map_exn`, and `Array.findi_exn`
|
||||
may throw `Caml.Not_found` _or_ `Not_found_s`.
|
||||
|
||||
- Document that `Hashtbl.find_exn` may throw `Caml.Not_found` _or_
|
||||
`Not_found_s`.
|
||||
|
||||
- Document that `List.find_exn`, and `List.find_map_exn` may throw
|
||||
`Caml.Not_found` _or_ `Not_found_s`.
|
||||
|
||||
- Document that `List.find_exn` may throw `Caml.Not_found` _or_ `Not_found_s`.
|
||||
|
||||
- Document that `String.lsplit2_exn`, and `String.rsplit2_exn` may throw
|
||||
`Caml.Not_found` _or_ `Not_found_s`.
|
||||
|
||||
- Added `Sys.backend_type`.
|
||||
|
||||
- Removed unnecessary unit argument from `Hashtbl.create`.
|
||||
|
||||
- Removed deprecated operations from `Hashtbl`.
|
||||
|
||||
- Removed `Hashable.t` constructors from `Hashtbl` and `Hash_set`, instead
|
||||
favoring the first-class module constructors.
|
||||
|
||||
- Removed `Container` operations from `Either.First` and `Either.Second`.
|
||||
|
||||
- Changed the type of `fold_until` in the `Container` interfaces. Rather than
|
||||
returning a `Finished_or_stopped_early.t` (which has also been removed), the
|
||||
function now takes a `finish` function that will be applied the result if `f`
|
||||
never returned a `Stop _`.
|
||||
|
||||
- Removed the `String_dict` module.
|
||||
|
||||
- Added a `Queue` module that is backed by an `Option_array` for efficient and
|
||||
(non-allocating) implementations of most operations.
|
||||
|
||||
- Added a `Poly` submodule to `Map` and `Set` that exposes constructors that
|
||||
use polymorphic compare.
|
||||
|
||||
- Deprecated `all_ignore` in the `Monad` and `Applicative` interfaces in favor
|
||||
of `all_unit`.
|
||||
|
||||
- Deprecated `Array.replace_all` in favor of `Array.map_inplace`, which is the
|
||||
standard name for that sort of operation within Base.
|
||||
|
||||
- Document that `List.find_exn`, and `List.find_map_exn` may throw
|
||||
`Caml.Not_found` _or_ `Not_found_s`.
|
||||
|
||||
- Make `~compare` a required argument to `List.dedup_and_sort`, `List.dedup`,
|
||||
`List.find_a_dup`, `List.contains_dup`, and `List.find_all_dups`.
|
||||
|
||||
- Removed `List.exn_if_dup`. It is still available in core_kernel.
|
||||
|
||||
- Removed "normalized" index operation `List.slice`. It is still available in
|
||||
core_kernel.
|
||||
|
||||
- Remove "normalized" index operations from `Array`, which incluced
|
||||
`Array.normalize`, `Array.slice`, `Array.nget` and `Array.nset`. These
|
||||
operations are still available in core_kernel.
|
||||
|
||||
- Added `Uniform_array` module that is just like an `Array` except guarantees
|
||||
that the representation array is not tagged with `Double_array_tag`, the tag
|
||||
for float arrays.
|
||||
|
||||
- Added `Option_array` module that allows for a compact representation of `'a
|
||||
optoin array`, which avoids allocating heap objects representing `Some a`.
|
||||
|
||||
- Remove "normalized" index operations from `String`, which incluced
|
||||
`String.normalize`, `String.slice`, `String.nget` and `String.nset`. These
|
||||
operations are still available in core_kernel.
|
||||
|
||||
- Added missing conversions between `Int63` and other integer types,
|
||||
specifically, the versions that return options.
|
||||
|
||||
- Added truncating versions of integer conversions, with a suffix of
|
||||
`_trunc`. These allow fast conversions via bit arithmetic without
|
||||
any conditional failure; excess bits beyond the width of the output
|
||||
type are simply dropped.
|
||||
|
||||
- Added `Sequence.group`, similar to `List.group`.
|
||||
|
||||
- Reimplemented `String.Caseless.compare` so that it does not
|
||||
allocate.
|
||||
|
||||
- Added `String.is_substring_at string ~pos ~substring`. Used it as
|
||||
back-end for `is_suffix` and `is_prefix`.
|
||||
|
||||
- Moved all remaining `Replace_polymorphic_compare` submodules from Base
|
||||
types and consolidated them in one place within `Import0`.
|
||||
|
||||
- Removed `(<=.)` and its friends.
|
||||
|
||||
- Added `Sys.argv`.
|
||||
|
||||
- Added a infix exponentation operator for int.
|
||||
|
||||
- Added a `Formatter` module to reexport the `Format.formatter` type and updated
|
||||
the deprecation message for `Format`.
|
||||
|
||||
## v0.10
|
||||
|
||||
(Changes that can break existing programs are marked with a "\*")
|
||||
|
||||
### Bugfixes
|
||||
|
||||
- Generalized the type of `Printf.ifprintf` to reflect OCaml's stdlib.
|
||||
|
||||
- Made `Sequence.fold_m` and `iter_m` respect `Skip` steps and explicitly bind
|
||||
when they occur.
|
||||
|
||||
- Changed `Float.is_negative` and `is_non_positive` on `NaN` to return `false`
|
||||
rather than `true`.
|
||||
|
||||
- Fixed the `Validate.protect` function, which was mistakenly raising exceptions.
|
||||
|
||||
### API changes
|
||||
|
||||
- Renamed `Map.add` as `set`, and deprecated `add`. A later feature will add
|
||||
`add` and `add_exn` in the style of `Hashtbl`.
|
||||
|
||||
- A different hash function is used to implement `Base.Int.hash`.
|
||||
The old implementation was `Int.abs` but collision resistance is not enough,
|
||||
we want avalanching as well.
|
||||
The new function is an adaptation of one of the
|
||||
[Thomas Wang](http://web.archive.org/web/20071223173210/http://www.concentric.net/~Ttwang/tech/inthash.htm)
|
||||
hash functions to OCaml (63-bit integers), which results in reasonably good avalanching.
|
||||
|
||||
|
||||
- Made `open Base` expose infix float operators (+., -., etc.).
|
||||
|
||||
* Renamed `List.dedup` to `List.dedup_and_sort`, to better reflect its existing behavior.
|
||||
|
||||
- Added `Hashtbl.find_multi` and `Map.find_multi`.
|
||||
|
||||
- Added function `Map.of_increasing_sequence` for constructing a `Map.t` from an
|
||||
ordered `Sequence.t`
|
||||
|
||||
- Added function `List.chunks_of : 'a t -> length : int -> 'a t t`, for breaking
|
||||
a list into chunks of equal length.
|
||||
|
||||
- Add to module `Random` numeric functions that take upper and lower inclusive
|
||||
bounds, e.g. `Random.int_incl : int -> int -> int`.
|
||||
|
||||
* Replaced `Exn.Never_elide_backtrace` with `Backtrace.elide`, a `ref` cell that
|
||||
determines whether `Backtrace.to_string` and `Backtrace.sexp_of_t` elide
|
||||
backtraces.
|
||||
|
||||
- Exposed infix operator `Base.( @@ )`.
|
||||
|
||||
- Exposed modules `Base.Continue_or_stop` and `Finished_or_stopped_early`, used
|
||||
with the `Container.fold_until` function.
|
||||
|
||||
- Exposed module types Base.T, T1, T2, and T3.
|
||||
|
||||
- Added `Sequence.Expert` functions `next_step` and
|
||||
`delayed_fold_step`, for clients that want to explicitly handle `Skip` steps.
|
||||
|
||||
- Added `Bytes` module.
|
||||
This includes the submodules `From_string` and `To_string` with blit
|
||||
functions.
|
||||
N.B. the signature (and name) of `unsafe_to_string` and `unsafe_of_string` are
|
||||
different from the one in the standard library (and hopefully more explicit).
|
||||
|
||||
- Add bytes functions to `Buffer`.
|
||||
Also added `Buffer.content_bytes`, the analog of `contents` but that returns
|
||||
`bytes` rather than `string`.
|
||||
|
||||
* Enabled `-safe-string`.
|
||||
|
||||
- Added function `Int63.of_int32`, which was missing.
|
||||
|
||||
* Deprecated a number of `String` mutating functions.
|
||||
|
||||
- Added module `Obj_array`, moved in from `Core_kernel`.
|
||||
|
||||
* In module type `Hashtbl.Accessors`, removed deprecated functions, moving them
|
||||
into a new module type, `Deprecated`.
|
||||
|
||||
- Exported `sexp_*` types that are recognized by `ppx_sexp_*` converters:
|
||||
`sexp_array`, `sexp_list`, `sexp_opaque`, `sexp_option`.
|
||||
|
||||
* Reworked the `Or_error` module's interface, moving the `Container.S` interface
|
||||
to an `Ok` submodule, and adding functions `is_ok`, `is_error`, and `ok` to
|
||||
more closely resemble the interface of the `Result` module.
|
||||
|
||||
- Removed `Int.O.of_int_exn`.
|
||||
|
||||
- Exposed `Base.force` function.
|
||||
|
||||
- Changed the deprecation warning for `mod` to recommend `( % )` rather than
|
||||
`Caml.( mod )`.
|
||||
|
||||
### Performance related changes
|
||||
|
||||
- Optimized `List.compare`, removing its closure allocation.
|
||||
|
||||
- Optimized `String.mem` to not allocate.
|
||||
|
||||
- Optimized `Float.is_negative`, `is_non_negative`, `is_positive`, and
|
||||
`is_non_positive` to avoid some boxing.
|
||||
|
||||
- Changed `Hashtbl.merge` to relax its equality check on the input tables'
|
||||
`Hashable.t` records, checking physical equality componentwise if the records
|
||||
aren't physically equal.
|
||||
|
||||
- Added `Result.combine_errors`, similar to `Or_error.combine_errors`, with a
|
||||
slightly different type.
|
||||
|
||||
- Added `Result.combine_errors_unit`, similar to `Or_error.combine_errors_unit`.
|
||||
|
||||
- Optimized the `With_return.return` type by adding the `[@@unboxed]` attribute.
|
||||
|
||||
- Improved a number of deprecation warnings.
|
||||
|
||||
|
||||
## v0.9
|
||||
|
||||
Initial release.
|
||||
Loading…
Add table
Add a link
Reference in a new issue