Previous week Up Next week


Here is the latest OCaml Weekly News, for the week of May 01 to 08, 2018.

  1. Threat research engineer job, Endgame, US
  2. Zmq 5.0.0
  3. PPX and reflection
  4. SandDB: A simple immutable database for the masses
  5. Release 2.8.5 of Caph, a functional/dataflow language for programming FPGAs
  6. [URGENT] To all macOS/BSD opam users: critical problem with camlp5 7.03
  7. first release of phashtbl

Threat research engineer job, Endgame, US


Hezekiah Carty announced:
Our research team at Endgame has a position open for a threat research engineer
(summary below). We have offices in Arlington, VA and San Francisco, CA.
Distributed US applicants are welcome too! Please see the posting for more

Language-wise, OCaml/Reason makes up most of the core code you'll be working on.
Python makes up most of the rest, in particular taking advantage of the machine
learning and natural language processing goodies that ecosystem provides. All or
almost all tools developed are internally focused, supporting our security
research. For those so-inclined, there are lots of opportunities for presenting
at and attending conferences, presenting work in blog posts, contributing to
open source software projects and other community engagement.

Please feel free to reach out to me if you have any questions. I'm available on
the OCaml or Reason Discord servers or by email (my username here at

Summary from the official job listing:

Endgame is seeking a Threat Research Engineer in our Research and Development
team. Our threat research engineering work is experimental as well as applied,
with a focus on collecting and processing massive quantities of data on a
continual basis, underpinning and enabling Endgame’s advanced computer security
research. You develop and maintain our data ingest and processing pipeline,
comprised of commercial, open source and internally developed tools. You
identify and implement improvements to our internal services, infrastructure,
data sources, data collection and analysis tools in close collaboration with
researchers and other Endgame teams. You also work to automate the creation and
evaluation of our malware classification and other machine learning models. In
short, do what’s required to keep the research flowing.

Zmq 5.0.0


Anders Fugmann announced:
I'm happy to announce the release of Zmq 5.0.0.

Zmq provides ocaml binding for ZeroMQ[1] v. 4.x

Most notable changes in this release includes:

* Import zmq-async and zmq-lwt. The old bindings async-zmq and lwt-zmq are now

* Refactor zmq-async and zmq-lwt to be supported out of a single code base. This
regularizes the interface, and dramatically improves speed and stability.

* Add support for reading & writing bigarrays. This interfaces allows the user
to reduce needless copying of packets sent by the bindings.

* Change build system to use jbuilder instead of oasis. This also adds proper
support for pkg-config installed zmq.

* Rename module ZMQ to Zmq. This change breaks backward compatibility, and users
will need to replace references to module ZMQ with Zmq or add a module alias.

The package is available though opam or can be compiled from source from the
project's gibhub page[2]

Many thanks to  H. Carty, R. Grinberg, and M. Kubica for helping with this release.


PPX and reflection


progman asked:
Can ppx be used to capture a ocaml type inferred for an expression? (typedtree)
I wish to transform what I expect to be a concrete type (no variables) to a simpler
representation for injection into code.
or is the best that can be done is transforming type declarations directly?
Guillaume Bury replied:
Afaik, ppx are applied on the parsetreee, **before** typechecking, so while it
would be technically possible in a ppx to invoke the typechecker, apply some
transformation to it, then transform it back to a parsetree, it seems very

Maybe with a more detailed explanation of what you want to do, it'd be easier to
suggest another way ?
progman then said:
there is a typedtree hook in the default_mapper which I believe would have given
the necessary type information but I think the manual is saying the ocaml team
are keeping it abstract to prevent meddling.

I wanted to capture the type of some use of a specially identified expression
(say, Reflect.typeof: 'a -> 'a Reflect.t as applied to some value) for
transformation to a simpler constructor type representing a concrete type.
this would then be included as an argument in a re-written parsetree of a
function application. By that means I would have some dynamic typing information
for use in database querying.
Philippe suggested:
I think Jun Furuse has done quite some work in this direction. How about
[typpx]( or
Charles then added:
I've also been working on a typing ppx
[here]( It does some pretty
strange things but I'm definitely happy to talk about / learn more about typing
Kakadu said and Charles replied:
> Your repo terribly lacks the README describing what is this repo about...

This is intentional — the code isn't at all ready for release. I'm just hoping
to show another example of a typing ppx if people are interested, as it seems
are not many. The purpose of the code is to do some extra parsing at compile
time to enable literals for any data, among other things, working of off [this
research]( Typing is used to
resolve a name so you can 'import' a literal notation exactly as you would in

SandDB: A simple immutable database for the masses


Tóth Róbert announced:
Hello everyone! I'm proud to announce my first opam package:

SandDB is an simple immutable database that I made, because I couldn't really
find a dead simple database (like TinyDB) for Ocaml and because it's fun to
reinvent the wheel. :smiley:

SandDB is exciting, because:
 * Simple: The code base is small and easy to get started with. The basic
building block of the database is also pretty simple, which is the record. A
record consist only two element: uuid as id and your custome data type.
 * Flexible: You can define your own data structure with atd.
 * Immutable:

Please be patient why I fill out this post. lol :smiley:

Release 2.8.5 of Caph, a functional/dataflow language for programming FPGAs


Jocelyn Sérot announced:
It is my pleasure to announce the latest release (2.8.5) of CAPH, a
domain-specific language relying on the dataflow model of computation for
describing and implementing stream-processing applications. CAPH can simulate
dataflow programs, generate cycle-accurate SystemC and synthetizable VHDL code
for implementation on reconfigurable hardware such as FPGAs.

CAPH has a strong functional inspiration : dataflow networks are described using
a purely functional, higher-order formalism and the definition of actor behavior
relies on a pattern matching similar to that used for defining functions in
functional languages. CAPH is also equipped with a rich type system with
sized-integers, booleans, floats, fully polymorphic algebraic data types and
dependent types.

And, of course, CAPH is entirely written in OCaml ;)

Source code and pre-compiled binaries for Mac OS and Windows can be downloaded
from the web site ( or via Github

[URGENT] To all macOS/BSD opam users: critical problem with camlp5 7.03


Louis Gesbert announced:
!! opam users on macOS or BSD systems are at risk of losing their files
!! if they didn't update since Feb. 18th.

    Full details, including advice for restoring your system to safety, are
    available at

A problem was identified in February with the camlp5 7.03 package when
installed via opam. Under certain circumstances, it is possible for the
package removal instructions to execute `rm -rf /` with potentially
devastating consequences for your files if your rm command is non-GNU (and so
doesn’t support the --preserve-root default option) which includes macOS and
other BSDs.

Initially, this was seen non-fatally on GNU/Linux systems and it was believed
to have been successfully patched on 18 Feb with only a 48 hour window for
problems for anyone who updated opam between 16 and 18 Feb and then hadn’t
updated since, however we failed to take upgrading the system
compiler into account. If you haven’t updated opam since 18 Feb 2018, have
camlp5 installed in your system switch and upgrade your system compiler to
OCaml 4.06.1 using your OS package manager, then your system is at risk from
this issue.

Most regrettably, several users have been hit by this issue. This issue
affects opam 1.x only - if you have been testing the opam 2 release candidate
then your system is not affected (but we still recommend you run opam update

We are trying to reach as widely as possible in the hope that everyone will be
safe from this issue. It is taken seriously, and sandboxing support for Linux
and MacOS was added to the upcoming opam 2 Release Candidate 2, ensuring this
kind of issue won't happen again in the future.

first release of phashtbl


UnixJunkie announced:
Phashtbl is a minimalist persistent hashtbl OCaml library.

It was just accepted into the opam-repository.




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.

Alan Schmitt