|
|
Subscribe / Log in / New account

OCaml Weekly News December 12

From:  Alan Schmitt <alan.schmitt-AT-polytechnique.org>
To:  "lwn" <lwn-AT-lwn.net>, caml-list-AT-inria.fr
Subject:  Attn: Development Editor, Latest OCaml Weekly News
Date:  Tue, 12 Dec 2023 11:20:26 +0100
Message-ID:  <m27cljsowl.fsf@m4x.org>

Hello

Here is the latest OCaml Weekly News, for the week of December 05 to 12,
2023.

Table of Contents
─────────────────

Ecosystem Wishlist Survey
OUPS meetup december 2023
Js_of_ocaml 5.2
containers 3.13
Melange 2.0
OCaml 5.1.1 released
DkML 2.1.0 - Major changes
Call for Participation: BOB 2024 (Berlin, March 15)
ocaml-protoc 3.0
Other OCaml News
Old CWN


Ecosystem Wishlist Survey
═════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ecosystem-wishlist-survey/135...>


Sabine Schmaltz announced
─────────────────────────

  Hey OCaml folks,

  I am running a little OCaml Ecosystem Wishlist survey where you can
  put in really specific wishes for

  • new packages,
  • package improvements,
  • compiler / tooling / language changes

  I’m really curious what you all need and I think this will be helpful
  to better understand the current state of the ecosystem.

  The survey will stay open at least into January, probably much longer.

  Put those wishes in! 🎄🐫🔥🔥


<https://docs.google.com/forms/d/e/1FAIpQLSdVGjO3g9qS31rXy...>


OUPS meetup december 2023
═════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/oups-meetup-december-2023/135...>


zapashcanon announced
─────────────────────

  The next OUPS meetup will take place on *Thursday, 14th of December*
  2023. It will start at *7pm* at the *4 place Jussieu* in Paris.

  :warning: :trumpet: It will be in the in the *Esclangon building*
  (amphi TBA). :trumpet: :warning:

  Please, *[register on meetup ]* as soon as possible to let us know how
  many pizza we should order.

  For more details, you may check the [OUPS’ website ].

  This month will feature the following talks :

  *Miou, un simple scheduler pour OCaml 5 – Romain Calascibetta
   (@dinosaure)*

  Miou est un scheduler pour OCaml 5 utilisant les effets nouvellement
  introduit. Il se concentre sur la disponibilité d’une application au
  travers d’une politique de gestion des tâches bien décrite. Cette
  présentation introduira les effets avec OCaml 5 ainsi qu’une
  rétrospective de son API. Il s’agira ensuite de présenter les
  spécifités de Miou par rapport aux autres schedulers. Enfin, il y aura
  la présentation d’un client/serveur HTTP développé selon le design de
  Miou. La présentation permettra de faire un état des lieux du
  scheduling en OCaml, des raisons de la multiplicité des solutions
  ainsi que des objectifs concrets de Miou (implémentation de services,
  disponibilités des applications, unikernels).

  *Towards a solution to the expression problem for compilers: strongly
   typed nano-passes – Boris Yakobowski*

  We present a new solution to the problem of (strongly) typing compiler
  passes when the source and destination language share multiple
  constructors. We are interested in approaches that limit the amount of
  boilerplate that needs to be (re)written for each language, while
  still maintaining a very strict typing discipline. Our solution uses
  well-known tools, but combine them in a novel way:

  • the idea of nanopasses, in which each pass encodes a very limited
    transformation
  • the use of ppx syntax extensions to express only the differences
    between a language and the next
  • the traversal of the AST using top-down and bottom-up recursion
    schemes
  • OCaml polymorphic variants, which are instrumental to precisely type
    our (non-recursive) transformation functions.

  We present our implementation of this approach in the context of the
  Ada frontend for the Infer analyzer, which as of today contains 28
  passes. We will also discuss the various pitfalls we have encountered
  along the way, as well as possible improvements (in particular
  deforesting the combination of multiple passes).


[register on meetup ]
<https://www.meetup.com/fr-FR/ocaml-paris/events/297791037>

[OUPS’ website ] <https://oups.frama.io>


Js_of_ocaml 5.2
═══════════════

  Archive: <https://discuss.ocaml.org/t/ann-js-of-ocaml-5-2/13581/1>


Hhugo announced
───────────────

  I’m pleased to announce the release of js_of_ocaml 5.2. It should soon
  be able available in opam.

  Js_of_ocaml is a compiler from OCaml bytecode to JavaScript. It makes
  it possible to run pure OCaml programs in JavaScript environment like
  browsers and Node.js.

  Most significant changes:
  • Improve support for modern javascript
  • New global dead code elimination pass. Jsoo can now drop unused code
    inside functors. See the [pull request] for more details
  • Change strategy used for control flow compilation. It was adapted
    from wasm_of_ocaml and based on the following paper
    <https://dl.acm.org/doi/abs/10.1145/3547621>.

  See the [Changelog ] for other changes.


