[ANN] v0.15 release of Jane Street packages

Dear OCaml developers,

We are pleased to announce the v0.15 release of Jane Street packages!

This release comes with 41 new packages, and a large number of fixes and
enhancements. The documentation for the individual packages will soon be available on v3.ocaml.org/packages, after some technical issues are fixed.

The remainder of this e-mail highlights the main changes since the v0.14

Notable changes

Re-structuring of Core.

The most noticeable breaking change is the re-structuring of Core.

In 0.14, Core is somewhat bloated and includes many modules that are barely ever used,
many of which are Unix-specific. In 0.15, many of those modules moved to separate libraries,
most of them to packagecore_unix, and core is now much smaller and no longer
contains unix-specific code.

The mapping between the new libraries and the old modules can be summarized by the contents of Core_compat library v0.14:

module Command_unix = Core.Command
module Date_unix = Core.Date
module Filename_unix = Core.Filename
module Signal_unix = Core.Signal
module Sys_unix = Core.Sys
module Core_thread = Core.Thread
module Time_unix = Core.Time
module Time_ns_unix = Core.Time_ns
module Core_unix = Core.Unix
module Version_util = Core.Version_util

module Interval_lib = struct
  module Interval = Core.Interval
  module Interval_intf = Core.Interval_intf

module Time_interface = Core.Time_common

Async: Monitor.try_with

Monitor.try_with and related functions changed the defaults for their run and rest parameters.
They used to default to ~run:`Schedule ~rest:`Log, but now they default to ~run:`Now ~rest:`Raise.

Many other changes

There are many changes and additions across 130+ existing packages, and
unfortunately we don’t maintain a changelog to list them all.
The code for all of our packages is on our github,
and if you’re interested in the details of what changed in a particular package,
you can inspect the diff between branches v0.14 and v0.15.

New packages

abstract_algebra: A small library describing abstract algebra concepts

A library describing abstract algebra concepts. Currently, it includes
Commutative_group and Vector_space.

async_rpc_websocket: Library to serve and dispatch Async RPCs over websockets

Library to serve and dispatch Async RPCs over websockets.

Rpc_websocket makes it easy to serve and send Async RPCs with
HTTP+Websocket underlying the transport. It also provides a mechanism to share the
RPC implementations between a vanilla TCP server and a HTTP server.

On the server side, the library detects when a websocket connection
is established, and routes to an optionally provided vanilla HTTP handler
when non-websocket traffic occurs.

bigdecimal: Arbitrary-precision decimal based on Zarith

A high-precision representation of decimal numbers as [mantissa * 10^exponent], where
the mantissa is internally a [Bigint.t] and the exponent is an [int].

cohttp_async_websocket: Websocket library for use with cohttp and async

Websocket library for use with cohttp and async.

Cohttp_async_websocket is a full-featured server-side
websocket implementation, using Async as the concurrency library,
and Cohttp for HTTP negotiation.

It implements a large portion of RFC6445. The library has been
hardened with many applications using it for several year, in
conjunction with async-js and google-chrome.

cohttp_static_handler: A library for easily creating a cohttp handler for static files

Single page handlers are handlers that serve user specified JavaScript and css
files along with a generated index page that loads those files.

core_compat: Compatibility for core 0.14

Compatibility wrapper to make it possible to have code compatible with both Core 0.14 and 0.15.

env_config: Helper library for retrieving configuration from an environment variable

The Env_config library is a helper for retrieving library and program
configuration from an environment variable. Its goal is to make it easy
to override a configuration that is loaded from disk, computed, or embedded
in a library.

file_path: A library for typed manipulation of UNIX-style file paths

A library for typed manipulation of UNIX-style file paths.

fuzzy_match: A library for fuzzy string matching

A library for fuzzy string matching

fzf: A library for running the fzf command line tool

A library for running the fzf command line fuzzy matcher

hardcaml_c: Hardcaml C Simulation Backend

A fast C-based simulation backend for Hardcaml circuits.

The library transparently compiles a Hardcaml Circuit to C code, which is in turn compiled
and linked into the running executable. The generated simulation object can be used like
any other cyclesim simulation.

hardcaml_circuits: Hardcaml Circuits

A small library of useful/interesting Hardcaml circuits.

hardcaml_fixed_point: Hardcaml fixed point arithmetic

Signed and Unsigned fixed point operations, with a full complement of rounding and
overflow functionality.

hardcaml_of_verilog: Convert Verilog to a Hardcaml design

The opensource synthesis tool yosys is used to convert a verilog design to a JSON based
netlist representation. This library can load the JSON netlist and build a hardcaml

Code can also be generated to wrap the conversion process using Hardcaml interfaces.

hardcaml_step_testbench: Hardcaml Testbench Monad

A monad for interacting with Hardcaml.Cyclesim based simulations.

Allows multiple control threads to interact with a simulation module, all of which are
synchronised to the system clock.

hardcaml_verify: Hardcaml Verification Tools

Tools for verifying properties of Hardcaml circuits.

