caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alan Schmitt <>
To: "lwn" <>, "cwn"  <>,
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 29 Mar 2022 09:42:58 +0200	[thread overview]
Message-ID: <> (raw)

[-- Attachment #1.1: Type: text/plain, Size: 25400 bytes --]


Here is the latest OCaml Weekly News, for the week of March 22 to 29,

Table of Contents

pyml_bindgen: a CLI app to generate Python bindings directly from OCaml value specifications
Tarides is hiring!
For Diversity and the OCaml Community: Outreachy Summer 2022
Caqti 1.8.0 and related news
First release of prbnmcn-dagger
MirageOS 4.0
OCaml 4.14.0 is released
ocaml-in-python.0.1.0: Effortless Python bindings for OCaml modules

pyml_bindgen: a CLI app to generate Python bindings directly from OCaml value specifications


Ryan Moore announced

New releases

  Version 0.3.0 and 0.3.1 are now available on [GitHub].  0.3.0 has been
  merged into opam, and a PR for 0.3.1 has been opened.  The [change
  log] has more details about the changes.

[GitHub] <>

[change log]

Binding tuples

  You can now bind tuples directly.  Here's a Python function that takes
  two lists of points (where each "point" is a tuple like `(x, y)') and
  adds them together

  │ def add(points1, points2):
  │     return [(x1 + y1, x2 + y2) for (x1, x2), (y1, y2) in zip(points1, points2)]

  And you could bind it using tuples from the OCaml side as well.

  │ val add : points1:(int * int) list -> points2:(int * int) list -> unit -> (int * int) list

  Note there are some restrictions regarding tuples, which you can read
  about [here], [here], or [here].

[here] <>




  You can use attributes on value specifications.  Currently the only
  one supported is `py_fun_name', which allows you to decouple the
  Python method name and the generated OCaml function name.

  As an example, take the following Python function, which adds to

  │ def add(x, y):
  │     return x + y

  You could bind multiple OCaml functions to this single function now.

  │ val add_int : x:int -> y:int -> unit -> int
  │ [@@py_fun_name add]
  │ val add_float : x:float -> y:float -> unit -> float
  │ [@@py_fun_name add]
  │ val add_string : x:string -> y:string -> unit -> string
  │ [@@py_fun_name add]

Python magic methods

  This is also nice for binding Python [magic methods]. For example, you
  don't have to use `__init__' as the name of the OCaml function you use
  to make instances of a Python class.  You can bind it to a more
  natural name like `create' or `make'.

  │ val create : name:string -> age:int -> unit -> t
  │ [@@py_fun_name __init__]

[magic methods]

Using Pytypes.pyobject directly

  Sometimes you may not want to bother converting Python types to normal
  OCaml types at all.  You can do that now in value specifications by
  using the `Pytypes.pyobject' and `Py.Object.t' types directly.

Fewer dependencies

  `re' is now used instead of `re2', which drops the number of
  dependencies that need to be installed by about half.  Additionally,
  `core', `core_bench', and `bisect_ppx' don't need to be installed if
  you want to install `pyml_bindgen' directly from the git repository,
  which greatly cuts the required dependencies in this case.

  Thanks again to UnixJunkie for spurring many of these updates!

Tarides is hiring!

  Archive: <>

Thomas Gazagnaire announced

  Following the recent announcement about Tarides (joining forces with
  [OCaml Labs] and [Segfault System]), we are now looking to expand our
  team with experienced software engineers, compassionate team leads and
  experts in software consulting services. Our ambition is to bring
  OCaml to a vast set of new developers and industries. We want to make
  developers more productive by spending less time on fixing bugs and
  more on writing new features. And we want the software industry to
  build more robust and performant systems that can last for decades.

  We are looking for:

  • Experienced [Software Engineer(s)] to take part in the development
    of Irmin. You will be part of the team that designs, builds and
    ships Irmin libraries and applications to our community and
  • [Team Lead(s)] who cares about motivating their team members,
    supporting their growth and development and successfully delivering
    the team's objectives on time.
  • A [Head of Consulting Services] to diversify our technical teams and
    commercial services portfolio. You'll be the first hire for this
    brand new department and will have the opportunity to help us build
    our services structure from scratch, including our strategy,
    processes, tools, and team.

  We are always looking for great OCaml enthusiasts to join our team, so
  even if these job descriptions do not fit your profile precisely, you
  are welcome to send us [a spontaneous application]!

[OCaml Labs]

[Segfault System]

[Software Engineer(s)]

[Team Lead(s)] <>

[Head of Consulting Services]

[a spontaneous application]

For Diversity and the OCaml Community: Outreachy Summer 2022


Deep in this thread, Aya announced

  @pitag and I have resubmitted the PPX derivers project for this Summer
  2022 round: *Expand OCaml's library of standard derivers*! This is the
  same project I was the intern for this past Winter 2022 round, where
  the goal is to build up a [standard derivers] library, like
  `ppx_deriving', using the updated `ppxlib' API.

  I'm excited to be supporting @pitag with mentoring, and for the
  opportunity to stay involved now that my internship has ended :smiley:

[standard derivers] <>

Caqti 1.8.0 and related news


"Petter A. Urkedal announced

  I am happy to announce the second release of [Caqti] this year. The
  reason for the quick succession is partly an adjustment to the [new
  API for request construction] and partly that [matchable error
  conditions] did not make it into the previous release.  You can see
  the full release notes below.

  I would also like to thank [OCaml Software Foundation] for sponsoring
  my efforts on the Caqti project this year, also including most of the
  work that went into the previous release.

  One [feature in progress] is a new driver based on the pure-OCaml
  [pgx] which should make it possible, with some additional changes to
  the way drivers are loaded, to target MirageOS. I am note sure if this
  can be done in a minor release or will require a Caqti 2 branch.

[Caqti] <>

[new API for request construction]

[matchable error conditions]

[OCaml Software Foundation] <>

[feature in progress]

[pgx] <>

Release Notes

  New features:

  • A matchable representation of common causes of errors on the
    database side is now available, with limitations.  It focuses on
    conditions which seem most likely useful to handle.  At the moment
    we lack extended error codes from SQLite3 needed to make the cause
    fully precise.

  • Expose the underlying error details from database client libraries.
    This is meant to be use as a last resort, and requires directly
    linking with the relevant drivers.

  • A second set of request construction operators `->.', `->?', `->!',
    and `->*' were introduced after experience with converting existing
    code.  Given the parameter and result type they return a function
    which constructs a request directly from a query string.  Avoiding
    the need to compose with `@:-' simplifies local opens and usage with
    `' etc.

  • Environment variables are now expanded in the debug log when using
    the new request constructors introduced in 1.7.0.

  • A new `?tweaks_version' connection parameter has been added to
    control when the client is ready to adapt to changes in database
    session parameters or other adjustments of the interaction with
    specific database systems. [[More details available in the

  • Enable foreign key constraint checks for SQLite3 starting at tweaks
    version 1.7.


  • Fixed debug logging to pass the correct driver info to the query
    callback instead of a dummy driver info which would cause a failure
    if unsupported.


  • The `-->' operator was renamed to `-->!', with a deprecated alias,
    for consistency with the new `->!' operator.

  • The old convenience interface for creating requests has been
    deprecated in favour of the new infix operators and the new query
    template parser.

  • Documented-only deprecations of `Caqti_sql_io', `Caqti_lwt_sql_io',
    and `Caqti_async_sql_io' have been annotated.

[More details available in the documentation.]

First release of prbnmcn-dagger


Igarnier announced

  I'm proud to announce the release of version 0.0.2 of

  This version adds Sequential Monte-Carlo, a.k.a. [particle
  filters]-based inference to the library.

  Here's the full changelog:
  • Dependency: `prbnmcn-stats.0.0.3' -> `prbnmcn-stats.0.0.4'
  • Add beta distribution to Gsl samplers
  • Refactor Cps monad
  • Add SMC inference
  • Simplify handler type, modularize effect definitions away from
  • Fix typo: bernouilli -> bernoulli (report by @nilsbecker)

  I also wrote the following article: [Applying Sequential Monte-Carlo
  to time series forecasting] It contains some use cases for the
  library, I hope some find it fun :)

  To conclude this post, and as a partial answer to @gasche 's
  [question] in an older thread, I believe that unlike some other
  inference techniques, single-shot continuations are enough to
  implement SMC. Without getting into the details, the implementation is
  very reminiscent of that of lightweight threading libraries. I look
  forward to experiment with a fibre-based implementation!

[prbnmcn-dagger] <>

[particle filters] <>

[Applying Sequential Monte-Carlo to time series forecasting]


MirageOS 4.0

  Archive: <>

Thomas Gazagnaire announced

  *On behalf of the MirageOS team, I am delighted to announce the
  release of MirageOS 4.0.0!* I'd like to send special thanks to
  @dinosaure and @Lortex who drove that release forward for multiple

  Since the first release of 2013, MirageOS has made steady progress
  toward deploying a self-managed internet infrastructure. The project’s
  initial aim was to self-host as many services as possible aimed at
  empowering internet users to securely deploy infrastructure to own
  their data and take back control of their privacy. MirageOS can
  securely deploy [static website hosting] with “Let’s Encrypt”
  certificate provisioning and a [secure SMTPstack] with security
  extensions. MirageOS can also deploy decentralised communication
  infrastructure like [Matrix], [OpenVPN servers], and [TLS tunnels] to
  ensure data privacy or [DNS(SEC) servers] for better authentication.

  The protocol ecosystem now contains [hundreds of libraries] and
  services millions of daily users. Over these years, major commercial
  users have joined the projects. They rely on MirageOS libraries to
  keep their products secure. For instance, the MirageOS networking code
  powers [Docker Desktop’s VPNKit], which serves the traffic of millions
  of containers daily. [Citrix Hypervisor] uses MirageOS to interact
  with Xen, the hypervisor that powers most of today’s public
  cloud. [Nitrokey] is developing a new hardware security module based
  on MirageOS. [Robur] develops a unikernel orchestration system for
  fleets of MirageOS unikernels. [Tarides] uses MirageOS to improve the
  [Tezos] blockchain, and [Hyper] uses MirageOS to build sensor
  analytics and an automation platform for sustainable agriculture.

  In the coming weeks, our blog will feature in-depth technical content
  for the new features that MirageOS brings, as well as a tour of the
  existing community and commercial users of MirageOS. Please reach out
  if you’d like to tell us about your story.

[static website hosting] <>

[secure SMTPstack] <>

[Matrix] <>

[OpenVPN servers] <>

[TLS tunnels] <>

[DNS(SEC) servers] <>

[hundreds of libraries] <>

[Docker Desktop’s VPNKit]

[Citrix Hypervisor]

[Nitrokey] <>

[Robur] <>

[Tarides] <>

[Tezos] <>

[Hyper] <>

Install MirageOS 4

  The easiest way to install MirageOS 4 is by using the opam version 2.1
  and `ocaml>=4.12.1`. Follow the [installation guide] for more details.

  │ $ opam update
  │ $ opam install 'mirage>4'

  /Note/: if you upgrade from MirageOS 3 you will need to manually clean
  the previous generated files (or call `mirage clean' before
  upgrading). You would also want to read [the full list of API
  changes].  You can see unikernel examples in [mirage/mirage-skeleton],
  [roburio/unikernels] or [tarides/unikernels].

[installation guide] <>

[the full list of API changes] <>

[mirage/mirage-skeleton] <>

[roburio/unikernels] <>

[tarides/unikernels] <>

About MirageOS

  MirageOS is a library operating system that constructs unikernels for
  secure, high-performance, low-energy footprint applications across
  various hypervisor and embedded platforms. It is available as an
  open-source project created and maintained by the [MirageOS Core
  Team]. A unikernel can be customised based on the target architecture
  by picking the relevant MirageOS libraries and compiling them into a
  standalone operating system, which contains strictly the functionality
  necessary for the target. This minimises the unikernel’s footprint,
  increasing the security of the deployed operating system.

  The MirageOS architecture can be divided into operating system
  libraries, typed signatures, and a metaprogramming compiler. The
  operating system libraries implement various functionalities, ranging
  from low-level network card drivers, to full reimplementations of the
  TLS protocol, as well as the Git protocol to store versioned data. A
  set of typed signatures ensures that the OS libraries are consistent
  and work well in conjunction with each other. Most importantly,
  MirageOS is also a metaprogramming compiler that can input OCaml
  source code along with its dependencies, and a deployment target
  description in order to generate an executable unikernel, i.e., a
  specialised binary artefact containing only the code needed to run on
  the target platform. Overall, MirageOS focuses on providing a small,
  well-defined, typed interface with the system components of the target

  Read the full announcement on ['s blog].

[MirageOS Core Team] <>

['s blog] <>

Anil Madhavapeddy then added

  For those curious about what some of the MirageOS libraries _are_,
  there is a raw Yaml list over at [mirage/mirage-repositories] listing
  most of them.  Conversion of this Yaml to HTML for the main
  website would be a welcome contribution! :slight_smile:


OCaml 4.14.0 is released

  Archive: <>

octachron announced

  The OCaml team has the pleasure of celebrating the birthday of
  Alexander Grothendieck by announcing the release of OCaml version

  Some of the highlights in the 4.14.0 release are:

  • Integrated support for "go to definitions" in Merlin.
  • Standard library: new modules `In_channel' and `Out_channel', many
    new functions in Seq module, UTF decoding and validation support for
    strings and bytes.
  • Runtime optimisation: GC prefetching. Benchmarks show a speedup of
    around 20% in GC-heavy programs.
  • Improved error messages in particular for module-level error.
  • Deprecated functions and modules in preparation for OCaml 5.  In
    particular, the Stream and Genlex modules are now deprecated.
  • Type variables can be explicitly introduced in value and variant
    constructor declarations. For instance,
    │ val fold: ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
    │ type showable = Show: 'a * ('a -> string) -> showable
    can now be written as
    │ val fold: 'acc 'elt. ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
    │ type showable = Show: 'a. 'a * ('a -> string) -> showable
  • Tail-call with up to 64 arguments are now guaranteed to be optimized
    for all architectures.
  • Experimental tail modulo cons (TMC) transformation

  The full list of changes can be found in the changelog
  below. (/editor’s note: please follow the archive link for the full

  Those releases are available as OPAM switches, and as a source
  download here:

  • <>
  • <>

ocaml-in-python.0.1.0: Effortless Python bindings for OCaml modules


Thierry Martinez announced

  I am happy to announce the first release of `ocaml-in-python': this is
  a Python package that exposes all OCaml modules as Python libraries,
  generating bindings on the fly. This can be seen as a dual of
  [`pyml_bindgen']: `pyml_bindgen' binds Python libraries in OCaml,
  while `ocaml-in-python' binds OCaml modules in Python.

  It is available from [GitHub] or *via* `opam': `opam install

  Requirements: `OCaml' >= 4.13, `Python' >= 3.7.

  Once installed *via* `opam', the package should be registered in the
  Python environment:

  • either by registering the package with `pip' using the following
    command (requires Python >=3.8):
    │ pip install --editable "`opam var ocaml-in-python:lib`"
  • or by adding the following definition to the environment:
    │ export PYTHONPATH="`opam var share`/python/:$PYTHONPATH"

  Then, we can `import ocaml' in Python and use OCaml modules:
  │ Python 3.10.0 (default, Nov 10 2021, 19:16:14) [GCC 7.5.0] on linux
  │ Type "help", "copyright", "credits" or "license" for more information.
  │ >>> import ocaml
  │ >>> print( x : x + 1), [1, 2, 3]))
  │ [2;3;4]

  We can for instance compile an OCaml module on the fly from Python.
  │ >>> m = ocaml.compile('let hello x = Printf.printf "Hello, %s!\n%!" x')
  │ >>> m.hello('world')
  │ Hello, world!

  And we can require and use packages /via/ `findlib'.
  │ >>> ocaml.require("parmap")
  │ >>> from ocaml import Parmap
  │ >>> print(Parmap.parmap(
  │ ...   (lambda x : x + 1), Parmap.A([1, 2, 3]), ncores=2))
  │ [2;3;4]

  Details about the conversions are given in [`'].

  Happy hacking!


[GitHub] <>



  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

  If you also wish to receive it every week by mail, you may subscribe

  [Alan Schmitt]

[send me a message] <>

[the archive] <>

[RSS feed of the archives] <>

[online] <>

[Alan Schmitt] <>

[-- Attachment #1.2: Type: text/html, Size: 40773 bytes --]

[-- Attachment #2: Type: text/plain, Size: 119 bytes --]

Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'INRIA.

             reply	other threads:[~2022-03-29  7:43 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-29  7:42 Alan Schmitt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-07-26 17:54 Alan Schmitt
2022-07-19  8:58 Alan Schmitt
2022-07-12  7:59 Alan Schmitt
2022-07-05  7:42 Alan Schmitt
2022-06-28  7:37 Alan Schmitt
2022-06-21  8:06 Alan Schmitt
2022-06-14  9:29 Alan Schmitt
2022-06-07 10:15 Alan Schmitt
2022-05-31 12:29 Alan Schmitt
2022-05-24  8:04 Alan Schmitt
2022-05-17  7:12 Alan Schmitt
2022-05-10 12:30 Alan Schmitt
2022-05-03  9:11 Alan Schmitt
2022-04-26  6:44 Alan Schmitt
2022-04-19  5:34 Alan Schmitt
2022-04-12  8:10 Alan Schmitt
2022-04-05 11:50 Alan Schmitt
2022-03-22 13:01 Alan Schmitt
2022-03-15  9:59 Alan Schmitt
2022-03-01 13:54 Alan Schmitt
2022-02-22 12:43 Alan Schmitt
2022-02-08 13:16 Alan Schmitt
2022-02-01 13:00 Alan Schmitt
2022-01-25 12:44 Alan Schmitt
2022-01-11  8:20 Alan Schmitt
2022-01-04  7:56 Alan Schmitt
2021-12-28  8:59 Alan Schmitt
2021-12-21  9:11 Alan Schmitt
2021-12-14 11:02 Alan Schmitt
2021-11-30 10:51 Alan Schmitt
2021-11-16  8:41 Alan Schmitt
2021-11-09 10:08 Alan Schmitt
2021-11-02  8:50 Alan Schmitt
2021-10-19  8:23 Alan Schmitt
2021-09-28  6:37 Alan Schmitt
2021-09-21  9:09 Alan Schmitt
2021-09-07 13:23 Alan Schmitt
2021-08-24 13:44 Alan Schmitt
2021-08-17  6:24 Alan Schmitt
2021-08-10 16:47 Alan Schmitt
2021-07-27  8:54 Alan Schmitt
2021-07-20 12:58 Alan Schmitt
2021-07-06 12:33 Alan Schmitt
2021-06-29 12:24 Alan Schmitt
2021-06-22  9:04 Alan Schmitt
2021-06-01  9:23 Alan Schmitt
2021-05-25  7:30 Alan Schmitt
2021-05-11 14:47 Alan Schmitt
2021-05-04  8:57 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-04-20  9:07 Alan Schmitt
2021-04-06  9:42 Alan Schmitt
2021-03-30 14:55 Alan Schmitt
2021-03-23  9:05 Alan Schmitt
2021-03-16 10:31 Alan Schmitt
2021-03-09 10:58 Alan Schmitt
2021-02-23  9:51 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-12  9:47 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2020-12-29  9:59 Alan Schmitt
2020-12-22  8:48 Alan Schmitt
2020-12-15  9:51 Alan Schmitt
2020-12-01  8:54 Alan Schmitt
2020-11-03 15:15 Alan Schmitt
2020-10-27  8:43 Alan Schmitt
2020-10-20  8:15 Alan Schmitt
2020-10-06  7:22 Alan Schmitt
2020-09-29  7:02 Alan Schmitt
2020-09-22  7:27 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-01  7:55 Alan Schmitt
2020-08-18  7:25 Alan Schmitt
2020-07-28 16:57 Alan Schmitt
2020-07-21 14:42 Alan Schmitt
2020-07-14  9:54 Alan Schmitt
2020-07-07 10:04 Alan Schmitt
2020-06-30  7:00 Alan Schmitt
2020-06-16  8:36 Alan Schmitt
2020-06-09  8:28 Alan Schmitt
2020-05-19  9:52 Alan Schmitt
2020-05-12  7:45 Alan Schmitt
2020-05-05  7:45 Alan Schmitt
2020-04-28 12:44 Alan Schmitt
2020-04-21  8:58 Alan Schmitt
2020-04-14  7:28 Alan Schmitt
2020-04-07  7:51 Alan Schmitt
2020-03-31  9:54 Alan Schmitt
2020-03-24  9:31 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-10 14:28 Alan Schmitt
2020-03-03  8:00 Alan Schmitt
2020-02-25  8:51 Alan Schmitt
2020-02-18  8:18 Alan Schmitt
2020-02-04  8:47 Alan Schmitt
2020-01-28 10:53 Alan Schmitt
2020-01-21 14:08 Alan Schmitt
2020-01-14 14:16 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2019-12-31  9:18 Alan Schmitt
2019-12-17  8:52 Alan Schmitt
2019-12-10  8:21 Alan Schmitt
2019-12-03 15:42 Alan Schmitt
2019-11-26  8:33 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-05  6:55 Alan Schmitt
2019-10-15  7:28 Alan Schmitt
2019-09-03  7:35 Alan Schmitt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).