caml-list - the Caml user's mailing list
 help / Atom feed
From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "lwn" <lwn@lwn.net>, "cwn"  <cwn@lists.idyll.org>, caml-list@inria.fr, comp@lists.orbitalfox.eu
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 15 Dec 2020 10:51:47 +0100
Message-ID: <87tusnflcc.fsf@m4x.org> (raw)

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

Hello

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

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
Old CWN


MirageOS 3.10 released
══════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-mirageos-3-10-released/6941/1>


Hannes Mehnert announced
────────────────────────

  we're pleased to announce MirageOS 3.10:

  IPv6 and dual (IPv4 and IPv6) stack support
  <https://github.com/mirage/mirage/pull/1187>
  <https://github.com/mirage/mirage/issues/1190>

  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
  "–ipv6=2001::42/64").

  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=127.0.0.1/24" to the same effect as the direct stack: only
  listen on 127.0.0.1 (the subnet mask is ignored for the Unix socket
  stack).

  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
  parameter).

  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 10.0.0.1 as default gateway (since there was no way to unset the
  default gateway <https://github.com/mirage/mirage/issues/1147>).

  For unikernel developers, there are some API changes in the Mirage
  module
  • 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)
  • V6.network 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
  <https://github.com/roburio/tlstunnel/commit/2cb3e5aa11fca4b48bb524f3c0dbb754a6c8739b>
  changed tlstunnel from IPv4 stack to dual stack.

  ┌────
  │ diff --git a/device-usage/network/config.ml b/device-usage/network/config.ml
  │ index c425edb..eabc9d6 100644
  │ --- a/device-usage/network/config.ml
  │ +++ b/device-usage/network/config.ml
  │ @@ -4,9 +4,9 @@ let port =
  │    let doc = Key.Arg.info ~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/unikernel.ml
  │ b/device-usage/network/unikernel.ml
  │ index 5d29111..1bf1228 100644
  │ --- a/device-usage/network/unikernel.ml
  │ +++ b/device-usage/network/unikernel.ml
  │ @@ -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
  │ 	 Logs.info (fun f -> f "new tcp connection from IP %s on port %d"
  │ -                  (Ipaddr.V4.to_string dst) dst_port);
  │ -        S.TCPV4.read flow >>= function
  │ +                  (Ipaddr.to_string dst) dst_port);
  │ +        S.TCP.read flow >>= function
  │ 	 | Ok `Eof -> Logs.info (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 <https://github.com/mirage/mirage/issues/1188>
  (in <https://github.com/mirage/mirage/pull/1201>) and adapt to charrua
  1.3.0 and arp 2.3.0 changes
  (<https://github.com/mirage/mirage/pull/1199>).


Exception vs Result
═══════════════════

  Archive: <https://discuss.ocaml.org/t/exception-vs-result/6931/18>


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 (keleshev.com)]

  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 (keleshev.com)]
<https://keleshev.com/composable-error-handling-in-ocaml>


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

  Archive:
  <https://discuss.ocaml.org/t/ann-release-scikit-learn-numpy-scipy-for-ocaml-0-3-1/6942/1>


Ronan Le Hy announced
─────────────────────

  I've just released an update of OCaml wrappers for scikit-learn:
  • documentation: <https://lehy.github.io/ocaml-sklearn/>
  • code: <https://github.com/lehy/ocaml-sklearn>
  • `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: <https://discuss.ocaml.org/t/ann-ocaml-4-10-2/6945/1>


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:

  <https://github.com/ocaml/ocaml/archive/4.10.2.tar.gz>
  <https://caml.inria.fr/pub/distrib/ocaml-4.10/>


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
    Leroy)


[9938] <https://github.com/ocaml/ocaml/issues/9938>

[9939] <https://github.com/ocaml/ocaml/issues/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] <https://github.com/ocaml/ocaml/issues/9699>

  [10026] <https://github.com/ocaml/ocaml/issues/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] <https://github.com/ocaml/ocaml/issues/9752>

  [10026] <https://github.com/ocaml/ocaml/issues/10026>

  [9969] <https://github.com/ocaml/ocaml/issues/9969>

  [9981] <https://github.com/ocaml/ocaml/issues/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]
<https://github.com/ocaml/opam/releases/tag/2.0.7>


BAP 2.2.0 Release
═════════════════

  Archive: <https://discuss.ocaml.org/t/ann-bap-2-2-0-release/6950/1>


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.

  <https://asciinema.org/a/358996>


[Binary Analysis Platform]
<https://github.com/BinaryAnalysisPlatform/bap>

[new features]
<https://github.com/BinaryAnalysisPlatform/bap/releases/tag/v2.2.0>

[@Phosphorus15] <https://github.com/Phosphorus15>

[ForAllSecure] <https://forallsecure.com/>

[ocaml-linenoise] <https://github.com/ocaml-community/ocaml-linenoise>


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

  Archive:
  <https://discuss.ocaml.org/t/ann-liquidshop-1-0-jan-17th-18th-2021/6951/1>


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:
  <http://www.liquidsoap.info/liquidshop/> or directly via the form
  available at: <https://forms.gle/HdGNLz5qM3HVU1ub7>

  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: <https://discuss.ocaml.org/t/ann-opium-0-20-0/6955/1>


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] <https://github.com/rgrinberg/opium>

