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
release.
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
end
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
circuit.
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.
Experimental.
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
itself).
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
types.
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