[pull request] <https://github.com/ocsigen/js_of_ocaml/pull/1503>

[Changelog ]
<https://github.com/ocsigen/js_of_ocaml/blob/master/CHANGE...>


containers 3.13
═══════════════

  Archive: <https://discuss.ocaml.org/t/ann-containers-3-13/13582/1>


Simon Cruanes announced
───────────────────────

  Hello, I just released [containers 3.13] on opam.

  This release is somewhat more breaking than usual:
  • OCaml 4.08 is now the minimum OCaml version.
  • `CCShims_' (which was used to provide a shim for `Stdlib' pre-4.08)
    is removed
  • `containers-thread', which was deprecated, is no more. The
    recommended alternative is [Moonpool].

  On OCaml 5.1 and above, tail-rec-mod-cons is used to simplify and
  accelerate some functions in `CCList'.

  Happy hacking!


[containers 3.13]
<https://github.com/c-cube/ocaml-containers/releases/tag/v...>

[Moonpool] <https://github.com/c-cube/moonpool/>


Melange 2.0
═══════════

  Archive: <https://discuss.ocaml.org/t/ann-melange-2-0/13073/3>


Antonio Nuno Monteiro announced
───────────────────────────────

  Melange 2.2 is now out with support for OCaml 5.1.1.


OCaml 5.1.1 released
════════════════════

  Archive: <https://discuss.ocaml.org/t/ocaml-5-1-1-released/13592/1>


octachron announced
───────────────────

  In the last three months after the release of OCaml 5.1.0, three
  significant regressions have been discovered in OCaml 5.1.0. Those
  regressions concern the packaging of executables, the typechecking of
  OCaml programs, and the performance of numerical codes.

  Since those regressions affect many users and could have lasting
  effects, we have published a patch release, OCaml 5.1.1, fixing those
  issues.

  As a major exception to our policy for patch releases, OCaml 5.1.1
  will contain one breaking change in the standard library: the
  `Compression' flag has been removed from the `Marshal' module. This
  drastic measure has been taken because supporting zstd compression in
  the standard library made zstd a dependency of all OCaml executables.
  Since the compiler should not propagate its dependencies on end-users,
  the support for compressed marshalling has been moved to a compiler
  internal library in 5.1.1.

  Accounting for the still experimental nature of the multicore runtime,
  this patch release 5.1.1 also contains safe fixes for subtle
  concurrency bugs in the OCaml runtime.

  In brief, if you were using OCaml 5.1.0, I strongly recommend that you
  switch to 5.1.1 .

  The full list of changes is available below for more details.


Installation Instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  The base compiler can be installed as an opam switch with the
  following commands:

  ┌────
  │ opam update
  │ opam switch create 5.1.1
  └────

  The source code for the release is also directly available on:

  • [GitHub]
  • [Inria archive]


[GitHub] <https://github.com/ocaml/ocaml/archive/5.1.1.tar.gz>

[Inria archive]
<https://caml.inria.fr/pub/distrib/ocaml-5.1/ocaml-5.1.1.t...>


Changes in OCaml 5.1.1 (8 December 2023)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

