No subject


Tue Jan 19 06:28:39 PST 2021


=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

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

  =E2=80=A2 [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
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  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] <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/>


--=-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2021-01-19 Tue 15:25 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
 />
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org mode" />
<style type=3D"text/css">
 <!--/*--><![CDATA[/*><!--*/
  .title  { text-align: center;
             margin-bottom: .2em; }
  .subtitle { text-align: center;
              font-size: medium;
              font-weight: bold;
              margin-top:0; }
  .todo   { font-family: monospace; color: red; }
  .done   { font-family: monospace; color: green; }
  .priority { font-family: monospace; color: orange; }
  .tag    { background-color: #eee; font-family: monospace;
            padding: 2px; font-size: 80%; font-weight: normal; }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
  .underline { text-decoration: underline; }
  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  p.verse { margin-left: 3%; }
  pre {
    border: 1px solid #ccc;
    box-shadow: 3px 3px 3px #eee;
    padding: 8pt;
    font-family: monospace;
    overflow: auto;
    margin: 1.2em;
  }
  pre.src {
    position: relative;
    overflow: visible;
    padding-top: 1.2em;
  }
  pre.src:before {
    display: none;
    position: absolute;
    background-color: white;
    top: -10px;
    right: 10px;
    padding: 3px;
    border: 1px solid black;
  }
  pre.src:hover:before { display: inline;}
  /* Languages per Org manual */
  pre.src-asymptote:before { content: 'Asymptote'; }
  pre.src-awk:before { content: 'Awk'; }
  pre.src-C:before { content: 'C'; }
  /* pre.src-C++ doesn't work in CSS */
  pre.src-clojure:before { content: 'Clojure'; }
  pre.src-css:before { content: 'CSS'; }
  pre.src-D:before { content: 'D'; }
  pre.src-ditaa:before { content: 'ditaa'; }
  pre.src-dot:before { content: 'Graphviz'; }
  pre.src-calc:before { content: 'Emacs Calc'; }
  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  pre.src-fortran:before { content: 'Fortran'; }
  pre.src-gnuplot:before { content: 'gnuplot'; }
  pre.src-haskell:before { content: 'Haskell'; }
  pre.src-hledger:before { content: 'hledger'; }
  pre.src-java:before { content: 'Java'; }
  pre.src-js:before { content: 'Javascript'; }
  pre.src-latex:before { content: 'LaTeX'; }
  pre.src-ledger:before { content: 'Ledger'; }
  pre.src-lisp:before { content: 'Lisp'; }
  pre.src-lilypond:before { content: 'Lilypond'; }
  pre.src-lua:before { content: 'Lua'; }
  pre.src-matlab:before { content: 'MATLAB'; }
  pre.src-mscgen:before { content: 'Mscgen'; }
  pre.src-ocaml:before { content: 'Objective Caml'; }
  pre.src-octave:before { content: 'Octave'; }
  pre.src-org:before { content: 'Org mode'; }
  pre.src-oz:before { content: 'OZ'; }
  pre.src-plantuml:before { content: 'Plantuml'; }
  pre.src-processing:before { content: 'Processing.js'; }
  pre.src-python:before { content: 'Python'; }
  pre.src-R:before { content: 'R'; }
  pre.src-ruby:before { content: 'Ruby'; }
  pre.src-sass:before { content: 'Sass'; }
  pre.src-scheme:before { content: 'Scheme'; }
  pre.src-screen:before { content: 'Gnu Screen'; }
  pre.src-sed:before { content: 'Sed'; }
  pre.src-sh:before { content: 'shell'; }
  pre.src-sql:before { content: 'SQL'; }
  pre.src-sqlite:before { content: 'SQLite'; }
  /* additional languages in org.el's org-babel-load-languages alist */
  pre.src-forth:before { content: 'Forth'; }
  pre.src-io:before { content: 'IO'; }
  pre.src-J:before { content: 'J'; }
  pre.src-makefile:before { content: 'Makefile'; }
  pre.src-maxima:before { content: 'Maxima'; }
  pre.src-perl:before { content: 'Perl'; }
  pre.src-picolisp:before { content: 'Pico Lisp'; }
  pre.src-scala:before { content: 'Scala'; }
  pre.src-shell:before { content: 'Shell Script'; }
  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
  /* additional language identifiers per "defun org-babel-execute"
       in ob-*.el */
  pre.src-cpp:before  { content: 'C++'; }
  pre.src-abc:before  { content: 'ABC'; }
  pre.src-coq:before  { content: 'Coq'; }
  pre.src-groovy:before  { content: 'Groovy'; }
  /* additional language identifiers from org-babel-shell-names in
     ob-shell.el: ob-shell is the only babel language using a lambda to put
     the execution function name together. */
  pre.src-bash:before  { content: 'bash'; }
  pre.src-csh:before  { content: 'csh'; }
  pre.src-ash:before  { content: 'ash'; }
  pre.src-dash:before  { content: 'dash'; }
  pre.src-ksh:before  { content: 'ksh'; }
  pre.src-mksh:before  { content: 'mksh'; }
  pre.src-posh:before  { content: 'posh'; }
  /* Additional Emacs modes also supported by the LaTeX listings package */
  pre.src-ada:before { content: 'Ada'; }
  pre.src-asm:before { content: 'Assembler'; }
  pre.src-caml:before { content: 'Caml'; }
  pre.src-delphi:before { content: 'Delphi'; }
  pre.src-html:before { content: 'HTML'; }
  pre.src-idl:before { content: 'IDL'; }
  pre.src-mercury:before { content: 'Mercury'; }
  pre.src-metapost:before { content: 'MetaPost'; }
  pre.src-modula-2:before { content: 'Modula-2'; }
  pre.src-pascal:before { content: 'Pascal'; }
  pre.src-ps:before { content: 'PostScript'; }
  pre.src-prolog:before { content: 'Prolog'; }
  pre.src-simula:before { content: 'Simula'; }
  pre.src-tcl:before { content: 'tcl'; }
  pre.src-tex:before { content: 'TeX'; }
  pre.src-plain-tex:before { content: 'Plain TeX'; }
  pre.src-verilog:before { content: 'Verilog'; }
  pre.src-vhdl:before { content: 'VHDL'; }
  pre.src-xml:before { content: 'XML'; }
  pre.src-nxml:before { content: 'XML'; }
  /* add a generic configuration mode; LaTeX export needs an additional
     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
  pre.src-conf:before { content: 'Configuration File'; }

  table { border-collapse:collapse; }
  caption.t-above { caption-side: top; }
  caption.t-bottom { caption-side: bottom; }
  td, th { vertical-align:top;  }
  th.org-right  { text-align: center;  }
  th.org-left   { text-align: center;   }
  th.org-center { text-align: center; }
  td.org-right  { text-align: right;  }
  td.org-left   { text-align: left;   }
  td.org-center { text-align: center; }
  dt { font-weight: bold; }
  .footpara { display: inline; }
  .footdef  { margin-bottom: 1em; }
  .figure { padding: 1em; }
  .figure p { text-align: center; }
  .equation-container {
    display: table;
    text-align: center;
    width: 100%;
  }
  .equation {
    vertical-align: middle;
  }
  .equation-label {
    display: table-cell;
    text-align: right;
    vertical-align: middle;
  }
  .inlinetask {
    padding: 10px;
    border: 2px solid gray;
    margin: 10px;
    background: #ffffcc;
  }
  #org-div-home-and-up
   { text-align: right; font-size: 70%; white-space: nowrap; }
  textarea { overflow-x: auto; }
  .linenr { font-size: smaller }
  .code-highlighted { background-color: #ffff00; }
  .org-info-js_info-navigation { border-style: none; }
  #org-info-js_console-label
    { font-size: 10px; font-weight: bold; white-space: nowrap; }
  .org-info-js_search-highlight
    { background-color: #ffff00; color: #000000; font-weight: bold; }
  .org-svg { width: 90%; }
  /*]]>*/-->
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
<script type=3D"text/javascript">
/*
@licstart  The following is the entire license notice for the
JavaScript code in this tag.

Copyright (C) 2012-2020 Free Software Foundation, Inc.

The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version.  The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.


@licend  The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
 function CodeHighlightOn(elem, id)
 {
   var target =3D document.getElementById(id);
   if(null !=3D target) {
     elem.cacheClassElem =3D elem.className;
     elem.cacheClassTarget =3D target.className;
     target.className =3D "code-highlighted";
     elem.className   =3D "code-highlighted";
   }
 }
 function CodeHighlightOff(elem, id)
 {
   var target =3D document.getElementById(id);
   if(elem.cacheClassElem)
     elem.className =3D elem.cacheClassElem;
   if(elem.cacheClassTarget)
     target.className =3D elem.cacheClassTarget;
 }
/*]]>*///-->
</script>
</head>
<body>
<div id=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"http://alan.petitepomme.net/cwn/2021.01.12.html">Previous Week</=
a> <a href=3D"http://alan.petitepomme.net/cwn/index.html">Up</a> <a href=3D=
"http://alan.petitepomme.net/cwn/2021.01.26.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of January 12 to 19, 202=
1.
</p>

