OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of July 14 to 21, 2020.
Table of Contents
Dune-release: version 1.4.0 released
Sonja Heinze announced
This post is about dune-release, a tool that helps
users release their packages to Opam in a fast and organized manner. You can install it via opam
install dune-release
.
On behalf of the dune-release team at Tarides, I'm happy to announce the new dune-release 1.4.0 release. The release includes two new subcommands described below and a variety of bug fixes and user experience improvements. In particular, we've put some work into improving the error handling and reporting.
One of the new subcommands is dune-release config
, which inspects and edits dune-release's global
configuration, such as git related, opam related and github related data. For example, if you insert a
typo when being asked for your github id during your first release with dune-release, you can correct
it comfortably with that new subcommand.
The other new subcommand is dune-release delegate-info
, which helps users with an alternative release
workflow to integrate dune-release into it: imagine you want to use dune-release only for a couple of
things, such as tagging the distribution and creating the distribution tarball and the documentation.
In that case, now you can integrate the work done by dune-release into your individual release workflow
by accessing the path to the created tarball etc via dune-release delegate-info
. It forms part of the
broader change in progress described in the following
post: https://discuss.ocaml.org/t/replacing-dune-release-delegates/4767
Using AF_XDP sockets for high-performance packet processing in OCaml
suttonshire announced
I just wanted to share a fun result from a project I've been hacking on. ocaml-xsk is a binding to AF_XDP interface of libbpf.
AF_XDP is an address family in Linux for high-performance packet processing. With an AF_XDP socket a packet bypasses most of the kernel networking stack and is passed directly to userspace program. Depending on the configuration packets can be passed from the NIC without any data copies on either Rx or Tx. If you're interested in this kind of stuff here are a couple very useful resources:
- https://github.com/torvalds/linux/blob/master/Documentation/networking/af_xdp.rst
- https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP
The cool part is that without installing large dependencies like DPDK you can get packets into your program basically as fast as your NIC can provide them! It turns out this is true even if your program is written in OCaml. Using ocaml-xsk I could receive or transmit 64 byte UDP packets at 14.8M packets per second. This is the limit for a 10Gb/s NIC.
I'm still trying to figure out the best interface for AF_XDP. There are several resources to manage, and simple receive and transmit operations actually require a few steps. But it's encouraging know OCaml doesn't get in the way of packet throughput.
Ubase 0.03
sanette announced
I'm happy to announce the release of ubase, a tiny library whose only purpose is to remove diacritics (accents, etc.) from utf8-encoded strings using the latin alphabet.
It was created after the discussion: https://discuss.ocaml.org/t/simplify-roman-utf8/4398.
It's now available from opam
:
opam install ubase
This also installs an executable that you may use in a shell, for instance:
$ ubase "et grønt træ" et gront trae $ ubase Anh xin lỗi các em bé vì đã đề tặng cuốn sách này cho một ông người lớn. Anh xin loi cac em be vi da de tang cuon sach nay cho mot ong nguoi lon.
More info here.
clangml 4.2.0: OCaml bindings for Clang API (for C and C++ parsing)
Thierry Martinez announced
We are happy to announce the new clangml 4.2.0 release. Clangml provides bindings for all versions of Clang, from 3.4 to the not yet released 10.0.1.
The library can be installed via opam: opam install clangml
The documentation is online: https://memcad.gitlabpages.inria.fr/clangml/
This new release improves C++ support, including C++20 specific constructs.
All Clang C/C++ attributes should now be supported. You may have a look to the interface of the new
auto-generated module
Attributes
.
There is now a lazy version of the AST (Clang.Lazy.Ast
): this is useful to explore large ASTs
efficiently (note that Clang parsing itself can still be slow; the lazy part only concerns the
conversion into the Clang.Lazy.Ast
datatypes).
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.