[cwn] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Dec 20 01:32:14 PST 2022


Hello

Here is the latest OCaml Weekly News, for the week of December 13 to 20,
2022.

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

B·o·B, an universal and secure peer-to-peer file-transfer in OCaml
OCaml 5.0.0 is out!
ThreadSanitizer support for OCaml 5.0.0 – first public release
Parany for OCaml-5
WebAssembly/Wasm and OCaml, by OCamlPro
opam 2.1.4, opam-publish 2.2.0, opam-file-format 2.1.5
Old CWN


B·o·B, an universal and secure peer-to-peer file-transfer in OCaml
══════════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-b-o-b-an-universal-secure-peer-to-peer-file-transfer-in-ocaml/10833/8>


Calascibetta Romain announced
─────────────────────────────

  As we said, the announcement of Bob being experimental, we had various
  feedbacks to improve Bob but also bugs on its use (particularly [on
  MacOS]).

  In this, we fixed the problems and decided to offer an Atom feed to
  follow the development of Bob but also the changes made on our relay
  (available to users).

  [The website] has been improved by implementing a “dark” mode to make
  it easier to read. We therefore advise you not only to download the
  latest version of Bob if you are a user, but also to subscribe to [our
  feed] in order to keep up to date with our development.


[on MacOS] <https://github.com/dinosaure/bob/issues/27>

[The website] <https://bob.osau.re>

[our feed] <https://bob.osau.re/feed.xml>


