OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of March 29 to April 05, 2022.
Table of Contents
v0.15 release of Jane Street packages
Arseniy Alekseyev announced
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 package~core_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
EmelleTV Show - 2022
David Sancho announced
I'm creating a post as a header from this season of EmelleTV in 2020. Will use this post to share announcements, new shows, gather feedback and invite you to watch and follow https://www.twitch.tv/emelletv!
For the ones who doesn't know us, It's a streaming show that will happen once per month and will try to interview and talk casually about OCaml, Reason, ReScript and their communities. Inviting interesting engineers and ask silly questions about literally anything.
If can't attend live, we publish the VOD in youtube under https://www.youtube.com/channel/UCvVVfCa7-nzSuCdMKXnNJNQ. You can re-watch some of the 2021 interviews, they were a ton of fun for me.
It's made by myself and @fakenickels.
Feel free to share any feedback, propose any guest or make fun of us ^^
Open source editor for iOS, iPadOS and macOS
Nathan Fallet announced
Just released the app on the Play Store for Android: Play Store
Feel free to give your feedback as well. I tried to make it like the iOS/macOS version. For now, the only missing feature is syntax highlighting, but I'm working on it (I still have a few bugs with it)
The mysterious pointer in the runtime closure representation
Archive: https://discuss.ocaml.org/t/the-mysterious-pointer-in-the-runtime-closure-representation/9560/7
Deep in this thread, Yue Li Picasso announced
Thanks for your replies @silene @zozozo ! Due to project interest I need to understand the runtime value representation. Now I released a little library for displaying runtime values in textual form: OInspect.
Other OCaml News
From the ocamlcore planet blog
Here are links from many OCaml blogs aggregated at OCaml Planet.
Old CWN
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe online.