Combinational circuits can be converted to ‘conjunctive normal form’ for input into SAT
solvers via DIMAC files. Support for a few opensource solvers is integrated - minisat,
picosat, Z3 - just ensure they are in your PATH.

Circuits can also be converted to NuSMV format for advanced bounded and unbounded model
checking tasks.

hardcaml_verilator: Hardcaml Verilator Simulation Backend

Very fast verilator-based simulations of Hardcaml circuits.

This library transparently compiles a verilator-based shared library, and links it back
to the running executable to be used as a Cyclesim simulation.

hardcaml_xilinx: Hardcaml wrappers for Xilinx memory primitives

The Hardcaml_xilinx library provides wrappers for Xilinx specific RAM and FIFO primitive
blocks. In many cases a simulation model is provided.

The Synthesis module implements various arithmetic and logical RTL components with
Xilinx LUT primitives.

hardcaml_xilinx_components: Hardcaml Xilinx component definitions

A tool for reading Xilinx VHDL Unisim and XPM component definitions from a Vivado
installation and generating Hardcaml interfaces automatically.

hex_encode: Hexadecimal encoding library

This library implements hexadecimal encoding and decoding

hg_lib: A library that wraps the Mercurial command line interface

A library that wraps the Mercurial command line interface.

int_repr: Integers of various widths

Integers of various widths.

jsonaf: A library for parsing, manipulating, and serializing data structured as JSON

A library for parsing, manipulating, and serializing data structured as JSON.

krb: A library for using Kerberos for both Rpc and Tcp communication

Jane Street’s library for Kerberizing RPC connections so that

  • the server gets an authenticated principal (i.e. username) with
    every incoming connection, and
  • RPC communication may be encrypted, if necessary.

magic-trace: Easy Intel Processor Trace Visualizer

Magic-trace makes it easy to record and visualize Intel Processor Trace data for
debugging tricky performance issues.

ocaml-embed-file: Files contents as module constants

Embed-file takes some files and generates code for an OCaml module
defining string constants containing the contents of those files.

ocaml_intrinsics: Intrinsics

Provides functions to invoke amd64 instructions (such as clz,popcnt,rdtsc,rdpmc)
when available, or compatible software implementation on other targets.

ocaml-probes: USDT probes for OCaml: command line tool

A tool for controlling user-space statically-defined tracing probes for OCaml.

ppx_css: A ppx that takes in css strings and produces a module for accessing the unique names defined within

A ppx that takes in css strings and produces a module for accessing the unique names defined within.

ppx_disable_unused_warnings: Expands [@disable_unused_warnings] into [@warning “-20-26-32-33-34-35-36-37-38-39-60-66-67”]

Part of the Jane Street’s PPX rewriters collection.

ppx_ignore_instrumentation: Ignore Jane Street specific instrumentation extensions

Ignore Jane Street specific instrumentation extensions from internal PPXs or compiler
features not yet upstreamed.

ppx_jsonaf_conv: [@@deriving] plugin to generate Jsonaf conversion functions

Part of the Jane Street’s PPX rewriters collection.

ppx_typed_fields: GADT-based field accessors and utilities

Part of the Jane Street’s PPX rewriters collection.

ppx_type_directed_value: Get [@@deriving]-style generation of type-directed values without writing a ppx

Ppx_type_directed_value is a ppx that does [@@deriving]-style
generation of type-directed values based on user-provided modules. The
user-provided modules tell ppx_type_directed_value how to compose
type-directed values (for example, combine type-directed values of the
fields of a record to form a type-directed value for the record

This allows a wide variety of PPXs such as ppx_sexp_conv,
ppx_compare, ppx_enumerate, etc. to be implemented with
ppx_type_directed_value, but with some runtime cost.

This PPX currently supports deriving type-directed values for records, ordinary
& polymorphic variants and tuples. It also supports custom user-defined attributes
on record and variant fields.

profunctor: A library providing a signature for simple profunctors and traversal of a record

This is a very small library which provides a signature for profunctor types
and operations which can be used to traverse a record with them based on
record_builder and the =ppx_fields= syntax extension.

redis-async: Redis client for Async applications

A client library for Redis versions 6 and higher.

Provides a strongly-typed API with transparent (de)serialization for application-defined

Supports client tracking and internally uses the RESP3 protocol.

sexp_diff: Code for computing the diff of two sexps

The code behind the [diff] subcommand of the Jane Street’s [sexp]
command line tool.

sexp_grammar: Sexp grammar helpers

Helpers for manipulating [Sexplib.Sexp_grammar] values.

sexp_string_quickcheck: Quickcheck helpers for strings parsing to sexps

This library provides quickcheck generators, helpers, and shrinkers for
quickcheck-based tests that wish to exercise the concrete syntax of sexps,
including escape sequences and comments.

tracing: Tracing library

Utilities for creating and parsing traces in Fuchsia Trace Format.

username_kernel: An identifier for a user

A string representation for a user, typically a UNIX username