#+TITLE: jane 108.08 release notes
#+OPTIONS: ^:nil toc:3
** Bin_prot
- Added ~Bin_prot.unsafe_memcmp~, for fast comparison of a slice of two buffers.
** Sexplib
- One can now use ~with sexp~ on nonregular types.
** Core
*** ~Array~
- Eliminated ~Array.max_length~.
*** ~Avltree~
- Added ~Avltree.first~ and ~Avltree.last~, which return the leftmost and
rightmost element in the tree, respectively.
*** ~Bigstring~
- ~Bigstring.create~ has a new optional argument that allows one to tune garbage
collection. Before this change, the allocation of large bigstrings have a significant
impact in the speed of garbage collection even for systems that may have significant
memory and are willing to tradeoff memory for speed (like gord).
*** ~Blang~
- Added ~Blang.constant_value~, for checking if a blang expression is a constant.
*** ~Command~
- For ~Command.basic~, the type of the ~main~ function that you pass in is now
required to always have a final argument of type ~unit~. This allows the
implementation to distinguish between the phases of parsing the command line
and running ~main~, which leads to better error messages.
- Added ~Command.Spec.Arg_type.of_map~, a new function for building new
autocompletion-supporting commandline argument types for types with a small
finite set of values.
*** ~Float~
- Eliminated ~Core.Std.nan~. One must now use ~Float.nan~.
- Added ~Float.is_finite~.
- Added ~?delimiter:char~ argument to ~Float.to_string_hum~. The default is now
underscore.
*** ~Fn~
- Added ~Fn.apply_n_times~.
*** ~Gc~
- Renamed ~Gc.finalise~ as ~Gc.add_finalizer_exn~, and added added ~Gc.add_finalizer~,
which requires its argument to be a ~Heap_block~.
*** ~Heap_block~
- Added ~Core.Heap_block~, which has a new type for blocks that are guaranteed to live on
the OCaml heap. Functions that require heap blocks, e.g. ~Weak.set~ and
~Gc.add_finalizer~, now express that fact using ~Heap_block.t~.
*** ~In_channel~
- Eliminated ~In_channel.input_lines~.
*** ~Int~
- Added ~?delimiter:char~ argument to ~Int.to_string_hum~. The default is now
underscore.
*** ~Int_set~
- Eliminated ~Int_set.compare~.
*** ~Linux_ext~
- Added ~Linux_ext.setpriority~ and ~Linux_ext.getpriority~.
- Changed the ~timeout~ argument of ~Epoll.wait~ to a variant.
*** ~Map~
- Added ~Map.of_sorted_array~, ~Map.of_sorted_array_unchecked~, and ~Map.iter2~.
*** ~Or_error~
- Renamed ~Or_error.all_ok~ as ~Or.combine_errors~.
*** ~Piecewise_linear~
- Added ~Piecewise_linear.to_knots~.
*** ~Queue~
- Added ~Queue.to_list~
*** ~Set~
- Added ~Set.of_sorted_array~, ~Set.of_sorted_array_unchecked~, and ~Set.iter2~.
*** ~String~
- Added ~String.filter~
*** ~Sys~
- Added ~Sys.execution_mode~, to test whether you are executing
bytecode or have compiled natively
*** ~Time~
- Removed ~Time.Ofday.of_sec~ and ~Time.Ofday.to_sec~.
*** ~Tuple~
- Added ~equal~ function for building equality functions on tuples out of equality
functions on their components.
*** ~Unix~
- Changed the ~timeout~ argument to ~Unix.select~ to use a variant type.
- Added ~Unix.Error.of_system_int~.
- Added ~Unix.getgrouplist~.
- Added ~Unix.strptime~.
*** ~Weak~
- Added ~Core.Weak~, a wrapper around OCaml's ~Weak~ module. The wrapper uses
~Heap_block~ to require that values in the weak set be heap blocks.
*** ~Zone~
- Improved ~Zone.machine_zone~ to look in ~/usr/share/zoneinfo~ for a zone matchin
~/etc/localtime~.
- Added ~Zone.likely_machine_zones~, which is used to speed up the determination
of which zone ~/etc/localtime~ corresponds to.
- Renamed ~Zone.to_utc_offset~ as ~Zone.default_utc_offset_deprecated~.
** Async
*** ~Gc~
- ~add_finalizer~ now requires a ~Heap_block.t~.
- Added ~add_finalizer_exn~, which is like the old ~add_finalizer~.
- Both ~add_finalizer~ and ~add_finalizer_exn~ take as their first argument the block to
be finalized.
*** ~In_thread~
- Added ability to set the nice value of helper threads and of jobs run by
~In_thread.run~.
*** ~Pipe~
- Added ~Pipe.peek~
- Improved the efficiency of ~Pipe.iter_without_pushback ~continue_on_error:false~, so
that it doesn't allocate an array (which could make it to the major heap, and keep
stuff alive too long).
*** ~Reader~
- Exposed ~Reader.really_read_line~.
*** ~Rpc~
- Renamed ~Rpc.Server~ as ~Rpc.Implementations~.
*** ~Scheduler~
- Eliminated wasteful per-cycle ~read()~ syscall that was done to clear the interruptor
pipe. The read now only occurs if there has been an interrupt.
*** ~Signal~
- Replaced ~Signal.standard~ with ~Signal.terminating~, which is a smaller set of
signals, and in particular excludes: ~SIGABRT~, ~SIGCHLD~, ~SIGCONT~, ~SIGPROF~,
~SIGQUIT~, ~SIGTSTP~, ~SIGTTIN~, and ~SIGTTOU~.
- Added ~Signal.is_managed_by_async~.
*** Changed ~Weak_hashtbl~ to use ~Core.Heap_block~.