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, 15 Dec 2020 10:51:47 +0100	[thread overview]
Message-ID: <> (raw)

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


Here is the latest OCaml Weekly News, for the week of December 08 to 15,

Table of Contents

MirageOS 3.10 released
Exception vs Result
Release: scikit-learn, Numpy, Scipy for OCaml, 0.3.1
OCaml 4.10.2
BAP 2.2.0 Release
Liquidshop 1.0, Jan. 17th and 18th, 2021
Opium 0.20.0
Set up OCaml 1.1.5
Other OCaml News

MirageOS 3.10 released


Hannes Mehnert announced

  we're pleased to announce MirageOS 3.10:

  IPv6 and dual (IPv4 and IPv6) stack support

  Since a long time, IPv6 code was around in our TCP/IP stack (thanks to
  @nojb who developed it in 2014).  Some months ago, @hannesm and
  @MagnusS got excited to use it. After we managed to fix some bugs and
  add some test cases, and writing more code to setup IPv6-only and dual
  stacks, we are eager to share this support for MirageOS in a released
  version. We expect there to be bugs lingering around, but duplicate
  address detection (neighbour solicitation and advertisements) has been
  implemented, and (unless "–accept-router-advertisement=false") router
  advertisements are decoded and used to configure the IPv6 part of the
  stack. Configuring a static IPv6 address is also possible (with

  While at it, we unified the boot arguments between the different
  targets: namely, on Unix (when using the socket stack), you can now
  pass "–ipv4=" to the same effect as the direct stack: only
  listen on (the subnet mask is ignored for the Unix socket

  A dual stack unikernel has "–ipv4-only=BOOL" and "–ipv6-only=BOOL"
  parameters, so a unikernel binary could support both Internet Protocol
  versions, while the operator can decide which protocol version to
  use. I.e. now there are both development-time (stackv4 vs stackv6 vs
  stackv4v6) choices, as well as the run-time choice (via boot

  I'm keen to remove the stackv4 & stackv6 in future versions, and
  always develop with dual stack (leaving it to configuration & startup
  time to decide whether to enable ipv4 and ipv6).

  Please also note that the default IPv4 network configuration no longer
  uses as default gateway (since there was no way to unset the
  default gateway <>).

  For unikernel developers, there are some API changes in the Mirage
  • New "v4v6" types for IP protocols and stacks
  • The ipv6_config record was adjusted in the same fashion as the
    ipv4_config type: it is now a record of a network (V6.Prefix.t) and
    gateway (V6.t option)

  Some parts of the Mirage_key module were unified as well:
  • Arp.ip_address is available (for a dual Ipaddr.t)
  • Arg.ipv6_address replaces Arg.ipv6 (for an Ipaddr.V6.t)
  • Arg.ipv6 replaces Arg.ipv6_prefix (for a Ipaddr.V6.Prefix.t)
  • and V6.gateway are available, mirroring the V4 submodule

  If you're ready to experiment with the dual stack: below is a diff for
  our basic network example (from mirage-skeleton/device-usage/network)
  replacing IPv4 with a dual stack, and the tlstunnel unikernel commit
  changed tlstunnel from IPv4 stack to dual stack.

  │ diff --git a/device-usage/network/ b/device-usage/network/
  │ index c425edb..eabc9d6 100644
  │ --- a/device-usage/network/
  │ +++ b/device-usage/network/
  │ @@ -4,9 +4,9 @@ let port =
  │    let doc = ~doc:"The TCP port on which to listen for
  │ incoming connections." ["port"] in
  │    Key.(create "port" Arg.(opt int 8080 doc))
  │ -let main = foreign ~keys:[Key.abstract port] "Unikernel.Main" (stackv4
  │ @-> job)
  │ +let main = foreign ~keys:[Key.abstract port] "Unikernel.Main"
  │ (stackv4v6 @-> job)
  │ -let stack = generic_stackv4 default_network
  │ +let stack = generic_stackv4v6 default_network
  │  let () =
  │    register "network" [
  │ diff --git a/device-usage/network/
  │ b/device-usage/network/
  │ index 5d29111..1bf1228 100644
  │ --- a/device-usage/network/
  │ +++ b/device-usage/network/
  │ @@ -1,19 +1,19 @@
  │  open Lwt.Infix
  │ -module Main (S: Mirage_stack.V4) = struct
  │ +module Main (S: Mirage_stack.V4V6) = struct
  │    let start s =
  │      let port = Key_gen.port () in
  │ -    S.listen_tcpv4 s ~port (fun flow ->
  │ -        let dst, dst_port = S.TCPV4.dst flow in
  │ +    S.listen_tcp s ~port (fun flow ->
  │ +        let dst, dst_port = S.TCP.dst flow in
  │ (fun f -> f "new tcp connection from IP %s on port %d"
  │ -                  (Ipaddr.V4.to_string dst) dst_port);
  │ - flow >>= function
  │ +                  (Ipaddr.to_string dst) dst_port);
  │ + flow >>= function
  │ 	 | Ok `Eof -> (fun f -> f "Closing connection!");
  │ Lwt.return_unit
  │ -        | Error e -> Logs.warn (fun f -> f "Error reading data from
  │ established connection: %a" S.TCPV4.pp_error e); Lwt.return_unit
  │ +        | Error e -> Logs.warn (fun f -> f "Error reading data from
  │ established connection: %a" S.TCP.pp_error e); Lwt.return_unit
  │ 	 | Ok (`Data b) ->
  │ 	   Logs.debug (fun f -> f "read: %d bytes:\n%s" (Cstruct.len b)
  │ (Cstruct.to_string b));
  │ -          S.TCPV4.close flow
  │ +          S.TCP.close flow
  │        );
  │      S.listen s

  Other bug fixes include <>
  (in <>) and adapt to charrua
  1.3.0 and arp 2.3.0 changes

Exception vs Result

  Archive: <>

Continuing this thread, Vladimir Keleshev announced

  A bit late to the party, but here's an overview of error handling
  methods that I did a while ago:

  [Composable Error Handling in OCaml (]

  It compares the following approaches:
  • Exceptions
  • Result type with strings for errors
  • Result type with custom variants for errors
  • Result type with polymorphic variants for errors

[Composable Error Handling in OCaml (]

Release: scikit-learn, Numpy, Scipy for OCaml, 0.3.1


Ronan Le Hy announced

  I've just released an update of OCaml wrappers for scikit-learn:
  • documentation: <>
  • code: <>
  • `opam install sklearn'

  These bindings also come with bindings for Numpy (`opam install np')
  and Scipy (`opam install scipy').

  Scikit-learn is all of these things:
  • Simple and efficient tools for predictive data analysis
  • Accessible to everybody, and reusable in various contexts
  • Built on NumPy, SciPy, and matplotlib
  • Open source, commercially usable - BSD license

  Scikit-learn is robust, well-engineered and covers most basic machine
  learning use cases. As a professional data scientist I use it
  extensively from Python. I built these wrappers because I felt
  challenged by my friend @UnixJunkie's funny R wrappers.

  I don't depend personally on these packages and maintain/improve them
  without any guarantees. They have many unpolished corners. However,
  they have tests and I don't expect them to add too many bugs to
  scikit-learn. Contributions and bug reports are welcome (but be aware
  that the bindings are generated from a big hairy Python script).

  Many thanks to everybody involved in opam!

OCaml 4.10.2

  Archive: <>

octachron announced

  The OCaml team has the pleasure of celebrating the birthday of Grace
  Hopper by announcing the release of OCaml version 4.10.2.

  This exceptional release makes OCaml 4.10 available on the new
  macOS/arm64 platform, and fixes some compatibility issues for the
  mingw64 and FreeBSD/amd64 platform.

  If OCaml 4.10.1 already works on your platform of choice, this release
  should be completely transparent to you (and can be safely ignored).

  Note that those fixes were backported from OCaml 4.12: further
  improvement to the support of the macOS/arm64 platform will happen on
  the 4.12 branch.

  The release is available as a set of OPAM switches, and as a source
  download here:


OCaml 4.10.2

  • [9938], [9939]: Define __USE_MINGW_ANSI_STDIO=0 for the mingw-w64
    ports to prevent their C99-compliant snprintf conflicting with
    ours. (David Allsopp, report by Michael Soegtrop, review by Xavier

[9938] <>

[9939] <>

◊ Supported platforms:

  • [9699], [10026]: add support for iOS and macOS on ARM 64 bits
    Backported from OCaml 4.12.0 (GitHub user @EduardoRFS, review by
    Xavier Leroy, Nicolás Ojeda Bär and Anil Madhavapeddy, additional
    testing by Michael Schmidt)

  [9699] <>

  [10026] <>

◊ Code generation and optimization

  • [9752], [10026]: Revised handling of calling conventions for
    external C functions. Provide a more precise description of the
    types of unboxed arguments, so that the ARM64 iOS/macOS calling
    conventions can be honored. Backported from OCaml 4.12.0 (Xavier
    Leroy, review by Mark Shinwell and Github user @EduardoRFS)

  • [9969], [9981]: Added mergeable flag tqo ELF sections containing
    mergeable constants.  Fixes compatibility with the integrated
    assembler in clang 11.0.0. Backported from OCaml 4.12.0 (Jacob
    Young, review by Nicolás Ojeda Bär)

  [9752] <>

  [10026] <>

  [9969] <>

  [9981] <>

Anil Madhavapeddy

  There is also a [macos/arm64 binary of opam] available from the
  releases page for your convenience, and opam repository has been
  updated to understand the new tier-1 constraints imposed by macos/arm
  (i.e. the only working compilers there are 4.10.2 and 4.12.0~dev, and
  `opam init' will now do the right thing).

  There will be a number of packages that are broken due to the shift to
  `/opt/homebrew' from `/usr/local' for Homebrew/ARM (due to the need to
  keep them simultaneously installed on the same Mac), so please feel
  free to submit PRs to opam-repository to fix this stuff.

  We'll shortly have Mac (both Intel and ARM) testing up and running on
  opam-repository, so CI will catch up with reality once more, thanks to
  furious hacking by @patricoferris to extend our ocurrent-based CI
  infrastructure to support the unique vagaries of the Mac environment
  (notably, a total lack of native containers).  We have it working
  locally, and are just upstreaming it now.

[macos/arm64 binary of opam]

BAP 2.2.0 Release

  Archive: <>

Ivan Gotovchits announced

  We are proud to announce the 2.2.0 release of the Carnegie Mellon
  University [Binary Analysis Platform]. BAP is the framework and
  toolkit for analyzing programs in their machine code
  representation. This update has a lot of [new features] despite that
  originally it was more as a maintenance version. Special thanks to
  @XVilka and [@Phosphorus15] for contributing Thumb/ThumbV2 lifter and
  radare2 integration. We would also like to thank [ForAllSecure] for
  open-sourcing and contributing to us their x86 floating-point
  lifter. The new version of BAP is also much more efficient and we now
  have a much better symbolization facility (so we're no longer really
  dependent on the presence of external tools). Another nice addition is
  a new REPL powered by [ocaml-linenoise], see the demo below.


[Binary Analysis Platform]

[new features]

[@Phosphorus15] <>

[ForAllSecure] <>

[ocaml-linenoise] <>

Liquidshop 1.0, Jan. 17th and 18th, 2021


Romain Beauxis announced

  We are happy to announce that we'll be holding Liquidshop 1.0 these
  coming Jan. 17th & 18th, our first ever (online) conference and
  workshops on liquidsoap and other related technologies and projects!

  Liquidsoap is a statically typed scripting language with specialized
  primitives and operators for creating media streams used for media
  processing, online streaming and a lot more. It is written in OCaml
  and has been maintained for over a decade now.

  We will have 3 different tracks for the event, namely:
  • Showcases: short presentations about a website / radio / art
    installation that you built using Liquidsoap or other related tools
  • Tech talks: in-depth presentation of a technology related to
    Liquidsoap and streaming in general
  • Workshops: user-centered freeform discussions about your project or
    issues around Liquidsoap and streaming

  If you're interested to participate, wether as an attendee or a
  presenter, make sure to register via our website at:
  <> or directly via the form
  available at: <>

  We are super excited for this event. We have already secured a couple
  of interesting speakers and we would love to get to know the community
  better, see what y'all are doing with liquidsoap and other releated
  projects, community radios, live video, weird installations, etc. and
  meet with everyone.

  Also, if you have any suggestion about the best technical solutions to
  organize such an event, we'd be happy to hear about them.

  Finally, if any of y'all have some specific topics to discuss and
  would like to learn more about liquidsoap, this will be a great place
  to connect!

Opium 0.20.0

  Archive: <>

Thibaut Mattio announced

  I'm pleased to announce a new version of [Opium] web framework
  (0.20.0) is available on Opam.

  Here's the changelog:

[Opium] <>


  • New `Auth' module to work with `Authorization' header ([#238])

  • New `basic_auth' middleware to protect handlers with a `Basic'
    authentication method ([#238])

  • New `Response.of_file' API for conveniently creating a response of a
    file ([#244])

  • Add a package `opium-graphql' to easily create GraphQL server with
    Opium ([#235])

  • Add a function `App.run_multicore' that uses pre-forking and spawns
    multiple processes that will handle incoming requests ([#239])

[#238] <>

[#244] <>

[#235] <>

[#239] <>


  • Fix reading cookie values when multiple cookies are present in
    `Cookie' header ([#246])

  Happy hacking :slight_smile:

[#246] <>

Set up OCaml 1.1.5

  Archive: <>

Sora Morimoto announced

  This release reduces build time by up to 2 minutes by exporting
  modified `OPAMJOBS' environment variable.


Other OCaml News

From the ocamlcore planet blog

  Here are links from many OCaml blogs aggregated at [OCaml Planet].

  • [Memthol: exploring program profiling]
  • [Growing the Hardcaml toolset]
  • [ Editor Plugin for VSCode and Vim Officially Released!]
  • [Announcing Our Market Prediction Kaggle Competition]
  • [Every proof assistant: introducing – a proof assistant
    for geometrical higher category theory]

[OCaml Planet] <>

[Memthol: exploring program profiling]

[Growing the Hardcaml toolset]

[ Editor Plugin for VSCode and Vim Officially Released!]

[Announcing Our Market Prediction Kaggle Competition]

[Every proof assistant: introducing – a proof assistant for
geometrical higher category theory]


  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: 36981 bytes --]

             reply	other threads:[~2020-12-15  9:51 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-15  9:51 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-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-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).