<div id=3D"table-of-contents">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents">
<ul>
<li><a href=3D"#1">Irmin 2.3.0</a></li>
<li><a href=3D"#2">Dune 2.8.0</a></li>
<li><a href=3D"#3">lwt-canceler.0.3</a></li>
<li><a href=3D"#4">Interesting OCaml Articles</a></li>
<li><a href=3D"#5">OCaml 4.12.0, first beta release</a></li>
<li><a href=3D"#6">OCaml for ARM MacOS</a></li>
<li><a href=3D"#7">Talk on OCaml Batteries at Houston Functional Programmer=
s</a></li>
<li><a href=3D"#8">Other OCaml News</a></li>
<li><a href=3D"#org4cd99cc">Old CWN</a></li>
</ul>
</div>
</div>


<div id=3D"outline-container-org6cb1638" class=3D"outline-2">
<h2 id=3D"1">Irmin 2.3.0</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-irmin-2-3-0/7084/1">htt=
ps://discuss.ocaml.org/t/ann-irmin-2-3-0/7084/1</a>
</p>
</div>

<div id=3D"outline-container-orgff3d825" class=3D"outline-3">
<h3 id=3D"orgff3d825">Craig Ferguson announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgff3d825">
<p>
I'm very happy to announce the release of the Irmin 2.3.0 family of package=
s, including:
</p>

