[Caml-list] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt
2021-01-19T14:28:26Z

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

Hello

Here is the latest OCaml Weekly News, for the week of January 12 to 19,
2021.

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

Irmin 2.3.0
Dune 2.8.0
lwt-canceler.0.3
Interesting OCaml Articles
OCaml 4.12.0, first beta release
OCaml for ARM MacOS
Talk on OCaml Batteries at Houston Functional Programmers
Other OCaml News
Old CWN

Irmin 2.3.0
═══════════

Archive: <https://discuss.ocaml.org/t/ann-irmin-2-3-0/7084/1>

Craig Ferguson announced
────────────────────────

I'm very happy to announce the release of the Irmin 2.3.0 family of
packages, including:

• [`irmin-pack.2.3.0'], a storage backend for Irmin designed for and
used by Tezos. This release contains a host of performance
improvements as well as offline CLI features such as integrity
checking. It also contains a number of high-level design changes,
which were discussed in a recent [Tarides blog post].

Finally, `irmin-pack.2.3.0' also contains a prototype of the
[_layered_] `irmin-pack' store, which provides an [OverlayFS]-esque
mode of operation for `irmin-pack' in which the causal history of
the store can be chunked into independently-accessable
substores. This feature will eventually be deployed in a [future
version of Tezos].

• [`irmin-containers'], a collection of pre-defined mergeable data
structures built using Irmin and compatible with any backend. These
were originally provided by @kayceesrk as part of [`ezirmin'], and
has since been modernised and upstreamed by Anirudh S.

• `irmin-bench', a suite of benchmarks for Irmin for use with
[`current-bench'], an experimental continuous benchmarking
infrastructure for OCaml projects. Lots of work has been going on
behind the scenes to make this a general benchmarking infrastructure
for the Mirage ecosystem, including a recent [fancy UI overhaul] by
new contributor @rizo.

• [`repr'], an extraction of the `Irmin.Type' type representation
library for use in other packages. This package contains a set of
combinators for building run-time representations of types, along
with various generic operations defined over those representations,
including: equality, comparison, pretty-printing, JSON / binary
codecs, etc. The API of this library is currently a
work-in-progress, but we hope to use it more widely in the Mirage
ecosystem soon.

• [`semaphore-compat'], an extraction of the `Semaphore' library in
OCaml 4.12, for libraries that want to maintain compatibility with
earlier versions of OCaml.

The full list of changes to Irmin can be found [here].

Many thanks to our open-source contributors and collaborators. Happy
hacking!

[`irmin-pack.2.3.0'] <https://www.youtube.com/watch?v=v1lfMUM332w>

[Tarides blog post]
<https://tarides.com/blog/2020-09-08-irmin-september-2020-update>

[_layered_]
<https://gist.github.com/icristescu/1afb7f9f862f8e989b8b6c195908e7d0>

[OverlayFS] <https://en.wikipedia.org/wiki/OverlayFS>

[future version of Tezos]
<https://gitlab.com/tezos/tezos/-/merge_requests/2127>

[`irmin-containers']
<https://mirage.github.io/irmin/irmin-containers/Irmin_containers/index.html>

[`ezirmin'] <https://github.com/kayceesrk/ezirmin>

[`current-bench'] <https://github.com/ocurrent/current-bench/>

[fancy UI overhaul] <https://github.com/ocurrent/current-bench/pull/20>

[`repr'] <https://github.com/mirage/repr>

[`semaphore-compat'] <https://github.com/mirage/semaphore-compat>

[here]
<https://github.com/mirage/irmin/blob/master/CHANGES.md#230-2020-01-12>

Dune 2.8.0
══════════

Archive: <https://discuss.ocaml.org/t/ann-dune-2-8-0/7090/1>

Rudi Grinberg announced
───────────────────────

On behalf of the dune, I'm pleased to announce the release of dune
2.8.0. This release contains many bug fixes, performance improvements,
and interesting new features. I'll point out two new features that I'm
most excited about.

First is the experimental `dune_site' extension that makes it possible
to register and load plugins at runtime. This feature is quite
involved, but we've documented it extensively [in the manual].

Another cool feature is that we've eliminated the need for .merlin
files and all the caveats that came with them. Now, merlin talks to
dune directly to get precise configuration for every module. Say
goodbye to all those "approximate .merlin file" warnings!

I encourage everyone to upgrade as soon as possible, as earlier
versions are not compatible with OCaml 4.12. Happy Hacking.

Full change log:

[in the manual] <https://dune.readthedocs.io/en/stable/sites.html>

2.8.0 (13/01/2021)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

• `dune rules' accepts aliases and other non-path rules (#4063,
@mrmr1993)

• Action `(diff reference test_result)' now accept `reference' to be
absent and in that case consider that the reference is empty. Then
running `dune promote' will create the reference file. (#3795,
@bobot)

• Ignore special files (BLK, CHR, FIFO, SOCKET), (#3570, fixes #3124,
#3546, @ejgallego)

• Experimental: Simplify loading of additional files (data or code) at
runtime in programs by introducing specific installation sites. In
particular it allow to define plugins to be installed in these
sites. (#3104, #3794, fixes #1185, @bobot)

• Move all temporary files created by dune to run actions to a single
directory and make sure that actions executed by dune also use this
directory by setting `TMPDIR' (or `TEMP' on Windows). (#3691, fixes
#3422, @rgrinberg)

• Fix bootstrap script with custom configuration. (#3757, fixes #3774,
@marsam)

• Add the `executable' field to `inline_tests' to customize the
compilation flags of the test runner executable (#3747, fixes #3679,
@lubegasimon)

• Add `(enabled_if ...)' to `(copy_files ...)' (#3756, @nojb)

• Make sure Dune cleans up the status line before exiting (#3767,
fixes #3737, @alan-j-hu)

• Add `{gitlab,bitbucket}' as options for defining project sources
with `source' stanza `(source (<host> user/repo))' in the
`dune-project' file. (#3813, @rgrinberg)

• Fix generation of `META' and `dune-package' files when some targets
(byte, native, dynlink) are disabled. Previously, dune would
generate all archives for regardless of settings. (#3829, #4041,
@rgrinberg)

• Do not run ocamldep to for single module executables &
libraries. The dependency graph for such artifacts is trivial
(#3847, @rgrinberg)

• Fix cram tests inside vendored directories not being interpreted
correctly. (#3860, fixes #3843, @rgrinberg)

• Add `package' field to private libraries. This allows such libraries
to be installed and to be usable by other public libraries in the
same project (#3655, fixes #1017, @rgrinberg)

• Fix the `%{make}' variable on Windows by only checking for a `gmake'
binary on UNIX-like systems as a unrelated `gmake' binary might
exist on Windows. (#3853, @kit-ty-kate)

• Fix `$ dune install' modifying the build directory. This made the
build directory unusable when `$ sudo dune install' modified
permissions. (fix #3857, @rgrinberg)

• Fix handling of aliases given on the command line (using the `@' and
`@@' syntax) so as to correctly handle relative paths. (#3874, fixes
#3850, @nojb)

• Allow link time code generation to be used in preprocessing
executable. This makes it possible to use the build info module
inside the preprocessor. (#3848, fix #3848, @rgrinberg)

• Correctly call `git ls-tree' so unicode files are not quoted, this
fixes problems with `dune subst' in the presence of unicode
files. Fixes #3219 (#3879, @ejgallego)

• `dune subst' now accepts common command-line arguments such as
`--debug-backtraces' (#3878, @ejgallego)

• `dune describe' now also includes information about executables in
addition to that of libraries. (#3892, #3895, @nojb)

• instrumentation backends can now receive arguments via
`(instrumentation (backend <name> <args>))'. (#3906, #3932, @nojb)

• Tweak auto-formatting of `dune' files to improve
readability. (#3928, @nojb)

• Add a switch argument to opam when context is not default. (#3951,
@tmattio)

• Avoid pager when running `$ git diff' (#3912, @AltGr)

• Add `(root_module ..)' field to libraries & executables. This makes
it possible to use library dependencies shadowed by local modules
(#3825, @rgrinberg)

• Allow `(formatting ...)' field in `(env ...)' stanza to set
per-directory formatting specification. (#3942, @nojb)

• [coq] In `coq.theory', `:standard' for the `flags' field now uses
the flags set in `env' profile flags (#3931 , @ejgallego @rgrinberg)

• [coq] Add `-q' flag to `:standard' `coqc' flags , fixes #3924,
(#3931 , @ejgallego)

• Add support for Coq's native compute compilation mode (@ejgallego,
#3210)

• Add a `SUFFIX' directive in `.merlin' files for each dialect with no
preprocessing, to let merlin know of additional file extensions
(#3977, @vouillon)

• Stop promoting `.merlin' files. Write per-stanza Merlin
configurations in binary form. Add a new subcommand `dune
ocaml-merlin' that Merlin can use to query the configuration
files. The `allow_approximate_merlin' option is now useless and
deprecated. Dune now conflicts with `merlin < 3.4.0' and
`ocaml-lsp-server < 1.3.0' (#3554, @voodoos)

• Configurator: fix a bug introduced in 2.6.0 where the configurator
V1 API doesn't work at all when used outside of dune. (#4046,
@aalekseyev)

• Fix `libexec' and `libexec-private' variables. In cross-compilation
settings, they now point to the file in the host context. (#4058,
fixes #4057, @TheLortex)

• When running `$ dune subst', use project metadata as a fallback when
package metadata is missing. We also generate a warning when `(name
..)' is missing in `dune-project' files to avoid failures in
production builds.

• Remove support for passing `-nodynlink' for executables. It was
bypassed in most cases and not correct in other cases in particular
on arm32. (#4085, fixes #4069, fixes #2527, @emillon)

• Generate archive rules compatible with 4.12. Dune longer attempt to
generate an archive file if it's unnecessary (#3973, fixes #3766,
@rgrinberg)

• Fix generated Merlin configurations when multiple preprocessors are
defined for different modules in the same folder. (#4092, fixes
#2596, #1212 and #3409, @voodoos)

• Add the option `use_standard_c_and_cxx_flags' to `dune-project' that
1. disables the unconditional use of the `ocamlc_cflags' and
`ocamlc_cppflags' from `ocamlc -config' in C compiler calls, these
flags will be present in the `:standard' set instead; and 2. enables
the detection of the C compiler family and populates the `:standard'
set of flags with common default values when building CXX
stubs. (#3875, #3802, fix #3718 and #3528, @voodoos)

lwt-canceler.0.3
════════════════

Archive: <https://discuss.ocaml.org/t/ann-lwt-canceler-0-3/7092/1>

Raphaël Proust announced
────────────────────────

On behalf of [Nomadic Labs], I'm happy to announce the release of
Lwt-canceler version 0.3. Lwt-canceler is a small library to help
programs written using Lwt to synchronise promises around resource
clean-up. This library was developed as part of the [Tezos codebase]
before being released.

With this version, the code has matured significantly (including
tests, documentation and some refactoring); the next release will
probably be a version 1.0 at which point a more robust versioning
scheme will be used.

The documentation is available online:
<https://nomadic-labs.gitlab.io/lwt-canceler/lwt-canceler/Lwt_canceler/index.html>
The code is released under MIT License and hosted on Gitlab:
<https://gitlab.com/nomadic-labs/lwt-canceler> The new version is
available on opam: `opam install lwt-canceler'

Happy hacking!

[Nomadic Labs] <https://nomadic-labs.com/>

[Tezos codebase] <https://gitlab.com/tezos/tezos>

Interesting OCaml Articles
══════════════════════════

Archive:
<https://discuss.ocaml.org/t/interesting-ocaml-articles/1867/90>

Weng Shiwei announced
─────────────────────

Let me share my new blog post on understanding `format6' with
examples. <https://blog.tail.moe/2021/01/13/format6.html>

It's almost my reading note for the paper Format Unraveled (on module
Format) and experiments on utop. I tried not to be too verbose though.

Weng Shiwei later said
──────────────────────

Well, I made a sequel of `format6' post, *Understanding `format6' in
OCaml by diagrams*
<https://blog.tail.moe/2021/01/15/format6-diagram.html>

This time I just use four examples with four diagrams e.g. it's the
one for `Scanf.sscanf'

<https://aws1.discourse-cdn.com/standard11/uploads/ocaml/optimized/2X/f/f18093391072f739d70c68c2ccf4be92441078c2_2_1034x432.png>

p.s. It's a pity that I missed Gabriel's post [The 6 parameters of
(’a, ’b, ’c, ’d, ’e, ’f) format6] after writing that one.

[The 6 parameters of (’a, ’b, ’c, ’d, ’e, ’f) format6]
<http://gallium.inria.fr/blog/format6/>

OCaml 4.12.0, first beta release
════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ocaml-4-12-0-first-beta-release/7099/1>

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

The release of OCaml 4.12.0 is close.

The set of new features has been stabilized, and core opam packages
already work with this release. After three alpha releases, we have
created a first beta version to help you adapt your software to the
new features ahead of the release. Compared to the last alpha, this
beta contains only three new bug fixes and one change to the standard
library.

The base compiler can be installed as an opam switch with the
following commands
┌────
│ opam update
│ opam switch create 4.12.0~beta1 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
└────

If you want to tweak the configuration of the compiler, you can pick
configuration options with
┌────
│ opam update
│ opam switch create <switch_name> --packages=ocaml-variants.4.12.0~beta1+options,<option_list>
│ --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
└────
where <option_list> is a comma separated list of ocaml-option-*
packages. For instance, for a flambda and afl enabled switch:
┌────
│ opam switch create 4.12.0~beta1+flambda+afl
│ --packages=ocaml-variants.4.12.0~beta1+options,ocaml-option-flambda,ocaml-option-afl
│ --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 is available at these addresses:

• <https://github.com/ocaml/ocaml/archive/4.12.0-beta1.tar.gz>
• <https://caml.inria.fr/pub/distrib/ocaml-4.12/ocaml-4.12.0~beta1.tar.gz>

If you want to test this version, you may want to install the alpha
opam repository

<https://github.com/kit-ty-kate/opam-alpha-repository>

with

opam repo add alpha
git://github.com/kit-ty-kate/opam-alpha-repository.git

This alpha repository contains various packages patched with fixes in
the process of being upstreamed. Once the repository installed, these
patched packages will take precedence over the non-patched version.

If you find any bugs, please report them here:
<https://github.com/ocaml/ocaml/issues>

Changes from the third alpha release
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

Postponed features
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

• [9533], [10105], [10127] : Added String.starts_with and
String.ends_with. (Bernhard Schommer, review by Daniel Bünzli,
Gabriel Scherer and Alain Frisch)

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

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

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

Additional bug fixes
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

• [9096], [10096]: fix a 4.11.0 performance regression in
classes/objects declared within a function (Gabriel Scherer, review
by Leo White, report by Sacha Ayoun)

• [10106], [10112]: some expected-type explanations where forgotten
after some let-bindings (Gabriel Scherer, review by Thomas Refis and
Florian Angeletti, report by Daniil Baturin)

• [9326], [10125]: Gc.set incorrectly handles the three `custom_*'
fields, causing a performance regression (report by Emilio Jesús
Gallego Arias, analysis and fix by Stephen Dolan, code by Xavier
Leroy, review by Hugo Heuzard and Gabriel Scherer)

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

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

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

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

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

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

OCaml for ARM MacOS
═══════════════════

Archive: <https://discuss.ocaml.org/t/ocaml-for-arm-macos/6019/23>

Deep in this thread, Xavier Leroy said
──────────────────────────────────────

It's quite easy to get up to speed using the precompiled OPAM binary
for macOS/ARM64.

• Download [opam-2.0.7-arm64-macos].

• Move it to some directory in your PATH, rename it to `opam', and
make it executable. From a Terminal window:
┌────
│ mv ~/Downloads/opam-2.0.7-arm64-macos /usr/local/bin/opam
│ chmod +x /usr/local/bin/opam
└────

• Try to execute it: `opam init'. You will be blocked by the macOS
security checks, as the binary is not signed.

• Open Preferences / Security and Privacy. There should be a notice
"opam was blocked because…" and an "Allow Anyway" button. Click on
that button.

• Try again to execute `opam init'. You will be blocked again, but
now there is an "Open" button. Click on that button. `opam init'
should run and install the OCaml 4.10.2 compiler.

• From now on, you can run `opam' without being blocked. Use this
freedom to `opam install' the packages you need.

• Some packages that depend on external C libraries may fail to
install because these C libraries are not available. Normally we
would rely on Homebrew or MacPorts to provide these C libraries, but
these package collections are still being ported to macOS/ARM64.

As a reward for these minor inconveniences, you'll get excellent
performance running OCaml software such as Coq. Single-core
performance on a MacBook Air M1 is 20% better than the best x86
workstation I have access to.

[opam-2.0.7-arm64-macos]
<https://github.com/ocaml/opam/releases/download/2.0.7/opam-2.0.7-arm64-macos>

Talk on OCaml Batteries at Houston Functional Programmers
═════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/talk-on-ocaml-batteries-at-houston-functional-programmers/7103/1>

Claude Jager-Rubinson announced
───────────────────────────────

@UnixJunkie will be speaking (virtually, of course) on *OCaml
Batteries Included* at Houston Functional Programmers, this coming
Wednesday, Jan 20 at 7pm (U.S. Central time). His talk will cover
Batteries' history, place within the OCaml ecosystem, and comparisons
with OCaml's other alternative standard libraries. All are welcome to
join us, even if you're not from Houston. Complete details and Zoom
info are at [hfpug.org].

[hfpug.org] <https://hfpug.org>

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

From the ocamlcore planet blog
──────────────────────────────

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

• [Coq 8.13.0 is out]

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

[Coq 8.13.0 is out] <https://coq.inria.fr/news/coq-8-13-0-is-out.html>

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