OCaml 5.0.0 is out!
═══════════════════

  Archive: <https://discuss.ocaml.org/t/ocaml-5-0-0-is-out/10974/1>


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

  We have the pleasure of celebrating the birthdays of Jane Austen and
  Arthur C. Clarke by announcing the release of OCaml version 5.0.0.

  The highlight of this new major version of OCaml is the long-awaited
  runtime support for [shared memory parallelism] and [effect handlers].

  This multicore support is the culmination of more than 8 years of
  effort, and required a full rewrite of the OCaml runtime environment.
  Consequently, OCaml 5.0.0 is expected to be a more experimental
  version of OCaml than the usual OCaml releases.

  In this release, the native compiler only supports the x86-64 and
  arm64 architectures. In terms of operating systems, Linux, the BSDs,
  macOS and mingw64 on Windows are supported.

  We are planning to restore the support for most previously supported
  architectures and operating systems, and address remaining known
  issues over the course of the next year.

  Don’t let those words of caution hinder your experimentation with
  OCaml 5: OCaml 5 as a language is fully compatible with OCaml 4 down
  to the performance characteristics of your programs. In other words,
  any code that works with OCaml 4 should work the same with OCaml 5.

  The currently known exceptions to this rule are:
  • the removal of many long-deprecated functions and modules
  • changes to the internal runtime API
  • the performance of ephemerons is currently (and temporarily)
    strongly degraded.

  Please report any unexpected behaviours on the [OCaml issue tracker]
  (<https://github.com/ocaml/ocaml/issues>).

  During the maturing period for OCaml 5, the OCaml 4.14 branch will be
  maintained by backporting bug fixes from the OCaml 5 branch at regular
  intervals. The next release on the OCaml 4.14 branch, OCaml 4.14.1,
  should soon follow this release.

  The full list of changes can be found in the changelog below.


[shared memory parallelism]
<https://v2.ocaml.org/releases/5.0/manual/parallelism.html>

[effect handlers]
<https://v2.ocaml.org/releases/5.0/manual/effects.html>

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

  The base compiler can be installed as an opam switch with the
  following commands:
  ┌────
  │ opam update
  │ opam switch create 5.0.0
  └────

  It might be also interesting to check the new support for parallelism
  by installing the `domainslib' library with
  ┌────
  │ opam install domainslib
  └────
  The source code for the release candidate is also directly available
  on:

  • [GitHub]
  • [OCaml archives at Inria]


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

[OCaml archives at Inria]
<https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0.tar.gz>

◊ Fine-Tuned Compiler Configuration

  If you want to tweak the configuration of the compiler, you can switch
  to the option variant with:
  ┌────
  │ opam update
  │ opam switch create <switch_name> ocaml-variants.5.0.0+options <option_list>
  └────
  where `<option_list>' is a comma-separated list of `ocaml-option-*'
  packages. For instance, for a `flambda' and `no-flat-float-array'
  switch:
  ┌────
  │ opam switch create 5.0.0+flambda+nffa ocaml-variants.5.0.0+options ocaml-option-flambda ocaml-option-no-flat-float-array
  └────

  The command line above is slightly more complicated for opam versions
  before 2.1:

  ┌────
  │ opam update
  │ opam switch create <switch_name> --packages=ocaml-variants.5.0.0+options,<option_list>
  └────
  In both cases, all available options can be listed with `opam search
  ocaml-option'.


Changelog for OCaml 5.0.0 (16 December 2022)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  /Editor’s note/: as the Changelog is huge, please follow the archive
  link above to read it.


ThreadSanitizer support for OCaml 5.0.0 – first public release
══════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-threadsanitizer-support-for-ocaml-5-0-0-first-public-release/10975/1>


Olivier Nicole announced
────────────────────────

  We are happy to announce the first release of ThreadSanitizer support
  for OCaml 5.


Motivation in a nutshell
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  With OCaml 5 comes parallel programming, and, with it, the possibility
  of introducing *data races*. A data race is when two or more threads
  access the same memory location concurrently, and at least one of the
  accesses is a write. Data races can lead to particularly hard-to-debug
  problems.

  ThreadSanitizer (TSan for short) is an approach developed by Google to
  locate data races in code bases. It consists in instrumenting your
  executables to keep a history of previous memory accesses (at a
  certain performance cost), in order to detect a potential data race,
  *even when this race has no visible effect on the execution*.
  ThreadSanitizer has proved very effective in detecting hundreds of
  concurrency bugs in large projects.

  There is now a new opam switch, `5.0.0+tsan', on which all your
  libraries and executables will be compiled with ThreadSanitizer
  instrumentation. On that switch, the ThreadSanitizer runtime will run
  as part of your executables and emit reports when it detects a
  potential data race:
  ┌────
  │ ==================
  │ WARNING: ThreadSanitizer: data race (pid=4170290)
  │   Read of size 8 at 0x7f072bbfe498 by thread T4 (mutexes: write M0):
  │     #0 camlSimpleRace__fun_524 /tmp/simpleRace.ml:7 (simpleRace.exe+0x43dc9d)
  │     #1 camlStdlib__Domain__body_696 /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/stdlib/domain.ml:202
  │ (simpleRace.exe+0x47b5dc)
  │     #2 caml_start_program ??:? (simpleRace.exe+0x4f51c3)
  │     #3 caml_callback_exn /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/callback.c:168
  │ (simpleRace.exe+0x4c2b93)
  │     #4 caml_callback /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/callback.c:256
  │ (simpleRace.exe+0x4c36e3)
  │     #5 domain_thread_func /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/domain.c:1093
  │ (simpleRace.exe+0x4c6ad1)
  │ 
  │   Previous write of size 8 at 0x7f072bbfe498 by thread T1 (mutexes: write M1):
  │     #0 camlSimpleRace__fun_520 /tmp/simpleRace.ml:6 (simpleRace.exe+0x43dc45)
  │     #1 camlStdlib__Domain__body_696 /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/stdlib/domain.ml:202
  │ (simpleRace.exe+0x47b5dc)
  │     #2 caml_start_program ??:? (simpleRace.exe+0x4f51c3)
  │     #3 caml_callback_exn /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/callback.c:168
  │ (simpleRace.exe+0x4c2b93)
  │     #4 caml_callback /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/callback.c:256
  │ (simpleRace.exe+0x4c36e3)
  │     #5 domain_thread_func /home/olivier/.opam/5.0.0+tsan/.opam-switch/build/ocaml-variants.5.0.0+tsan/runtime/domain.c:1093
  │ (simpleRace.exe+0x4c6ad1)
  │ 
  │   Mutex M0 (0x000000567ad8) created at:
  │     #0 pthread_mutex_init /home/olivier/other_projects/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1316
  │ (libtsan.so.0+0x3cafb)
  │     [...]
  │ 
  │ SUMMARY: ThreadSanitizer: data race /tmp/simpleRace.ml:7 in camlSimpleRace__fun_524
  │ ==================
  │ ThreadSanitizer: reported 1 warnings
  └────
  OCaml executables are instrumented so that ThreadSanitizer will show
  precise backtraces, including when using exceptions, effect handlers,
  or C stubs.

  ThreadSanitizer support for OCaml is a joint work with Fabrice Buoro,
  based on the work of Anmol Sahoo.


Usage instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  At this stage, ThreadSanitizer for OCaml is supported only on the
  x86_64 architecture, and is not available on Windows.

  Internally, the OCaml instrumentation uses the [libunwind] library, so
  if you’re on Linux you will need to install it using your system’s
  package manager. If you’re a macOS user, you have nothing to do:
  libunwind is installed by default.

  Then you simply need to build and run your programs in the
  `5.0.0+tsan' switch:
  ┌────
  │ opam update
  │ opam switch create 5.0.0+tsan
  └────

  Usage examples and further information can be found in [the README] of
  the project.

  We are eager to get your feedback! We believe that running your
  Multicore programs or test suites with TSan can be a huge time-saver
  in debugging.


[libunwind] <https://github.com/libunwind/libunwind>

[the README]
<https://github.com/ocaml-multicore/ocaml-tsan/blob/tsan/README.adoc>


Guillaume Munch-Maccagnoni asked and Olivier Nicole replied
───────────────────────────────────────────────────────────

        This is using the C memory model to analyze OCaml
        programs, right?

  It works by instrumenting the executables with calls to the TSan
  runtime whose API follows the C model, yes. That’s why we use the
  mapping between the OCaml and C11 memory models described in
  <https://github.com/ocaml/ocaml/pull/10995>. As a consequence, every
  data race reported by TSan should be a data race in the OCaml sense,
  and conversely all OCaml races (on code paths that are actually
  executed at runtime) should be reported.

  For instance, from the point of view of TSan, all OCaml non-atomic
  stores are release stores (more precisely a sequence consisting of an
  acquire fence and a release store).


Parany for OCaml-5
══════════════════

  Archive: <https://discuss.ocaml.org/t/parany-for-ocaml-5/10968/1>


UnixJunkie announced
────────────────────

  Parany: generalized map reduce for parallel / mluti-core computers.

  Version v13.0.0 of Parany is made for OCaml >= 5.0.0.
  <https://github.com/UnixJunkie/parany/tree/domains> If you observe
  some performance improvement of your parallel programs, don’t hesitate
  to share!

  PS: apparently github doesn’t show the latest version of parany’s git
  repository; but the tagged v13.0.0 is the right version of the code
  for ocaml>=5


WebAssembly/Wasm and OCaml, by OCamlPro
═══════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/blog-webassembly-wasm-and-ocaml-by-ocamlpro/10973/1>


OCamlPro announced
──────────────────

  We just published a blog post “WebAssembly/Wasm and OCaml” introducing
  our contributions to the GC-related Working Group on Wasm:

  <https://ocamlpro.com/blog/2022_12_14_wasm_and_ocaml> This post will
  be followed in January by more technical posts.

  We are also looking for sponsors to fund our work on Wasm. Contact us
  if you are interested in the topic !


opam 2.1.4, opam-publish 2.2.0, opam-file-format 2.1.5
══════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-opam-2-1-4-opam-publish-2-2-0-opam-file-format-2-1-5/10999/1>


Kate announced
──────────────

  We are pleased to announce the minor release of [opam 2.1.4],
  [opam-publish 2.2.0] and [opam-file-format 2.1.5].

  This opam release consists of backported fixes:

  • Make opam able to fully build with OCaml 5.0. `dose3 >= 6.1` and
    `base64 >= 3.1.0` are now required ([#5357])
  • Fix a bug where opam would not output any explanation when a
    conflict arises when attempting to install a package ([#5378])

  The opam-publish release consists of the following breaking change:

  • Shorten the generated branch name. This is breaking change for
    people who want to force-push changes on an already opened PR using
    a previous version of opam-publish as the branch name might not be
    the same ([#141])

  and the following fixes:

  • Fix the github markdown syntax generated by opam-publish ([#131])
  • Disambiguate GitHub archive URL computed from repository and tag
    ([#135])
  • Upgrade to cmdliner >= 1.1.0 ([#134])
  • Support git remotes with multiple push targets ([#137])
  • Fix broken state if the initial opam-repository clone fails ([#140])

  The opam-file-format release consists of the following fixes:

  • Fix extra lines on non empty headers ([#49])
  • Make the tests flambda2-ready ([#52])
  • Fix build failure on OCaml 5.0 when using the non-dune build mode
    ([#50])

  To upgrade opam simply run:

  ┌────
  │ bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh) --version 2.1.4"
  └────
  For the rest, simply run:
  ┌────
  │ opam update
  │ opam upgrade opam-publish opam-file-format
  └────


[opam 2.1.4] <https://github.com/ocaml/opam/releases/tag/2.1.4>

[opam-publish 2.2.0]
<https://github.com/ocaml-opam/opam-publish/releases/tag/2.2.0>

[opam-file-format 2.1.5]
<https://github.com/ocaml/opam-file-format/releases/tag/2.1.5>

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

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

[#141] <https://github.com/ocaml-opam/opam-publish/issues/141>

[#131] <https://github.com/ocaml-opam/opam-publish/issues/131>

[#135] <https://github.com/ocaml-opam/opam-publish/issues/135>

[#134] <https://github.com/ocaml-opam/opam-publish/issues/134>

[#137] <https://github.com/ocaml-opam/opam-publish/issues/137>

[#140] <https://github.com/ocaml-opam/opam-publish/issues/140>

[#49] <https://github.com/ocaml/opam-file-format/issues/49>

[#52] <https://github.com/ocaml/opam-file-format/issues/52>

[#50] <https://github.com/ocaml/opam-file-format/issues/50>


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 at polytechnique.org>

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

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

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

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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20221220/67f19663/attachment-0001.html>


More information about the caml-news-weekly mailing list