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, 22 Jun 2021 11:04:51 +0200	[thread overview]
Message-ID: <> (raw)

[-- Attachment #1: Type: text/plain, Size: 17154 bytes --]


Here is the latest OCaml Weekly News, for the week of June 15 to 22,

Table of Contents

First releases of dirsp-exchange: auditable variant of Signal Protocol and ProScript-to-OCaml translator
Job offer: 3 year research engineer in static analysis of OCaml programs at Inria Rennes
IRC channels available on
Set up OCaml 2.0.0-beta
First release of Jsonxt - a set of JSON parsers and writers
mula 0.1.0, ML's radishal Universal Levenshtein Automata library
New release of mlcuddidl, the OCaml interface to the CUDD BDD library
first release of orf: OCaml Random Forests

First releases of dirsp-exchange: auditable variant of Signal Protocol and ProScript-to-OCaml translator


jbeckford announced

  I'm pleased to announce the first release of [dirsp-exchange],
  available today from the Opam repositories.

  The intent of the *[dirsp]* libraries is to provide software engineers
  with auditable source code that has some level of safety assurance
  (typically proofs) from security researchers.

  The first libraries are:

  • dirsp-exchange-kbb2017 0.1.0 - The KBB2017 protocol for securing a
    two-party conversation. Similar to Signal Protocol v3 and Olm
    Cryptographic Ratchet.
  • dirsp-ps2ocaml 0.1.0 - A ProScript to OCaml translator. ProScript is
    an executable subset of JavaScript that can be formally verified.

  and a couple more supporting libraries.

  `dirsp-exchange-kbb2017' has a build process that generates its own
  OCaml code using `dirsp-ps2ocaml' on formally verified ProScript
  source code.

  The canonical example for `dirsp-exchange-kbb2017' is:

  │ module P       = Dirsp_proscript_mirage.Make()
  │ module ED25519 = P.Crypto.ED25519
  │ module K       = Dirsp_exchange_kbb2017.Make(P)
  │ module U       = K.UTIL
  │ (* Alice sends a message to Bob *)
  │ let aliceSessionWithBob = T.newSession (* ... supply some keys you create with ED25519 and U ... *) ;;
  │ let aliceToBobSendOutput = T.send
  │   aliceIdentityKey
  │   aliceSessionWithBob
  │   (P.of_string "Hi Bob!")
  │ (* Now you can send the output "aliceToBobSendOutput" from Alice to Bob.
  │    Let's switch to Bob's computer. He gets notified of a new message using a notification library of
  │ your choosing, and then does ...  *)
  │ let bobSessionWithAlice = T.newSession (* ... supply some keys ... *);;
  │ let bobFromAliceReceiveOutput = T.recv
  │   bobIdentityKey
  │   bobSignedPreKey
  │   bobSessionWithAlice
  │   theEncryptedMessageBobReceivedFromAlice
  │ assert (bobFromAliceReceiveOutput.output.valid)
  │ Format.printf "Bob just received a new message: %s\n"
  │   (bobFromAliceReceiveOutput.plaintext |> P.to_bytes |> Bytes.to_string)

  These are early releases, especially `dirsp-ps2ocaml'.

  Online docs are at <>

  Feedback, contributions and downloads are very welcome!

[dirsp-exchange] <>

Job offer: 3 year research engineer in static analysis of OCaml programs at Inria Rennes


Benoit Montagu announced

  as part of a project between Inria and Nomadic Labs, we are offering a
  3 year research engineer position, to work on static analysis for
  OCaml programs.  The position will start in October in the Celtique
  Inria research team, in the vibrant city of Rennes, France.  If you
  are a talented OCaml programmer, if you are interested in static
  analysis, or if you simply want to know more about this project,
  please contact me!

  The detailed job description is here:

  Please feel free to transfer this announce to people that you think
  could be interested.

IRC channels available on


Deep in this thread, Romain Calascibetta announced

  Just to let you know that I spent a time to re-implement the IRC
  protocol in OCaml and to deploy a simple MirageOS as a logger to save
  discussions into a Git repository. The bot is currently deployed, the
  explanation is available here:
  <> And used for

  It's a nice example about MirageOS/unikernel and I may deploy one to
  save as whitequark already does with her bot.

Set up OCaml 2.0.0-beta


Sora Morimoto announced

  Hopefully, this will be the last release before stable 2.0.0. This
  release allows you to add multiple custom repositories, which enables
  testing with multicore and beta repository.

  │ - name: Use Multicore OCaml
  │   uses: ocaml/setup-ocaml@v2
  │   with:
  │     ocaml-compiler: ocaml-variants.4.12.0+domains+effects
  │     opam-repositories: |
  │       multicore:
  │       default:

First release of Jsonxt - a set of JSON parsers and writers


Stephen Bleazard announced

  Jsonxt provides a number of JSON parsers and writers for RFC 8259
  compliant JSON as well as non-standard extensions supported by Yojson.
  Features include
  • RFC 8259 compliant when in strict and basic mode
  • Performance focused especially for files and strings
  • Support for standard and extended JSON tree types:
    • Strict follows a strict interpretation of RFC 8259 with all
      numbers represented as floats.
    • Basic extends the strict type to include convenience types while
      maintaining RFC compliance.  This is compatible with Yojson's
      Basic type
    • Extended adds additional non-standard types including tuples and
      variants and is not RFC compliant. This is compatible with
      Yojson's Safe type
  • A number of different parsers including
    • A standard JSON tree parser for various sources including string,
      file and channel
    • A Stream parser that returns a stream of raw JSON tokens.
    • A monad based parser compatible with async
  • Writers including
    • File and string writers
    • A monad based writer that is compatible with async
    • A stream writer that converts a stream of JSON tokens
  • Support for streaming JSON via the [Stream] module
  • Standard interfaces including Yojson compatibility
  • Support for `ppx_deriving_yojson' and `ppx_yojson_conv' via Yojson

  The package is available via opam, with documentation on [].
  The source can be found at [github/jsonxt]

[Stream] <>


[github/jsonxt] <>

mula 0.1.0, ML's radishal Universal Levenshtein Automata library


Ifaz Kabir announced

  I'm happy to announce the release of my library `mula'. The package
  uses Universal Levenshtein Automata (ULA) to not only check if a word
  is within a certain edit distance of another, but to also output what
  the edit distance is! It uses the automata themselves to calculate
  edit distances. A fun use case for this is that we can feed a set of
  words to the automaton and immediately rank the words by their edit

  `Mula' supports both the standard Levenshtein edit distance as well as
  the Demarau-Levenshtein distance which counts transpositions of two
  adjacent characters as a single edit. I also support getting live
  error counts, so you can feed part of a string into an automaton, and
  get the minimum number of errors that have occurred so far.

  I currently have matching working using non-deterministic ULA, but I
  have partially started the work toward the deterministic versions. It
  should be possible to pre-compute the DFAs for up to edit distance 3
  and pack it with the library, never needing to be recomputed because
  the Universal Automata are independent of the input strings. But the
  non-deterministic automata support very large edit distances:
  (Sys.int_size - 1)/2, so they have value on their own.

  This library came about from a desire to add a "did you mean" feature
  to a toy compiler, but not wanting to write the kind of dynamic
  programming code that you can find in the OCaml compiler [1] or
  merlin/spelll [2,3].

  You can find the library [here] and the documentation [here].  It's
  not on `opam' yet, but I have submitted a [pull request].

  Happy OCamling!

  1. Edit distance in the OCaml
     compiler. <>.
  2. Edit distance in
     merlin. <>
  3. Edit distance in
     spelll. <>

[here] <>

[here] <>

[pull request] <>

Ifaz Kabir then added

Some details:

  I followed the paper by Touzet [1] as much as possible. If you take a
  look at the code, you'll see a a lot of +1's for 1-indexing. This was
  to keep the implementation as close to the paper as possible! (If you
  do want to check the implementation against the paper, note that the
  paper has a typo in Definition 2). For the Demarau-Levenshtein
  automaton, I adapted Figure 9 from Mitankin's thesis [2]. I'm
  convinced that my adaptation works, but my adaptation of Touzet's
  subsumption relation for Demarau-Levenshtein might be slightly
  sub-optimal. If you have question about the adaptation, feel free to

  `mula' does not completely replace c-cube's `spelll' package. In
  particular I don't support any indexs, etc. But there are some
  interesting differences in the automata they use. (`w' stands for the
  base word here)
  1. The `spelll' package creates the Levenshtein Automaton for a single
     string/word (LA_w), `mula' uses Universal Levenshtein Automata
  2. `Spelll' computes a DFA from a non-deterministic automaton that
     uses eplison transitions. ULA do not have epsilon transitions, but
     for transitions it looks ahead into the base word `w'. Additionally
     the NFA's states/transitions are computable on the fly, so there is
     no need to store the NFA in memory.
  3. `Spelll''s automata transitions using characters. `mula' computes a
     bitvector from an input character to transition from states to
     states. (Computing the bitvector is where the look ahead comes in).
  4. `Spelll''s automata return `true~/~false', and uses a separate
     function to calculate edit distances. `Mula' uses the automaton
     itself to calculate edit distances, the outputs have type `int
     option'. (LA_w can be modified to support this though!)

  1. On the Levenshtein Automaton and the Size of the Neighborhood of a
     Word. Hélène Touzet
  2. Universal Levenstein Automata: Building and Properties. Petar
     Mitankin. <>

New release of mlcuddidl, the OCaml interface to the CUDD BDD library


nberth announced

  I'm pleased to write this first release announcement for the
  [mlcuddidl] package.

  These bindings to the CUDD BDD library were initially written by
  Bertrand Jeannet and have been around as an OPAM package for quite
  some time now.  The source code is now hosted on [framagit].

  This release of version 3.0.7 mostly ports the package to OCaml
  versions ≥ 4.10.

[mlcuddidl] <>

[framagit] <>

first release of orf: OCaml Random Forests


UnixJunkie announced

  I finished implementing a classifier and regressor using Random
  Forests (seminal paper:


  Some caveats:
  • this is somewhat slow; especially the classifier (and I don’t know
    so much how to accelerate it; probably two orders of magnitude
    slower than sklearn).
  • this is not super generic (int IntMap sparse features only; i.e. a
    sparse vector of integers represents a sample).

  The package is now available in opam (opam install orf).

  Two interfaces are exposed:

  RFC (for classification)

  RFR (for regression)

  The test file shows some usage examples:

  If you want to help, I tried to flag a few things for the near future:

  If you use it and if it is useful to you, I would be happy to know.


  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 #2: Type: text/html, Size: 31402 bytes --]

             reply	other threads:[~2021-06-22  9:05 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-22  9:04 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-29  7:42 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-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).