<ul class=3D"org-ul">
<li><p>
<a href=3D"https://www.youtube.com/watch?v=3Dv1lfMUM332w"><code>irmin-pack.=
2.3.0</code></a>, a storage backend for Irmin designed for and used by Tezo=
s. This release contains a host of performance improvements as well as offl=
ine CLI features such as integrity checking. It also contains a number of h=
igh-level design changes, which were discussed in a recent <a href=3D"https=
://tarides.com/blog/2020-09-08-irmin-september-2020-update">Tarides blog po=
st</a>.
</p>

<p>
Finally, <code>irmin-pack.2.3.0</code> also contains a prototype of the <a =
href=3D"https://gist.github.com/icristescu/1afb7f9f862f8e989b8b6c195908e7d0=
"><span class=3D"underline">layered</span></a> <code>irmin-pack</code> stor=
e, which provides an <a href=3D"https://en.wikipedia.org/wiki/OverlayFS">Ov=
erlayFS</a>-esque mode of operation for <code>irmin-pack</code> in which th=
e causal history of the store can be chunked into independently-accessable =
substores. This feature will eventually be deployed in a <a href=3D"https:/=
/gitlab.com/tezos/tezos/-/merge_requests/2127">future version of Tezos</a>.
</p></li>

<li><a href=3D"https://mirage.github.io/irmin/irmin-containers/Irmin_contai=
ners/index.html"><code>irmin-containers</code></a>, a collection of pre-def=
ined mergeable data structures built using Irmin and compatible with any ba=
ckend. These were originally provided by @kayceesrk as part of <a href=3D"h=
ttps://github.com/kayceesrk/ezirmin"><code>ezirmin</code></a>, and has sinc=
e been modernised and upstreamed by Anirudh S.</li>

<li><code>irmin-bench</code>, a suite of benchmarks for Irmin for use with =
<a href=3D"https://github.com/ocurrent/current-bench/"><code>current-bench<=
/code></a>, an experimental continuous benchmarking infrastructure for OCam=
l 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 <a href=3D"https://github.com/ocurrent/current-bench/pull/20">fancy =
UI overhaul</a> by new contributor @rizo.</li>

<li><a href=3D"https://github.com/mirage/repr"><code>repr</code></a>, an ex=
traction of the <code>Irmin.Type</code> 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 d=
efined 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 ecosyste=
m soon.</li>

<li><a href=3D"https://github.com/mirage/semaphore-compat"><code>semaphore-=
compat</code></a>, an extraction of the <code>Semaphore</code> library in O=
Caml 4.12, for libraries that want to maintain compatibility with earlier v=
ersions of OCaml.</li>
</ul>

<p>
The full list of changes to Irmin can be found
<a href=3D"https://github.com/mirage/irmin/blob/master/CHANGES.md#230-2020-=
01-12">here</a>.
</p>

<p>
Many thanks to our open-source contributors and collaborators. Happy hackin=
g!
</p>
</div>
</div>
</div>




<div id=3D"outline-container-org9f48f30" class=3D"outline-2">
<h2 id=3D"2">Dune 2.8.0</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-dune-2-8-0/7090/1">http=
s://discuss.ocaml.org/t/ann-dune-2-8-0/7090/1</a>
</p>
</div>