Added
╌╌╌╌╌

  • 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] <https://github.com/rgrinberg/opium/pull/238>

[#244] <https://github.com/rgrinberg/opium/pull/244>

[#235] <https://github.com/rgrinberg/opium/pull/235>

[#239] <https://github.com/rgrinberg/opium/pull/239>


Fixed
╌╌╌╌╌

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

  Happy hacking :slight_smile:


[#246] <https://github.com/rgrinberg/opium/pull/246>


Set up OCaml 1.1.5
══════════════════

  Archive: <https://discuss.ocaml.org/t/ann-set-up-ocaml-1-1-5/6971/1>


Sora Morimoto announced
───────────────────────

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

  <https://github.com/avsm/setup-ocaml/releases/tag/v1.1.5>


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 homotopy.io – a proof assistant
    for geometrical higher category theory]


[OCaml Planet] <http://ocaml.org/community/planet/>

[Memthol: exploring program profiling]
<https://www.ocamlpro.com/2020/12/01/memthol-exploring-program-profiling/>

[Growing the Hardcaml toolset]
<https://blog.janestreet.com/growing-the-hardcaml-toolset-index/>

[ Editor Plugin for VSCode and Vim Officially Released!]
<https://rescript-lang.org/blog/editor-support-release-1-0>

[Announcing Our Market Prediction Kaggle Competition]
<https://blog.janestreet.com/announcing-our-market-prediction-kaggle-competition-index/>

[Every proof assistant: introducing homotopy.io – a proof assistant for
geometrical higher category theory]
<http://math.andrej.com/2020/11/24/homotopy-io/>


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]


[send me a message] <mailto:alan.schmitt@polytechnique.org>

[the archive] <http://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <http://alan.petitepomme.net/cwn/cwn.rss>

[online] <http://lists.idyll.org/listinfo/caml-news-weekly/>

[Alan Schmitt] <http://alan.petitepomme.net/>


[-- Attachment #2: Type: text/html, Size: 36981 bytes --]

         reply index

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-03  7:35 Alan Schmitt
2019-10-15  7:28 Alan Schmitt
2019-11-05  6:55 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-26  8:33 Alan Schmitt
2019-12-03 15:43 Alan Schmitt
2019-12-10  8:21 Alan Schmitt
2019-12-17  8:52 Alan Schmitt
2019-12-31  9:18 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2020-01-14 14:17 Alan Schmitt
2020-01-21 14:09 Alan Schmitt
2020-01-28 10:54 Alan Schmitt
2020-02-04  8:47 Alan Schmitt
2020-02-18  8:18 Alan Schmitt
2020-02-25  8:51 Alan Schmitt
2020-03-03  8:00 Alan Schmitt
2020-03-10 14:29 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-24  9:31 Alan Schmitt
2020-03-31  9:55 Alan Schmitt
2020-04-07  7:51 Alan Schmitt
2020-04-14  7:28 Alan Schmitt
2020-04-21  8:58 Alan Schmitt
2020-04-28 12:45 Alan Schmitt
2020-05-05  7:45 Alan Schmitt
2020-05-12  7:46 Alan Schmitt
2020-05-19  9:53 Alan Schmitt
2020-06-09  8:29 Alan Schmitt
2020-06-16  8:36 Alan Schmitt
2020-06-30  7:00 Alan Schmitt
2020-07-07 10:05 Alan Schmitt
2020-07-14  9:55 Alan Schmitt
2020-07-21 14:43 Alan Schmitt
2020-07-28 16:58 Alan Schmitt
2020-08-18  7:26 Alan Schmitt
2020-09-01  7:55 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-22  7:27 Alan Schmitt
2020-09-29  7:02 Alan Schmitt
2020-10-06  7:22 Alan Schmitt
2020-10-20  8:16 Alan Schmitt
2020-10-27  8:44 Alan Schmitt
2020-11-03 15:16 Alan Schmitt
2020-12-01  8:55 Alan Schmitt
2020-12-15  9:51 Alan Schmitt [this message]
2020-12-22  8:49 Alan Schmitt
2020-12-29 10:00 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2021-01-12  9:47 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-23  9:52 Alan Schmitt
2021-03-09 10:59 Alan Schmitt
2021-03-16 10:32 Alan Schmitt
2021-03-23  9:05 Alan Schmitt
2021-03-30 14:56 Alan Schmitt
2021-04-06  9:42 Alan Schmitt
2021-04-20  9:07 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-05-04  8:58 Alan Schmitt
2021-05-11 14:48 Alan Schmitt
2021-05-25  7:30 Alan Schmitt
2021-06-01  9:23 Alan Schmitt

Reply instructions:

You may reply publically 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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

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

  git send-email \
    --in-reply-to=87tusnflcc.fsf@m4x.org \
    --to=alan.schmitt@polytechnique.org \
    --cc=caml-list@inria.fr \
    --cc=comp@lists.orbitalfox.eu \
    --cc=cwn@lists.idyll.org \
    --cc=lwn@lwn.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

caml-list - the Caml user's mailing list

Archives are clonable: git clone --mirror https://inbox.ocaml.org/caml-list

AGPL code for this site: git clone https://public-inbox.org/ public-inbox