Hello Here is the latest OCaml Weekly News, for the week of March 15 to 22, 2022. Table of Contents ───────────────── Friday 03/04 Intern presentations – open attendance! Multicore OCaml: February 2022 OCaml 4.14.0, second release candidate For Diversity and the OCaml Community: Outreachy Summer 2022 Understanding cancellation (in eio) Atdpy: derive safe JSON interfaces for Python Old CWN Friday 03/04 Intern presentations – open attendance! ════════════════════════════════════════════════════ Archive: Continuing this thread, Aya announced ───────────────────────────────────── [Here is the link] to the video recording of the presentations! Thanks again to everyone who attended :pray: :tada: [Here is the link] Multicore OCaml: February 2022 ══════════════════════════════ Archive: Anil Madhavapeddy announced ─────────────────────────── Welcome to the February 2022 [Multicore OCaml] monthly report! As with [previous updates], these have been compiled by me, @ctk21, @kayceesrk and @shakthimaan. Progress towards a stable OCaml 5.0.0 release have been moving forward at full steam, with most of the multicore OCaml work now happening directly within the main ocaml/ocaml repository. As a number of [deprecations] have happened in OCaml 5.0+trunk, it can be a little tricky in the immediate term to get a working development environment. You may find these resources helpful: • There is a [multicore monorepo] which is a 'fast clone and dune build' with a number of ecosystem libraries. (thanks @patricoferris) • There is an [alpha-opam-repository] which contains work-in-progress packages. If a package you maintain is in there, now would be a good time to start releasing it to the mainline opam-repository. Remember that while we can propose changes, only the community maintainers of the relevant projects can do the actual release, so *your help with making OCaml 5.0-compatible releases of your projects would be very much appreciated*. (thanks @kit-ty-kate) For mainline development, the [compiler development newsletter] has an overview of what's been happening in the compiler. From a multicore perspective: • the [ARM64 PR] has been merged, so your shiny Mac M1s will now work • we continue to work on the post-Multicore merge tasks for an upcoming 5.0.0+trunk release. The documentation efforts on the OCaml memory model, runtime system, and STW synchronization have also started. • The [eio project] is actively being developed which now includes UDP support with Eio's networking interface. There has been [robust discussion] on several aspects of eio which is all influencing the next iteration of its design (thank you to everyone!). For those of you who do not wish to participate in public discussion, feel free to get in touch with me or @kayceesrk for a private discussion, particularly if you have a large OCaml codebase and opinions on concurrency. We'll summarise all these discussions as best we can over the coming months. • `Sandmark-nightly' and `Sandmark' have a custom variant support feature to build trunk, developer branches, or a specific commit to assess any performance regressions. The backend tooling with UI enhancements continue to drive the `current-bench' project forward. As always, the Multicore OCaml updates are listed first, which are then followed by the ecosystem tooling updates. Finally, the sandmark, sandmark-nightly and current-bench project tasks are mentioned for your reference. /Editor’s note: please find the full update at the archive link above./ [Multicore OCaml] [previous updates] [deprecations] [multicore monorepo] [alpha-opam-repository] [compiler development newsletter] [ARM64 PR] [eio project] [robust discussion] OCaml 4.14.0, second release candidate ══════════════════════════════════════ Archive: octachron announced ─────────────────── The release of OCaml 4.14.0 is imminent. As a last test that everything is in order, we are publishing a second release candidate for OCaml 4.14.0. We are directly jumping to the second release candidate due to a type system regression discovered during the release process of the first release candidate. Compared to the last beta, this release candidate includes a regression fix when typing recursive constraints, two backend fixes (one for the frame-pointer mode and the other one for the RISC-V architecture), one configuration fix for musl/arm64, and the manual chapter for the TMC transformation. If you find any bugs, please report them here: The full release of OCaml 4.14.0 is currently planned for next week. Installation instructions ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ The base compiler can be installed as an opam switch with the following commands ┌──── │ opam update │ opam switch create 4.14.0~rc2 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git └──── If you want to tweak the configuration of the compiler, you can switch to the option variant with: ┌──── │ opam update │ opam switch create --packages=ocaml-variants.4.14.0~rc2+options, │ --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git └──── where `' is a comma separated list of `ocaml-option-*' packages. For instance, for a flambda and no-flat-float-array switch: ┌──── │ opam switch create 4.14.0~rc2+flambda+nffa │ --packages=ocaml-variants.4.14.0~rc2+options,ocaml-option-flambda,ocaml-option-no-flat-float-array │ --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git └──── All available options can be listed with `opam search ocaml-option'. The source code for the release candidate is also available at these addresses: • Changes since the last beta ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ Type system regression fix ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ • [#11101], [#11109]: A recursive type constraint fails on 4.14 (Jacques Garrigue, report and review by Florian Angeletti) [#11101] [#11109] Backend fixes ┄┄┄┄┄┄┄┄┄┄┄┄┄ • [#10688]: Move frame descriptor table from `rodata` to `data` section on RISC-V. Improves support for building DLLs and PIEs. In particular, this applies to all binaries in distributions that build PIEs by default (eg Gentoo and Alpine). (Alex Fan, review by Gabriel Scherer) • [#11031]: Exception handlers restore the rbp register when using frame-pointers on amd64. (Fabrice Buoro, with help from Stephen Dolan, Tom Kelly and Mark Shinwell, review by Xavier Leroy) [#10688] [#11031] Configuration fix ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ • [#11025], [#11036]: Do not pass -no-pie to the C compiler on musl/arm64 (omni, Kate Deplaix and Antonio Nuno Monteiro, review by Xavier Leroy) [#11025] [#11036] Documentation ┄┄┄┄┄┄┄┄┄┄┄┄┄ • *updated entry* [#181], [#9760], +[#10740]: opt-in tail-modulo-cons (TMC) transformation ┌──── │ let[@tail_mod_cons] rec map f li = ... └──── (Frédéric Bour, Gabriel Scherer, Basile Clément, review by Basile Clément and Pierre Chambart, tested by Konstantin Romanov) [#181] [#9760] [#10740] For Diversity and the OCaml Community: Outreachy Summer 2022 ════════════════════════════════════════════════════════════ Archive: Continuing this thread, Patrick Ferris said ─────────────────────────────────────────── Thanks for the updates @pitag! For this summer's round I'll be mentoring a project to [Extend ocaml-geojson to support TopoJSON] which will likely be a separate package. This is part of a larger effort I'm embarking on to provide better [geospatial libraries and tools in OCaml]! I'd be very happy to have a co-mentor if the project (or just the idea of Outreachy) interests anyone. Don't hesitate to reach out to me on discuss publicly or privately if you are interested or have more questions :camel: [Extend ocaml-geojson to support TopoJSON] [geospatial libraries and tools in OCaml] Understanding cancellation (in eio) ═══════════════════════════════════ Archive: Deep in this thread, Simon Cruanes announced ──────────────────────────────────────────── I still have reservations about the capabilities aspect of Eio, but the structured concurrency part looks very nice. Just a few notes, for future reference to readers of this thread (if I haven't missed them being posted above already): Another interesting post about structured concurrency and cancellation: A structured concurrency library in python: [trio], which might be relatively similar to Eio's switches in concept (esp since @talex linked [this])? Companion post to the trio blogpost: which is directly relevant to the current topic. [trio] [this] Atdpy: derive safe JSON interfaces for Python ═════════════════════════════════════════════ Archive: Martin Jambon announced ─────────────────────── On behalf of the ATD team, I'd like to announce atdpy, which is part of the release 2.3.x of the ATD tools. For now, the best installation method with via opam: ┌──── │ $ opam install atdpy └──── Atdpy is a new backend for [ATD]. It takes a collection of type definitions and derives Python classes with mypy type annotations that validate the JSON data. A [short introduction] is included in the documentation. Use cases: • Safe communication with another program that also uses an ATD interface. Other supported languages are OCaml (including Bucklescript), Java, and Scala. • Need for [mostly] type-safe Python methods via mypy. • Need for a good Python API to communicate with an OCaml executable or service. • Need for sum types (variants, algebraic data types, tagged unions). ATD sum types are ordinary types that include pure enums. Atdpy was developed as part of our work on [Semgrep] at [r2c]. Many thanks to @mseri for his massive help during the opam release of the 7 ATD packages, and to the Ahrefs folks and @Khady in particular for supporting the project. [ATD] [short introduction] [Semgrep] [r2c] 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] [the archive] [RSS feed of the archives] [online] [Alan Schmitt]