<div id=3D"outline-container-org51804de" class=3D"outline-3">
<h3 id=3D"org51804de">Rudi Grinberg announced</h3>
<div class=3D"outline-text-3" id=3D"text-org51804de">
<p>
On behalf of the dune, I'm pleased to announce the release of dune 2.8.0. T=
his release contains many bug fixes,
performance improvements, and interesting new features. I'll point out two =
new features that I'm most excited about.
</p>

<p>
First is the experimental <code>dune_site</code> extension that makes it po=
ssible to register and load plugins at runtime. This
feature is quite involved, but we've documented it extensively <a href=3D"h=
ttps://dune.readthedocs.io/en/stable/sites.html">in the
manual</a>.
</p>

<p>
Another cool feature is that we've eliminated the need for .merlin files an=
d all the caveats that came with them.
Now, merlin talks to dune directly to get precise configuration for every m=
odule. Say goodbye to all those
"approximate .merlin file" warnings!
</p>

<p>
I encourage everyone to upgrade as soon as possible, as earlier versions ar=
e not compatible with OCaml 4.12. Happy
Hacking.
</p>

<p>
Full change log:
</p>
</div>

<div id=3D"outline-container-orgb66af6b" class=3D"outline-4">
<h4 id=3D"orgb66af6b">2.8.0 (13/01/2021)</h4>
<div class=3D"outline-text-4" id=3D"text-orgb66af6b">
<ul class=3D"org-ul">
<li><code>dune rules</code> accepts aliases and other non-path rules (#4063=
, @mrmr1993)</li>