◊ Standard Library

  • (*breaking change*) [#12562], [#12734], [#12783]: Remove the
    `Marshal.Compression' flag to the `Marshal.to_*' functions
    introduced in 5.1 by [#12006], as it cannot be implemented without
    risking to link -lzstd with all ocamlopt-generated executables. The
    compilers are still able to use ZSTD compression for compilation
    artefacts. (Xavier Leroy and David Allsopp, report by Kate Deplaix,
    review by Nicolás Ojeda Bär, Kate Deplaix, and Damien Doligez).


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

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

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

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


◊ Bug Fixes

  • [#12623], fix the computation of variance composition (Florian
    Angeletti, report by Vesa Karvonen, review by Gabriel Scherer)
  • [#12581], [#12609]: Fix error on uses of packed modules outside
    their pack to correctly handle nested packs (Vincent Laviron, report
    by Javier Chávarri, review by Pierre Chambart)
  • [#12645], [#12649] fix error messages for cyclic type definitions in
    presence of the `-short-paths' flag. (Florian Angeletti, report by
    Vesa Karvonen, review by Gabriel Scherer)
  • [#12757]: Fix ocamlnat (native toplevel) by registering frametables
    correctly (Stephen Dolan, Nick Barnes and Mark Shinwell, review by
    Vincent Laviron and Sébastien Hinderer)
  • [#12791]: `extern' is applied to definitions of `caml_builtin_cprim'
    and `caml_names_of_builtin_cprim' when linking bytecode ’-custom’
    executables with a C++ linker. (Shayne Fletcher, review by Antonin
    Décimo and Xavier Leroy)


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

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

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

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

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

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

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


◊ GC Performance Regression Fixes

  • [#12318]: GC: simplify the meaning of custom_minor_max_size: blocks
    with out-of-heap memory above this limit are now allocated directly
    in the major heap. (Damien Doligez, report by Stephen Dolan, review
    by Gabriel Scherer)
  • [#12439]: Finalize and collect dead custom blocks during minor
    collection (Damien Doligez, review by Xavier Leroy, Gabriel Scherer
    and KC Sivaramakrishnan)
  • [#12590], [#12595]: Move `caml_collect_gc_stats_sample' in
    `caml_empty_minor_heap_promote' before barrier arrival. (B.
    Szilvasy, review by Gabriel Scherer)
  • [#12491], [#12493], [#12500], [#12754]: Do not change GC pace when
    creating sub-arrays of bigarrays (Xavier Leroy, report by Ido Yariv,
    analysis by Gabriel Scherer, review by Gabriel Scherer and Fabrice
    Buoro)


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

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

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

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

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

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

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

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


◊ Runtime Bug Fixes

  • [#11800], [#12707]: fix an assertion race condition in
    `install_backup_thread' (Jan Midtgaard, review by Gabriel Scherer)
  • [#12486], [#12535]: Fix delivery of unhandled effect exceptions on
    amd64 with –enable-frame-pointers (Miod Vallat, report by Jan
    Midtgaard, review by Gabriel Scherer)
  • [#12712], [#12742]: fix an assertion boundary case in
    `caml_reset_young_limit' (Jan Midtgaard, review by Guillaume
    Munch-Maccagnoni)
  • [#12713], [#12715]: disable common subexpression elimination for
    atomic loads (Gabriel Scherer and Vincent Laviron, review by Vincent
    Laviron, KC Sivaramakrishnan and Xavier Leroy, report by Vesa
    Karvonen and Carine Morel)


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

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

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

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

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

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

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

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


DkML 2.1.0 - Major changes
══════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-dkml-2-1-0-major-changes/...>


jbeckford announced
───────────────────

  I’m pleased to announce a major overhaul of DkML in version 2.1.0.

  Some of the major changes include:
  • `winget install dkml' is the recommended way to install.
  • Installation is now in stages. The first stage (`winget install
    dkml') takes 5 minutes and lets the end-user do `utop', `ocamlc' and
    `ocamlrun' (sufficient for learning). However, any command that need
    Visual Studio (ex. `opam', `dkml') will first:
    • guide you if you need Git and/or Visual Studio (`winget' does not
      support auto-installing dependencies like other /sane/ package
      managers), and then
    • install the OCaml system compiler, the opam root and a playground
      global switch automatically on first run
  • Alpha support for macOS/Silicon and most modern distros of GNU/Linux
  • Has an accompanying video describing how to install and use DkML on
    Windows targeted to both learners and professionals. Includes Visual
    Studio Code and LSP:


Call for Participation: BOB 2024 (Berlin, March 15)
═══════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/call-for-participation-bob-20...>


Michael Sperber announced
─────────────────────────

  More info at <https://bobkonf.de/2024/>!

  ┌────
  │ =========================================================================
  │ 			       BOB 2024
  │ 			      Conference
  │ 	     “What happens if we simply use what’s best?”
  │ 		       March 15, 2024, Berlin
  │ 		       https://bobkonf.de/2024/
  │ 
  │ 	    Program: https://bobkonf.de/2024/program.html
  │ 	  Registration: https://bobkonf.de/2024/registration.html
  │ =========================================================================
  │ 
  │ BOB conference is a place for developers, architects, and decision-makers
  │ to explore technologies beyond the mainstream in software development
  │ and to find the best tools available to software developers today. Our
  │ goal is for all participants of BOB to return home with new insights
  │ that enable them to improve their own software development
  │ experience.
  │ 
  │ The program features 14 talks and 8 tutorials on current topics:
  │ 
  │ https://bobkonf.de/2024/program.html
  │ 
  │ Talk subjects includes functional programming, property-based testing,
  │ service API design, programming for spacecraft, accessibility,
  │ hypermedia, business processes, software analytics, event-based
  │ communication and zero-knowledge proofs.
  │ 
  │ BOB will feature tutorials on F#, Haskell, Lean, SwiftUI, Copilot, the
  │ K Framework, functional domain modelling, and Liberating Structures.
  │ 
  │ Andreas Rossberg will give the keynote talk.
  │ 
  │ Registration is open - online tickets are all under 200€, and many
  │ discount options are available, as are grants for members of groups
  │ underrepresented in tech:
  │ 
  │ https://bobkonf.de/2024/registration.html
  └────


ocaml-protoc 3.0
════════════════

  Archive: <https://discuss.ocaml.org/t/ann-ocaml-protoc-3-0/13611/1>


Simon Cruanes announced
───────────────────────

  Dear camlidae,

  I’m happy to announce the release of [ocaml-protoc 3.0] (alongside the
  multiple runtime libraries: `pbrt', `pbrt_yojson', and the new
  `pbrt_services'). This is a majorly breaking release, I’m sorry for
  that (I do, however, believe it necessary) and recommend every user of
  ocaml-protoc add an upper bound `< 3.0' to their current project and
  migrate when they have time.

  First, a summary. `ocaml-protoc' is a self-contained compiler that
  turns [protobuf] IDL files (`.proto' files) into OCaml types,
  pretty-printers, and (de)serialization functions. The runtime library
  `pbrt' (“protobuf runtime”) contains support code for printers and
  binary (de)serialization; `pbrt_yojson' contains support code for JSON
  (de)serialization by way of `yojson'.

  So what changed with ocaml-protoc 3.0? Many things.

  For a start, from one `.proto' file we now generate one pair of `.ml'
  and `.mli' files instead of several pairs. This reduces the
  boilerplate in build systems and simplifies user code overall (one
  module per `.proto' file). A large internal refactor of `ocaml-protoc'
  was done prior to the integration of… _services_.

  The major new feature of `ocaml-protoc' 3.0 is the support for service
  declarations. These are essentially [a way] to describe RPC endpoints,
  next to the types used to interact with the endpoint ([example]; [full
  generated code]). This is typically what it used in systems such as
  [gRPC]. Now `ocaml-protoc' generates server and client stubs for each
  endpoint, that pack together the type definitions and the relevant
  (de)serializers; that code doesn’t presume anything about a concrete
  RPC system. I have in the works a simple [Twirp] [OCaml library] that
  relies on this generated code to provide services over HTTP 1.1; It is
  also possible to write RPC systems over ZMQ, websockets, etc. without
  changes to the generated code[^1].

  [^1]: note that twirp doesn’t support stream RPC over HTTP 1.1. Other
  RPC systems can support these, e.g. gRPC does.

  Another big-ish change is how the generated code looks like, at least
  when it comes to binary (de)serialization. `ocaml-protoc' 3.0 comes
  with significant speedups for encoding (up to twice the throughput;
  order of magnitude reduction in allocations in some cases [^2]) and
  some less impressive speedups for decoding. This is a combination of
  multiple changes:
  • use of a few C stubs to accelerate varint decoding/encoding;
  • encoding is done back-to-front, which allows the encoder to use a
    single slice internally[^3]. This is what required changes in the
    generated code in the first place;
  • encoding code now requires a lot fewer closures (passing arguments
    explicitly instead) which reduces allocations to almost nothing.

  I haven’t recently benchmarked against other protobuf implementations
  in OCaml, but I’m reasonably confident that this is now the fastest
  one by a healthy margin.

  There are also other improvements and bugfixes. I want to thank in
  particular [@Konstantin_Olkhovski] for some of these contributions and
  for very helpful discussions, and also @VPhantom for more discussions
  on the topic of performance.

  [^2]: if the encoder type is reused, there’s almost no minor
  allocations, and no major allocations, to encode an existing value
  into the encoder’s buffer.

  [^3]: because sub-messages use varint as their sizes, encoding
  front-to-back cannot be efficiently done in a single buffer, because
  it’s not clear how many bytes to reserve in front of a sub-message.
  With back-to-front that’s not an issue.

  The [changelog] contains many more details.


[ocaml-protoc 3.0]
<https://github.com/mransan/ocaml-protoc/releases/tag/v3.0.0>

[protobuf] <https://protobuf.dev/>

[a way] <https://protobuf.dev/programming-guides/proto3/#services>

[example]
<https://github.com/mransan/ocaml-protoc/blob/master/src/e...>

[full generated code]
<https://gist.github.com/c-cube/c76fecafeedf426c353e487c2e...>

[gRPC] <https://grpc.io>

[Twirp] <https://github.com/twitchtv/twirp>

[OCaml library] <https://github.com/c-cube/ocaml-twirp>

[@Konstantin_Olkhovski] <https://github.com/lupus>

[changelog]
<https://github.com/mransan/ocaml-protoc/releases/tag/v3.0.0>


Other OCaml News
════════════════

From the ocaml.org blog
───────────────────────

  • [Florian compiler weekly, 11 December 2023]
  • [International Disability Day 2023: Why It Matters]


[Florian compiler weekly, 11 December 2023]
<https://gallium.inria.fr/blog/florian-cw-2023-12-11>

[International Disability Day 2023: Why It Matters]
<https://tarides.com/blog/2023-12-05-international-disabil...>


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
  to the [caml-list].

  [Alan Schmitt]


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

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

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

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

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



to post comments


Copyright © 2023, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds