package base
Install
Dune Dependency
Authors
Maintainers
Sources
md5=6a3504bf4179654606f2785c057981e4
sha512=5828bfdad7e80183c4aa8b52e6ab06cc17c9f15cfbffc88827db8f8973a064813236d60b01358f838e58f2fea1f4499e6a7676bf081da443c1fb8a019d9fe7be
CHANGES.md.html
Release v0.17.0
Added functionality:
Add
String.to_sequence
Derive
equal
onSet.Merge_with_duplicates_element.t
Add
Queue.drain
Add
Or_error.of_option
Extend
Hashtbl_intf.Hashtbl
withcapacity
, intended for testing resizing behaviorAdd
Nothing.must_be_*
functions discarding (parts of) inputs withNothing.t
as a type parameterAdd
Float.log2
Add
Random.bits64
, re-exported fromStdlib.Random
Add
String.edit_distance
to compute Levenshtein distance between stringsAdd
Comparator.to_module
andComparator.of_module
, converting betweenComparator.t
andComparator.Module.t
Add
Map.sum
,unzip
,of_list_with_key_fold
, andof_list_with_key_reduce
Add
Applicative.Ident
, similar toMonad.Ident
Extend
Uniform_array
with more operations akin toArray
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 keysAdded
Sequence.Expert.View
to consume sequences more flexibly and efficientlyAdd a
Binary
submodule toInt
,Int32
, etc, which provideto_string
andsexp_of_t
with syntax matching the ocaml binary int literal syntaxAdd
List.stable_dedup
and deprecateSet.stable_dedup_list
Add
Queue.enqueue_front
andQueue.dequeue_back
Add
Type_equal.Id.Create*
functors for polymorphic types
Added unicode support:
Added
Utf*
submodules toBytes
,Uchar
, andString
Types for
Uchar
andString
encoding UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF32-BEAdded 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 availableMap.comparator
andSet.comparator
type aliasesBase.Popcount
, as it is exported via the variousInt*
modulesOption
functions fromContainer
that are not usefulResult.ok_fst
, an alias forto_either
Sequence.merge
, an alias formerge_deduped_and_sorted
Info.to_string_hum_deprecated
?trunc_after
flag toInfo.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
, andt_of_sexp
. These were not compatible with the representation changes needed for the newId.Create*
functors
Interface changes:
Container.Generic
now supports two "extra" (non-element) type parametersAbstracted some of
Map
intoDictionary_immutable
interfacesAbstracted some of
Hashtbl
intoDictionary_mutable
interfacesExport
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 timesStop using exceptions for control, primarily to speed up
js_of_ocaml
versions. AffectsSequence.compare
,String.index
,String.rindex
,String.index_from
,String.rindex_from
,Map.change
, andMap.remove
Unboxed
Int64.pow
Branchless implementation of
Float.clamp_unchecked
,Int.clamp_unchecked
Branchless loop body in
Array.count
andArray.counti
Remove allocation in
List.Assoc.find_exn
Reduce allocation of
With_return
under some compiler configurationsRestore
Array.equal
to zero allocationAvoid boxing in
Int64.to_int_exn
,Int64.hash_fold_t
,Float.hash_fold_t
Inlining annotation on
Float.sign_exn
to avoid boxingAdd
[@cold]
annotation toError.raise
Tighten up conditional logic in
Hashtbl.set
andHashtbl.remove
Reducing redundant computation in various
Map
functionsRewrite
Array.min_elt
andArray.max_elt
to reduce branching and allocationImprove
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 onforce
of the internallazy
.Make
List.take
,List.drop
, andList.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]
inSequence.to_list
Refactoring:
Update whitespace styling, primarily by no longer using ocp-indent on code
Use
Stdlib.Sys.Immediate64
inInt63
instead of hand-written copyProperly use loop variable in
List.chunks_of
helperRename internal variable in
Hashtbl.remove
for clarityLift some of
Int_conversions
toInt_string_conversions
to share elsewhereRemove unused
[@tailcall]
attribute inList.group
Use inlined records in
Map
andSet
internal variant representationsReimplement
Map.Build_increasing
to something simplerRemove unnecessary helper in
Map.remove
Remove unused functions from
String0
Use inlining instead of duplication for helpers in
Set
implementationSplit out
Ocaml_intrinsics_kernel
, used it for some intrinsics inBase
Documentation:
Fix typo where
Set.union_list
documented itself asunion
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
, andfind_and_remove
Add benchmarks for
Map.set
,remove
, andchange
Add
js_of_ocaml
-only benchmarks forMap.remove
andMap.change
Benchmark
Sequence.compare
andString.index
Benchmark
Set.add
,find
, andfind_map
Tests and benchmarks for
min_elt
,max_elt
,count
, andcounti
inArray
andList
Windows:
Fixed the windows build. (PR 152, thanks
@hhugo
)
Work toward compatibility with OCaml 5.1:
Update
Random
to use new splittable PRNGOther 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 allocationAdded annotations for
[@zero_alloc]
compiler checks
Release v0.16.0
Changes across many modules:
Replaced
Caml
withStdlib
. TheCaml
module predatedStdlib
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 closureslocal constructors, like
Array.create_local
andBytes.create_local
new versions of interfaces supporting
local
values, such asApplicative.S_local
[@@deriving globalize]
on some types, for converting local values to global values
Rename
Polymorphic_compare
submodules toComparisons
. 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
andIndexed_container.S_with_creators
. Used these in container modules such asArray
,List
, andString
. These interfaces standardize functions likemap
andfilter
. Along the way, refactored module types inContainer
andIndexed_container
.In signatures for
fold*
functions, renamed accumulator type variables to'acc
for improved readability.Added
of_string_opt
toInt_intf.S
.Added
dequeue_and_ignore_exn
toQueue_intf.S
.
Changes to individual modules:
Bool
: addedselect
, a primitive usingCMOV
on architectures that support it.Comparable
:Added
'a reversed
andcompare_reversed
, to support deriving inverted comparisons, e.g.:[%compare: My_type.t Comparable.reversed]
Added
Derived2_phantom
, similar toDerived_phantom
.Made
Derived*.comparator_witness
types injective.
Float
:Added hyperbolic trig functions
acosh
,asinh
, andatanh
toFloat
.Added
Float.of_string_opt
.
Hash_set
: Madet
injective.Hashtbl
:Added
choose_randomly
andchoose_randomly_exn
.Made
Hashtbl.t
injective.
Lazy
: Addedpeek
, extracting an already-forced value if present.Map
:Added
split_le_gt
,split_lt_ge
, andtranspose_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 oftranspose_keys
properly.
Monad
: Documented performance characteristics ofIdent
.Option
: Deprecated functions fromContainer
but not particularly useful for options.Ppx_compare_lib
: Removed primitive functions;ppx_compare
now explicitly refers to these viaStdlib
.Sequence
: ChangedStep.t
variant type to use inlined records.Set
:Added
of_tree
,to_tree
,split_le_gt
, andsplit_lt_ge
.Created a single shared
'a Named.t
type toset_intf.ml
, rather than using a new type in every instance ofAccessors
.Made
Set.t
injective in both type arguments.Refactored module types in
set_intf.ml
.
Sexpable
:Of_stringable
now providest_sexp_grammar
.Sign
andSign_or_nan
: Addedto_string_hum
.Stack
: addedfilter
,filter_inplace
, andfilter_map
.String
: addedconcat_lines
,pad_left
,pad_right
, andunsafe_sub
Sys
: addedopaque_identity_global
, which forces its argument to be globally allocated.Type_equal
:Id.Uid
now implementsIdentifiable.S
Uniform_array
: addsort
Old pre-v0.15 changelogs (very likely stale and incomplete)
git version
Renamed
Result.ok_fst
toResult.to_either
(old name remains as deprecated alias). Added analogousResult.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 ofMonad.all_unit
.Deprecated
Or_error.ignore
andResult.ignore
in favor ofOr_error.ignore_m
andResult.ignore_m
.Ordered_collection_common.get_pos_len
now returns anOr_error.t
Added
Bool.Non_short_circuiting
.Added
Float.square
.Remove module
Or_error.Ok
.module
Ref
doesn't implementContainer.S1
anymore.Rename parameter of
Sequence.merge
fromcmp
tocompare
.Added
Info.of_lazy_t
Added
List.partition_result
function, to partition a list ofResult.t
valuesChanged 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 theApplicative
interface in favor of usingppx_let
.Deprecated
Array.replace arr i ~f
in favor of usingarr.(i) <- (f (arr.(i)))
Rename collection length parameter of
Ordered_collection_common
functions fromlength
tototal_length
, and add a unit argument toget_pos_len
andget_pos_len_exn
.Removed functions that were deprecated in 2016 from the
Array
andSet
modules.Int.Hex.of_string
and friends no longer silently ignore a suffix of non-hexadecimal garbage.Added
?backtrace
argument toOr_error.of_exn_result
.List.zip
now returns aList.Or_unequal_lengths.t
instead of anoption
.Remove functions from the
Sequence
module that were deprecated in 2015.Container.Make
andContainer.Make0
now require callers to either provide a customlength
function or request that one be derived fromfold
.Container.to_array
's signature is also changed to acceptlength
anditer
instead offold
.Exposed module
Int_math
.
v0.11
Deprecated
Not_found
, people who need it can useCaml.Not_found
, but its use isn't recommended.Added the
Sexp.Not_found_s
exception which will replaceCaml.Not_found
as the default exception in a future release.Document that
Array.find_exn
,Array.find_map_exn
, andArray.findi_exn
may throwCaml.Not_found
orNot_found_s
.Document that
Hashtbl.find_exn
may throwCaml.Not_found
orNot_found_s
.Document that
List.find_exn
, andList.find_map_exn
may throwCaml.Not_found
orNot_found_s
.Document that
List.find_exn
may throwCaml.Not_found
orNot_found_s
.Document that
String.lsplit2_exn
, andString.rsplit2_exn
may throwCaml.Not_found
orNot_found_s
.Added
Sys.backend_type
.Removed unnecessary unit argument from
Hashtbl.create
.Removed deprecated operations from
Hashtbl
.Removed
Hashable.t
constructors fromHashtbl
andHash_set
, instead favoring the first-class module constructors.Removed
Container
operations fromEither.First
andEither.Second
.Changed the type of
fold_until
in theContainer
interfaces. Rather than returning aFinished_or_stopped_early.t
(which has also been removed), the function now takes afinish
function that will be applied the result iff
never returned aStop _
.Removed the
String_dict
module.Added a
Queue
module that is backed by anOption_array
for efficient and (non-allocating) implementations of most operations.Added a
Poly
submodule toMap
andSet
that exposes constructors that use polymorphic compare.Deprecated
all_ignore
in theMonad
andApplicative
interfaces in favor ofall_unit
.Deprecated
Array.replace_all
in favor ofArray.map_inplace
, which is the standard name for that sort of operation within Base.Document that
List.find_exn
, andList.find_map_exn
may throwCaml.Not_found
orNot_found_s
.Make
~compare
a required argument toList.dedup_and_sort
,List.dedup
,List.find_a_dup
,List.contains_dup
, andList.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 inclucedArray.normalize
,Array.slice
,Array.nget
andArray.nset
. These operations are still available in core_kernel.Added
Uniform_array
module that is just like anArray
except guarantees that the representation array is not tagged withDouble_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 representingSome a
.Remove "normalized" index operations from
String
, which inclucedString.normalize
,String.slice
,String.nget
andString.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 toList.group
.Reimplemented
String.Caseless.compare
so that it does not allocate.Added
String.is_substring_at string ~pos ~substring
. Used it as back-end foris_suffix
andis_prefix
.Moved all remaining
Replace_polymorphic_compare
submodules from Base types and consolidated them in one place withinImport0
.Removed
(<=.)
and its friends.Added
Sys.argv
.Added a infix exponentation operator for int.
Added a
Formatter
module to reexport theFormat.formatter
type and updated the deprecation message forFormat
.
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
anditer_m
respectSkip
steps and explicitly bind when they occur.Changed
Float.is_negative
andis_non_positive
onNaN
to returnfalse
rather thantrue
.Fixed the
Validate.protect
function, which was mistakenly raising exceptions.
API changes
Renamed
Map.add
asset
, and deprecatedadd
. A later feature will addadd
andadd_exn
in the style ofHashtbl
.A different hash function is used to implement
Base.Int.hash
. The old implementation wasInt.abs
but collision resistance is not enough, we want avalanching as well. The new function is an adaptation of one of the Thomas Wang hash functions to OCaml (63-bit integers), which results in reasonably good avalanching.Made
open Base
expose infix float operators (+., -., etc.).
Renamed
List.dedup
toList.dedup_and_sort
, to better reflect its existing behavior.
Added
Hashtbl.find_multi
andMap.find_multi
.Added function
Map.of_increasing_sequence
for constructing aMap.t
from an orderedSequence.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
withBacktrace.elide
, aref
cell that determines whetherBacktrace.to_string
andBacktrace.sexp_of_t
elide backtraces.
Exposed infix operator
Base.( @@ )
.Exposed modules
Base.Continue_or_stop
andFinished_or_stopped_early
, used with theContainer.fold_until
function.Exposed module types Base.T, T1, T2, and T3.
Added
Sequence.Expert
functionsnext_step
anddelayed_fold_step
, for clients that want to explicitly handleSkip
steps.Added
Bytes
module. This includes the submodulesFrom_string
andTo_string
with blit functions. N.B. the signature (and name) ofunsafe_to_string
andunsafe_of_string
are different from the one in the standard library (and hopefully more explicit).Add bytes functions to
Buffer
. Also addedBuffer.content_bytes
, the analog ofcontents
but that returnsbytes
rather thanstring
.
Enabled
-safe-string
.
Added function
Int63.of_int32
, which was missing.
Deprecated a number of
String
mutating functions.
Added module
Obj_array
, moved in fromCore_kernel
.
In module type
Hashtbl.Accessors
, removed deprecated functions, moving them into a new module type,Deprecated
.
Exported
sexp_*
types that are recognized byppx_sexp_*
converters:sexp_array
,sexp_list
,sexp_opaque
,sexp_option
.
Reworked the
Or_error
module's interface, moving theContainer.S
interface to anOk
submodule, and adding functionsis_ok
,is_error
, andok
to more closely resemble the interface of theResult
module.
Removed
Int.O.of_int_exn
.Exposed
Base.force
function.Changed the deprecation warning for
mod
to recommend( % )
rather thanCaml.( 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
, andis_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 toOr_error.combine_errors
, with a slightly different type.Added
Result.combine_errors_unit
, similar toOr_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.