<li>Action <code>(diff reference test_result)</code> now accept <code>refer=
ence</code> to be absent and
in that case consider that the reference is empty. Then running <code>dune =
promote</code>
will create the reference file. (#3795, @bobot)</li>

<li>Ignore special files (BLK, CHR, FIFO, SOCKET), (#3570, fixes #3124, #35=
46,
@ejgallego)</li>

<li>Experimental: Simplify loading of additional files (data or code) at ru=
ntime
in programs by introducing specific installation sites. In particular it al=
low
to define plugins to be installed in these sites. (#3104, #3794, fixes #118=
5,
@bobot)</li>

<li>Move all temporary files created by dune to run actions to a single dir=
ectory
and make sure that actions executed by dune also use this directory by sett=
ing
<code>TMPDIR</code> (or <code>TEMP</code> on Windows). (#3691, fixes #3422,=
 @rgrinberg)</li>

<li>Fix bootstrap script with custom configuration. (#3757, fixes #3774, @m=
arsam)</li>

<li>Add the <code>executable</code> field to <code>inline_tests</code> to c=
ustomize the compilation
flags of the test runner executable (#3747, fixes #3679, @lubegasimon)</li>

<li>Add <code>(enabled_if ...)</code> to <code>(copy_files ...)</code> (#37=
56, @nojb)</li>

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

<li>Add <code>{gitlab,bitbucket}</code> as options for defining project sou=
rces with <code>source</code>
stanza <code>(source (&lt;host&gt; user/repo))</code> in the <code>dune-pro=
ject</code> file.  (#3813,
@rgrinberg)</li>

<li>Fix generation of <code>META</code> and <code>dune-package</code> files=
 when some targets (byte,
native, dynlink) are disabled. Previously, dune would generate all archives
for regardless of settings. (#3829, #4041, @rgrinberg)</li>

<li>Do not run ocamldep to for single module executables &amp; libraries. T=
he
dependency graph for such artifacts is trivial (#3847, @rgrinberg)</li>

<li>Fix cram tests inside vendored directories not being interpreted correc=
tly.
(#3860, fixes #3843, @rgrinberg)</li>

<li>Add <code>package</code> field to private libraries. This allows such l=
ibraries to be
installed and to be usable by other public libraries in the same project
(#3655, fixes #1017, @rgrinberg)</li>

<li>Fix the <code>%{make}</code> variable on Windows by only checking for a=
 <code>gmake</code> binary
on UNIX-like systems as a unrelated <code>gmake</code> binary might exist o=
n Windows.
(#3853, @kit-ty-kate)</li>

<li>Fix <code>$ dune install</code> modifying the build directory. This mad=
e the build
directory unusable when <code>$ sudo dune install</code> modified permissio=
ns. (fix
#3857, @rgrinberg)</li>

<li>Fix handling of aliases given on the command line (using the <code>@</c=
ode> and <code>@@</code>
syntax) so as to correctly handle relative paths. (#3874, fixes #3850, @noj=
b)</li>

<li>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)</li>

<li>Correctly call <code>git ls-tree</code> so unicode files are not quoted=
, this fixes
problems with <code>dune subst</code> in the presence of unicode files. Fix=
es #3219
(#3879, @ejgallego)</li>

<li><code>dune subst</code> now accepts common command-line arguments such =
as
<code>--debug-backtraces</code> (#3878, @ejgallego)</li>

<li><code>dune describe</code> now also includes information about executab=
les in addition to
that of libraries. (#3892, #3895, @nojb)</li>

<li>instrumentation backends can now receive arguments via <code>(instrumen=
tation
  (backend &lt;name&gt; &lt;args&gt;))</code>. (#3906, #3932, @nojb)</li>

<li>Tweak auto-formatting of <code>dune</code> files to improve readability=
. (#3928, @nojb)</li>

<li>Add a switch argument to opam when context is not default. (#3951, @tma=
ttio)</li>

<li>Avoid pager when running <code>$ git diff</code> (#3912, @AltGr)</li>

<li>Add <code>(root_module ..)</code> field to libraries &amp; executables.=
 This makes it
possible to use library dependencies shadowed by local modules (#3825,
@rgrinberg)</li>

<li>Allow <code>(formatting ...)</code> field in <code>(env ...)</code> sta=
nza to set per-directory
formatting specification. (#3942, @nojb)</li>

<li>[coq] In <code>coq.theory</code>, <code>:standard</code> for the <code>=
flags</code> field now uses the
flags set in <code>env</code> profile flags (#3931 , @ejgallego @rgrinberg)=
</li>

<li>[coq] Add <code>-q</code> flag to <code>:standard</code> <code>coqc</co=
de> flags , fixes #3924, (#3931 , @ejgallego)</li>

<li>Add support for Coq's native compute compilation mode (@ejgallego, #321=
0)</li>

<li>Add a <code>SUFFIX</code> directive in <code>.merlin</code> files for e=
ach dialect with no
preprocessing, to let merlin know of additional file extensions (#3977,
@vouillon)</li>

<li>Stop promoting <code>.merlin</code> files. Write per-stanza Merlin conf=
igurations in
binary form. Add a new subcommand <code>dune ocaml-merlin</code> that Merli=
n can use to
query the configuration files. The <code>allow_approximate_merlin</code> op=
tion is now
useless and deprecated. Dune now conflicts with <code>merlin &lt; 3.4.0</co=
de> and
<code>ocaml-lsp-server &lt; 1.3.0</code> (#3554, @voodoos)</li>

<li>Configurator: fix a bug introduced in 2.6.0 where the configurator V1 A=
PI
doesn't work at all when used outside of dune. (#4046, @aalekseyev)</li>

<li>Fix <code>libexec</code> and <code>libexec-private</code> variables. In=
 cross-compilation settings,
they now point to the file in the host context. (#4058, fixes #4057,
@TheLortex)</li>

<li>When running <code>$ dune subst</code>, use project metadata as a fallb=
ack when package
metadata is missing. We also generate a warning when <code>(name ..)</code>=
 is missing in
<code>dune-project</code> files to avoid failures in production builds.</li>

<li>Remove support for passing <code>-nodynlink</code> for executables. It =
was bypassed in
most cases and not correct in other cases in particular on arm32.
(#4085, fixes #4069, fixes #2527, @emillon)</li>

<li>Generate archive rules compatible with 4.12. Dune longer attempt to gen=
erate
an archive file if it's unnecessary (#3973, fixes #3766, @rgrinberg)</li>

<li>Fix generated Merlin configurations when multiple preprocessors are def=
ined
for different modules in the same folder. (#4092, fixes #2596, #1212 and
#3409, @voodoos)</li>

<li>Add the option <code>use_standard_c_and_cxx_flags</code> to <code>dune-=
project</code> that 1.
disables the unconditional use of the <code>ocamlc_cflags</code> and <code>=
ocamlc_cppflags</code>
from <code>ocamlc -config</code> in C compiler calls, these flags will be p=
resent in the
<code>:standard</code> set instead; and 2. enables the detection of the C c=
ompiler family
and populates the <code>:standard</code> set of flags with common default v=
alues when
building CXX stubs. (#3875, #3802, fix #3718 and #3528, @voodoos)</li>
</ul>
</div>
</div>
</div>
</div>




<div id=3D"outline-container-org98f48f8" class=3D"outline-2">
<h2 id=3D"3">lwt-canceler.0.3</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-lwt-canceler-0-3/7092/1=
">https://discuss.ocaml.org/t/ann-lwt-canceler-0-3/7092/1</a>
</p>
</div>

<div id=3D"outline-container-orgc8cdd66" class=3D"outline-3">
<h3 id=3D"orgc8cdd66">Rapha=C3=ABl Proust announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc8cdd66">
<p>
On behalf of <a href=3D"https://nomadic-labs.com/">Nomadic Labs</a>, I'm ha=
ppy 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 <a href=3D"https://gitl=
ab.com/tezos/tezos">Tezos codebase</a> before being
released.
</p>

<p>
With this version, the code has matured significantly (including tests, doc=
umentation and some refactoring); the next
release will probably be a version 1.0 at which point a more robust version=
ing scheme will be used.
</p>

<p>
The documentation is available online:
<a href=3D"https://nomadic-labs.gitlab.io/lwt-canceler/lwt-canceler/Lwt_can=
celer/index.html">https://nomadic-labs.gitlab.io/lwt-canceler/lwt-canceler/=
Lwt_canceler/index.html</a>
The code is released under MIT License and hosted on Gitlab: <a href=3D"htt=
ps://gitlab.com/nomadic-labs/lwt-canceler">https://gitlab.com/nomadic-labs/=
lwt-canceler</a>
The new version is available on opam: <code>opam install lwt-canceler</code>
</p>

<p>
Happy hacking!
</p>
</div>
</div>
</div>




<div id=3D"outline-container-org466cb19" class=3D"outline-2">
<h2 id=3D"4">Interesting OCaml Articles</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/interesting-ocaml-articles/=
1867/90">https://discuss.ocaml.org/t/interesting-ocaml-articles/1867/90</a>
</p>
</div>

<div id=3D"outline-container-orgefb1450" class=3D"outline-3">
<h3 id=3D"orgefb1450">Weng Shiwei announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgefb1450">
<p>
Let me share my new blog post on understanding <code>format6</code> with ex=
amples.
<a href=3D"https://blog.tail.moe/2021/01/13/format6.html">https://blog.tail=
.moe/2021/01/13/format6.html</a>
</p>

<p>
It's almost my reading note for the paper Format Unraveled (on module Forma=
t) and experiments on utop. I tried not to
be too verbose though.
</p>
</div>
</div>


<div id=3D"outline-container-orgaefa46c" class=3D"outline-3">
<h3 id=3D"orgaefa46c">Weng Shiwei later said</h3>
<div class=3D"outline-text-3" id=3D"text-orgaefa46c">
<p>
Well, I made a sequel of <code>format6</code> post,
<b>Understanding <code>format6</code> in OCaml by diagrams</b>
<a href=3D"https://blog.tail.moe/2021/01/15/format6-diagram.html">https://b=
log.tail.moe/2021/01/15/format6-diagram.html</a>
</p>

<p>
This time I just use four examples with four diagrams e.g. it's the one for=
 <code>Scanf.sscanf</code>
</p>


<div class=3D"figure">
<p><img src=3D"https://aws1.discourse-cdn.com/standard11/uploads/ocaml/opti=
mized/2X/f/f18093391072f739d70c68c2ccf4be92441078c2_2_1034x432.png" alt=3D"=
f18093391072f739d70c68c2ccf4be92441078c2_2_1034x432.png" />
</p>
</div>

<p>
p.s. It's a pity that I missed Gabriel's post <a href=3D"http://gallium.inr=
ia.fr/blog/format6/">The 6 parameters of (=E2=80=99a, =E2=80=99b, =E2=80=99=
c, =E2=80=99d, =E2=80=99e, =E2=80=99f)
format6</a> after writing that one.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-org0dafaf0" class=3D"outline-2">
<h2 id=3D"5">OCaml 4.12.0, first beta release</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ocaml-4-12-0-first-beta-rel=
ease/7099/1">https://discuss.ocaml.org/t/ocaml-4-12-0-first-beta-release/70=
99/1</a>
</p>
</div>

<div id=3D"outline-container-orgee2f34a" class=3D"outline-3">
<h3 id=3D"orgee2f34a">octachron announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgee2f34a">
<p>
The release of OCaml 4.12.0 is close.
</p>

<p>
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 t=
he
release. Compared to the last alpha, this beta contains only three new bug =
fixes
and one change to the standard library.
</p>

<p>
The base compiler can be installed as an opam switch with the following com=
mands
</p>
<pre class=3D"example">
opam update
opam switch create 4.12.0~beta1 --repositories=3Ddefault,beta=3Dgit+https:/=
/github.com/ocaml/ocaml-beta-repository.git
</pre>

<p>
If you want to tweak the configuration of the compiler, you can pick config=
uration options with
</p>
<pre class=3D"example">
opam update
opam switch create &lt;switch_name&gt; --packages=3Docaml-variants.4.12.0~b=
eta1+options,&lt;option_list&gt;
--repositories=3Ddefault,beta=3Dgit+https://github.com/ocaml/ocaml-beta-rep=
ository.git
</pre>
<p>
where &lt;option_list&gt; is a comma separated list of ocaml-option-* packa=
ges. For
instance, for a flambda and afl enabled switch:
</p>
<pre class=3D"example">
opam switch create 4.12.0~beta1+flambda+afl
--packages=3Docaml-variants.4.12.0~beta1+options,ocaml-option-flambda,ocaml=
-option-afl
--repositories=3Ddefault,beta=3Dgit+https://github.com/ocaml/ocaml-beta-rep=
ository.git
</pre>
<p>
All available options can be listed with "opam search ocaml-option".
</p>

<p>
The source code is available at these addresses:
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://github.com/ocaml/ocaml/archive/4.12.0-beta1.tar.gz">=
https://github.com/ocaml/ocaml/archive/4.12.0-beta1.tar.gz</a></li>
<li><a href=3D"https://caml.inria.fr/pub/distrib/ocaml-4.12/ocaml-4.12.0~be=
ta1.tar.gz">https://caml.inria.fr/pub/distrib/ocaml-4.12/ocaml-4.12.0~beta1=
.tar.gz</a></li>
</ul>

<p>
If you want to test this version, you may want to install the alpha opam re=
pository
</p>

<p>
<a href=3D"https://github.com/kit-ty-kate/opam-alpha-repository">https://gi=
thub.com/kit-ty-kate/opam-alpha-repository</a>
</p>

<p>
with
</p>

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

<p>
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.
</p>

<p>
If you find any bugs, please report them here:
 <a href=3D"https://github.com/ocaml/ocaml/issues">https://github.com/ocaml=
/ocaml/issues</a>
</p>
</div>

<div id=3D"outline-container-org5e31bb7" class=3D"outline-4">
<h4 id=3D"org5e31bb7">Changes from the third alpha release</h4>
<div class=3D"outline-text-4" id=3D"text-org5e31bb7">
</div>
<div id=3D"outline-container-org61b5c2d" class=3D"outline-5">
<h5 id=3D"org61b5c2d">Postponed features</h5>
<div class=3D"outline-text-5" id=3D"text-org61b5c2d">
<ul class=3D"org-ul">
<li><a href=3D"https://github.com/ocaml/ocaml/issues/9533">9533</a>, <a hre=
f=3D"https://github.com/ocaml/ocaml/issues/10105">10105</a>, <a href=3D"htt=
ps://github.com/ocaml/ocaml/issues/10127">10127</a> : Added String.starts_w=
ith and String.ends_with. (Bernhard Schommer, review by Daniel B=C3=BCnzli,=
 Gabriel Scherer and Alain Frisch)</li>
</ul>
</div>
</div>

<div id=3D"outline-container-orgbd930d2" class=3D"outline-5">
<h5 id=3D"orgbd930d2">Additional bug fixes</h5>
<div class=3D"outline-text-5" id=3D"text-orgbd930d2">
<ul class=3D"org-ul">
<li><a href=3D"https://github.com/ocaml/ocaml/issues/9096">9096</a>, <a hre=
f=3D"https://github.com/ocaml/ocaml/issues/10096">10096</a>: fix a 4.11.0 p=
erformance regression in classes/objects declared within a function (Gabrie=
l Scherer, review by Leo White, report by Sacha Ayoun)</li>

<li><a href=3D"https://github.com/ocaml/ocaml/issues/10106">10106</a>, <a h=
ref=3D"https://github.com/ocaml/ocaml/issues/10112">10112</a>: some expecte=
d-type explanations where forgotten after some let-bindings (Gabriel Schere=
r, review by Thomas Refis and Florian Angeletti, report by Daniil Baturin)<=
/li>

<li><a href=3D"https://github.com/ocaml/ocaml/issues/9326">9326</a>, <a hre=
f=3D"https://github.com/ocaml/ocaml/issues/10125">10125</a>: Gc.set incorre=
ctly handles the three <code>custom_*</code> fields, causing a performance =
regression (report by Emilio Jes=C3=BAs Gallego Arias, analysis and fix by =
Stephen Dolan, code by Xavier Leroy, review by Hugo Heuzard and Gabriel Sch=
erer)</li>
</ul>
</div>
</div>
</div>
</div>
</div>




<div id=3D"outline-container-org6867dda" class=3D"outline-2">
<h2 id=3D"6">OCaml for ARM MacOS</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ocaml-for-arm-macos/6019/23=
">https://discuss.ocaml.org/t/ocaml-for-arm-macos/6019/23</a>
</p>
</div>

<div id=3D"outline-container-org354023d" class=3D"outline-3">
<h3 id=3D"org354023d">Deep in this thread, Xavier Leroy said</h3>
<div class=3D"outline-text-3" id=3D"text-org354023d">
<p>
It's quite easy to get up to speed using the precompiled OPAM binary for ma=
cOS/ARM64.
</p>

<ul class=3D"org-ul">
<li>Download <a href=3D"https://github.com/ocaml/opam/releases/download/2.0=
.7/opam-2.0.7-arm64-macos">opam-2.0.7-arm64-macos</a>.</li>

<li>Move it to some directory in your PATH, rename it to <code>opam</code>,=
 and make it executable.  From a Terminal window:</li>
</ul>
<pre class=3D"example">
mv ~/Downloads/opam-2.0.7-arm64-macos /usr/local/bin/opam
chmod +x /usr/local/bin/opam
</pre>

<ul class=3D"org-ul">
<li>Try to execute it: <code>opam init</code>.  You will be blocked by the =
macOS security checks, as the binary is not signed.</li>

<li>Open Preferences / Security and Privacy.  There should be a notice "opa=
m was blocked because&#x2026;" and an "Allow Anyway" button.  Click on that=
 button.</li>

<li>Try again to execute <code>opam init</code>.  You will be blocked again=
, but now there is an "Open" button.  Click on that button. <code>opam init=
</code> should run and install the OCaml 4.10.2 compiler.</li>

<li>From now on, you can run <code>opam</code> without being blocked.  Use =
this freedom to <code>opam install</code> the packages you need.</li>

<li>Some packages that depend on external C libraries may fail to install b=
ecause these C libraries are not available. Normally we would rely on Homeb=
rew or MacPorts to provide these C libraries, but these package collections=
 are still being ported to macOS/ARM64.</li>
</ul>

<p>
As a reward for these minor inconveniences, you'll get excellent performanc=
e 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.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-org9521fe3" class=3D"outline-2">
<h2 id=3D"7">Talk on OCaml Batteries at Houston Functional Programmers</h2>
<div class=3D"outline-text-2" id=3D"text-7">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/talk-on-ocaml-batteries-at-=
houston-functional-programmers/7103/1">https://discuss.ocaml.org/t/talk-on-=
ocaml-batteries-at-houston-functional-programmers/7103/1</a>
</p>
</div>

<div id=3D"outline-container-org374373d" class=3D"outline-3">
<h3 id=3D"org374373d">Claude Jager-Rubinson announced</h3>
<div class=3D"outline-text-3" id=3D"text-org374373d">
<p>
@UnixJunkie will be speaking (virtually, of course) on <b>OCaml Batteries I=
ncluded</b> at Houston Functional Programmers,
this coming Wednesday, Jan 20 at 7pm (U.S. Central time).  His talk will co=
ver Batteries' history, place within the
OCaml ecosystem, and comparisons with OCaml's other alternative standard li=
braries.  All are welcome to join us, even
if you're not from Houston.  Complete details and Zoom info are at <a href=
=3D"https://hfpug.org">hfpug.org</a>.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-org4a3d2a4" class=3D"outline-2">
<h2 id=3D"8">Other OCaml News</h2>
<div class=3D"outline-text-2" id=3D"text-8">
</div>
<div id=3D"outline-container-org7953f30" class=3D"outline-3">
<h3 id=3D"org7953f30">From the ocamlcore planet blog</h3>
<div class=3D"outline-text-3" id=3D"text-org7953f30">
<p>
Here are links from many OCaml blogs aggregated at <a href=3D"http://ocaml.=
org/community/planet/">OCaml Planet</a>.
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://coq.inria.fr/news/coq-8-13-0-is-out.html">Coq 8.13.0=
 is out</a></li>
</ul>
</div>
</div>
</div>




<div id=3D"outline-container-org4cd99cc" class=3D"outline-2">
<h2 id=3D"org4cd99cc">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org4cd99cc">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt at polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"http://alan.petitepomme.net/cwn/">the archive</a> or the <a=
 href=3D"http://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archives<=
/a>.
</p>

<p>
If you also wish to receive it every week by mail, you may subscribe <a hre=
f=3D"http://lists.idyll.org/listinfo/caml-news-weekly/">online</a>.
</p>

<div class=3D"authorname">
<p>
<a href=3D"http://alan.petitepomme.net/">Alan Schmitt</a>
</p>

</div>
</div>
</div>
</div>
</body>
</html>


--=-=-=--



More information about the caml-news-weekly mailing list