<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2022-02-22 Tue 13:40 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OCaml Weekly News</title>
<meta name="generator" content="Org mode" />
<style type="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: auto;
    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; margin-top: 14px;}
  /* 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="text/css">#table-of-contents h2 { display: none } .title { display: none } .authorname { text-align: right }</style>
<style type="text/css">.outline-2 {border-top: 1px solid black;}</style>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:e95b018ef3580986a04669f1b5879592219e2a7a&dn=public-domain.txt Public Domain
<!--/*--><![CDATA[/*><!--*/
     function CodeHighlightOn(elem, id)
     {
       var target = document.getElementById(id);
       if(null != target) {
         elem.classList.add("code-highlighted");
         target.classList.add("code-highlighted");
       }
     }
     function CodeHighlightOff(elem, id)
     {
       var target = document.getElementById(id);
       if(null != target) {
         elem.classList.remove("code-highlighted");
         target.classList.remove("code-highlighted");
       }
     }
    /*]]>*///-->
// @license-end
</script>
</head>
<body>
<div id="content">
<h1 class="title">OCaml Weekly News</h1>
<p>
<a href="https://alan.petitepomme.net/cwn/2022.02.15.html">Previous Week</a> <a href="https://alan.petitepomme.net/cwn/index.html">Up</a> <a href="https://alan.petitepomme.net/cwn/2022.03.01.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of February 15 to 22, 2022.
</p>

<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#1">OCAML goes Quantum computing</a></li>
<li><a href="#2">Layout Parsing and Nicely Formatted Error Messages</a></li>
<li><a href="#3">ptime 1.0.0 and mtime 1.4.0</a></li>
<li><a href="#4">Timedesc 0.6.0</a></li>
<li><a href="#5">OCaml from the Very Beginning now free in PDF and HTML formats</a></li>
<li><a href="#6">Dune 3.0.0</a></li>
<li><a href="#7">Blog Post "2021 at OCamlPro"</a></li>
<li><a href="#8">Packstream 0.1</a></li>
<li><a href="#9">OCaml 4.14.0, first beta release</a></li>
<li><a href="#org41dfa56">Old CWN</a></li>
</ul>
</div>
</div>


<div id="outline-container-1" class="outline-2">
<h2 id="1">OCAML goes Quantum computing</h2>
<div class="outline-text-2" id="text-1">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ocaml-goes-quantum-computing/9333/1">https://discuss.ocaml.org/t/ocaml-goes-quantum-computing/9333/1</a>
</p>
</div>

<div id="outline-container-orgb867ac8" class="outline-3">
<h3 id="orgb867ac8">Florian said</h3>
<div class="outline-text-3" id="text-orgb867ac8">
<p>
It seems that silently OCAML is now  entering the Quantum world.
It looks that the  Interpreter for "Twist"
<a href="https://scitechdaily.com/twist-mits-new-programming-language-for-quantum-computing/">New programming language for Quantum
computing</a>
is made with OCAML:
<a href="https://github.com/psg-mit/twist-popl22">GitHub for Twist</a>
</p>
</div>
</div>


<div id="outline-container-org65429cd" class="outline-3">
<h3 id="org65429cd">Anton Kochkov then added</h3>
<div class="outline-text-3" id="text-org65429cd">
<p>
Haskell has a nice package for quantum computing - Quipper. I recommend to take a look to it for inspiration as well:
</p>
<ul class="org-ul">
<li><a href="https://hackage.haskell.org/package/quipper-language">https://hackage.haskell.org/package/quipper-language</a></li>
<li><a href="http://www.mathstat.dal.ca/~selinger/quipper/">http://www.mathstat.dal.ca/~selinger/quipper/</a></li>
<li><a href="https://arxiv.org/pdf/1304.3390.pdf">https://arxiv.org/pdf/1304.3390.pdf</a></li>
<li><a href="https://arxiv.org/pdf/2105.03522.pdf">https://arxiv.org/pdf/2105.03522.pdf</a> (a new language that reuses linear types in the Haskell to represent quantum specifics during the Quipper type check)</li>
</ul>
</div>
</div>
</div>




<div id="outline-container-2" class="outline-2">
<h2 id="2">Layout Parsing and Nicely Formatted Error Messages</h2>
<div class="outline-text-2" id="text-2">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-layout-parsing-and-nicely-formatted-error-messages/9343/1">https://discuss.ocaml.org/t/ann-layout-parsing-and-nicely-formatted-error-messages/9343/1</a>
</p>
</div>

<div id="outline-container-org9e9bb9c" class="outline-3">
<h3 id="org9e9bb9c">Hbr announced</h3>
<div class="outline-text-3" id="text-org9e9bb9c">
<p>
In a previous <a href="https://discuss.ocaml.org/t/my-way-from-lalr-parsing-to-combinator-parsing/7377">post</a> I have
described my way from LALR parsing to combinator
parsing. Now I am more and more convinced that combinator parsing is really a
good and flexible way to write parsers. The new release 0.5.0 of `Fmlib` focuses
on layout parsing and nicely formatted error messages by using combinator
parsing.
</p>

<p>
The library can be installed via opam by <code>opam install fmlib</code>. There is a <a href="https://github.com/hbr/fmlib">github
repository</a> hosting the source code. The
<a href="https://hbr.github.io/fmlib/odoc/index.html">API</a> can be found online. See also
a <a href="https://hbr.github.io/fmlib/odoc/fmlib_parse/parse.html">tutorial</a> on combinator parsing.
</p>
</div>

<div id="outline-container-orgb8b6bc6" class="outline-4">
<h4 id="orgb8b6bc6">Layout Parsing</h4>
<div class="outline-text-4" id="text-orgb8b6bc6">
<p>
Most programming languages express hierarchical structures by some kind of
parentheses. Algol like languages use <code>begin</code> <code>end</code>, C like languages use curly
braces <code>{</code>, <code>}</code> to enclose blocks of code. Since blocks can be nested inside
blocks, the hierarchical or tree structure is well expressed by the syntax.
</p>

<p>
For the human reader blocks are usually indented to make the hierarchical
structure graphically visible. Programming languages like <b>Haskell</b> and
<b>Python</b> ommit the parentheses and express the hierarchical structure by
indentation. I.e. the indentation is part of the grammar. This is pleasing to
the eye, because many parentheses can be ommitted.
</p>

<p>
The hierarchical structure in the following schematical source file is
immediately visible without the need of parentheses.
</p>

<pre class="example" id="org721245d">
xxxxxxxxxxx
    xxx
    xxx
        xxxxxxx
xxxxxxxx
    xxx
</pre>

<p>
Lower level blocks are indented with respect to their parent block and siblings
at the same level are vertically aligned.
</p>

<p>
Because of this good readability configuration languages like yaml have
become very popular.
</p>

<p>
Unfortunately there are not many parsers available which support indentation
sensitivity. The library <a href="https://hbr.github.io/fmlib/odoc/fmlib_parse/Fmlib_parse/index.html">Fmlib</a> has support to
parse languages whose grammar uses indentation to structure blocks hierarchically.
</p>

<p>
There are only 3 combinators needed to introduce layout parsing in combinator
parsing. Suppose that <code>p</code> is a combinator parsing a certain contruct. Then we
have
</p>

<ul class="org-ul">
<li><code>indent 4 p</code>: Parse the construct described by <code>p</code> indented at least 4
columns relative to its environment</li>

<li><code>align p</code>: Parse the construct desribed by <code>p</code> aligned vertically with its
siblings</li>

<li><code>detach p</code>: Parse the construct described by <code>p</code> without any indentation or
alignment restrictions</li>
</ul>

<p>
In order to parse a list of ~p~s vertically aligned and indented relative to its
environment by at least one column we just write
</p>

<div class="org-src-container">
<pre class="src src-ocaml">one_or_more (align p) <span style="color: #a52a2a;">|&gt;</span> indent 1
</pre>
</div>

<p>
and parse a structure with the schematic layout
</p>

<pre class="example" id="orgaeb30f0">
xxxxxxxx

    pppppppp

    pppppp

    pppp

xxxxx
</pre>
</div>
</div>

<div id="outline-container-orgf4968c2" class="outline-4">
<h4 id="orgf4968c2">User Frienly Error Messages</h4>
<div class="outline-text-4" id="text-orgf4968c2">
<p>
It is important to for a parser writer to make syntax error messages user
friendly. <a href="https://hbr.github.io/fmlib/odoc/fmlib_pretty/Fmlib_pretty/index.html">Fmlib</a> has some support to write
friendly error messages. There is the operator <code>&lt;?&gt;</code> copied from the Haskell library <code>parsec</code> which helps to equip
combinators with descriptive error message in case they fail to parse the construct successfully.
</p>

<p>
At the end of a failed parsing, the syntax (or semantic) errors have to be
presented to the user. Suppose there is a combinator parser for a yaml like
structure. The library writes by default for you error messages in the form
</p>

<pre class="example" id="orgb9db096">
1 |
2 | names:
3 |      - Alice
3 |      - Bob
4 |
5 |   category: encryption
      ^

I have encountered something unexpected. I was
expecting one of

    - at 3 columns after

        - sequence element: "- &lt;yaml value&gt;"

    - at 2 columns before

        - key value pair: "&lt;key&gt;: &lt;yaml value&gt;"

    - end of input
</pre>

<p>
The raw information (line and column numbers, individual expectations, failed
indentation or alignment expectation) is available as well so that you can
present the error messages to the user in any different form.
</p>

<p>
There is also a component <a href="https://hbr.github.io/fmlib/odoc/fmlib_pretty/Fmlib_pretty/index.html">Fmlib_pretty</a> in
the library for pretty printing any ascii text.
</p>
</div>
</div>
</div>
</div>




<div id="outline-container-3" class="outline-2">
<h2 id="3">ptime 1.0.0 and mtime 1.4.0</h2>
<div class="outline-text-2" id="text-3">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-ptime-1-0-0-and-mtime-1-4-0/9344/1">https://discuss.ocaml.org/t/ann-ptime-1-0-0-and-mtime-1-4-0/9344/1</a>
</p>
</div>

<div id="outline-container-orgbb6a499" class="outline-3">
<h3 id="orgbb6a499">Daniel Bünzli announced</h3>
<div class="outline-text-3" id="text-orgbb6a499">
<p>
It's my pleasure to announce new releases of ptime and mtime. Ptime and mtime provide types and clocks for POSIX and
monotonic time.
</p>

<p>
These releases change the JavaScript support strategy for clocks by implementing the primitives in pure JavaScript
and linking them via <code>js_of_ocaml</code>.
</p>

<p>
This means that both the <code>ptime.clock.jsoo</code> and <code>mtime.clock.jsoo</code> libraries no longer exist[^1]. Instead simply use
the <code>ptime.clock.os</code> or <code>mtime.clock.os</code> libraries like you would do for your regular programs.
</p>

<p>
By side effect, the packages also no longer depend on any of  <code>js_of_ocaml</code>'s packages.
</p>

<p>
Thanks to Hugo Heuzard (@hhugo) for suggesting and implementing these changes. Thanks also to Jonah Beckford for his
Windows build patches.
</p>

<p>
Other changes are described in the release notes for <a href="https://github.com/dbuenzli/ptime/blob/master/CHANGES.md#v100-2022-02-16-la-forclaz"><code>ptime</code></a> and <a href="https://github.com/dbuenzli/mtime/blob/master/CHANGES.md#v140-2022-02-17-la-forclaz-vs"><code>mtime</code></a>.
</p>

<p>
Home pages:  <a href="https://erratique.ch/software/ptime">ptime</a>, <a href="https://erratique.ch/software/mtime">mtime</a>
</p>

<p>
Docs &amp; manuals: <a href="https://erratique.ch/software/ptime/doc">ptime</a>, <a href="https://erratique.ch/software/mtime/doc">mtime</a> or
<code>odig doc ptime mtime</code>
</p>

<p>
Install: <code>opam install ptime mtime</code>
</p>

<p>
[^1]: I had intended to only deprecate these libraries by <code>warning</code> in the <code>META</code> files and requiring the replacement library but it seems the warning won't show up in many contexts including <code>dune</code> builds. So a breaking change it is.
</p>
</div>
</div>
</div>




<div id="outline-container-4" class="outline-2">
<h2 id="4">Timedesc 0.6.0</h2>
<div class="outline-text-2" id="text-4">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-timedesc-0-6-0/9349/1">https://discuss.ocaml.org/t/ann-timedesc-0-6-0/9349/1</a>
</p>
</div>

<div id="outline-container-orgca347fc" class="outline-3">
<h3 id="orgca347fc">Darren announced</h3>
<div class="outline-text-3" id="text-orgca347fc">
<p>
I am pleased to announce the release of <a href="https://github.com/daypack-dev/timere">Timedesc</a> 0.6.0.
</p>

<p>
Timedesc is a very comprehensive date time handling library with good support of time zone.
</p>
</div>

<div id="outline-container-org3f008e9" class="outline-4">
<h4 id="org3f008e9">Features:</h4>
<div class="outline-text-4" id="text-org3f008e9">
<ul class="org-ul">
<li>Timestamp and date time handling with platform independent time zone support
<ul class="org-ul">
<li>Subset of the IANA time zone database is built into this library</li>
</ul></li>
<li>Supports Gregorian calendar date, ISO week date, and ISO ordinal date</li>
<li>Supports nanosecond precision</li>
<li>ISO8601 parsing and RFC3339 printing</li>
</ul>
</div>
</div>

<div id="outline-container-orgaff2a8a" class="outline-4">
<h4 id="orgaff2a8a">Changes</h4>
<div class="outline-text-4" id="text-orgaff2a8a">
<p>
This release adds a fair number of quality of life improvements and additional features. Many thanks to @glennsl for
the suggestions and feedback!
</p>

<p>
The most important sections of the changelog are as follows:
</p>

<ul class="org-ul">
<li>Main breaking changes:
<ul class="org-ul">
<li>Changes in ISO week date functions (shorting label for arguments, quality of life changes)</li>
<li>Removed <code>_date</code> suffix in names of <code>Date.Ymd_date</code> and <code>Date.ISO_ord_date</code></li>
</ul></li>
<li>Added "partial date" modules with ISO8601 parsing and printing facilities
<ul class="org-ul">
<li><code>ISO_week</code></li>
<li><code>Ym</code></li>
</ul></li>
<li>Added additional ISO8601 printing facilities for all three calendar systems
<ul class="org-ul">
<li><code>Date.Ymd.pp/to_iso8601</code> (these are just aliases to the RFC3339 printers)</li>
<li><code>Date.ISO_week_date.pp/to_iso8601</code></li>
<li><code>Date.ISO_ord.pp/to_iso8601</code></li>
</ul></li>
<li>Added additional ISO8601 parsing facilities for all three calendar systems
<ul class="org-ul">
<li><code>Date.Ymd.of_iso8601[_exn]</code></li>
<li><code>Date.ISO_week_date.of_iso8601[_exn]</code></li>
<li><code>Date.ISO_ord.of_iso8601[_exn]</code></li>
</ul></li>
<li>Added additional comparison functions to <code>Date</code>
<ul class="org-ul">
<li><code>lt</code>, <code>le</code>, <code>gt</code>, <code>ge</code>, <code>compare</code></li>
</ul></li>
<li>Added arithemtic functions to <code>Date</code></li>
<li>Added <code>pp/to_iso8601</code> functions as aliases to the rfc3339 functions to <code>Timedesc</code></li>
<li>Patched ISO8601 parsers and RFC3339/ISO8601 printers to handle second level time zone offset
<ul class="org-ul">
<li>Rare occurrence in tzdb but picked up by some new tests</li>
</ul></li>
</ul>
</div>
</div>
</div>
</div>




<div id="outline-container-5" class="outline-2">
<h2 id="5">OCaml from the Very Beginning now free in PDF and HTML formats</h2>
<div class="outline-text-2" id="text-5">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ocaml-from-the-very-beginning-now-free-in-pdf-and-html-formats/9361/1">https://discuss.ocaml.org/t/ocaml-from-the-very-beginning-now-free-in-pdf-and-html-formats/9361/1</a>
</p>
</div>

<div id="outline-container-org350bba2" class="outline-3">
<h3 id="org350bba2">John Whitington announced</h3>
<div class="outline-text-3" id="text-org350bba2">
<p>
Thanks to a grant from the <a href="https://ocaml-sf.org/">OCaml Software Foundation</a>, I am able to release my book <a href="https://ocaml-book.com">OCaml
from the Very Beginning</a> at no cost in its existing PDF format, and in a new HTML format too.
</p>

<p>
You can find it here:
<a href="https://johnwhitington.net/ocamlfromtheverybeginning/">https://johnwhitington.net/ocamlfromtheverybeginning/</a>.
</p>

<p>
The paperback and Kindle versions continue to be available from Amazon as before.
</p>

<p>
The book has recently been updated to make it ready for OCaml 4.14 which involved only minor changes to error
handling and warnings. I have also opened the <a href="https://github.com/johnwhitington/mlbook">source</a>.
</p>
</div>
</div>
</div>




<div id="outline-container-6" class="outline-2">
<h2 id="6">Dune 3.0.0</h2>
<div class="outline-text-2" id="text-6">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-dune-3-0-0/9374/1">https://discuss.ocaml.org/t/ann-dune-3-0-0/9374/1</a>
</p>
</div>

<div id="outline-container-org27d398a" class="outline-3">
<h3 id="org27d398a">Rudi Grinberg announced</h3>
<div class="outline-text-3" id="text-org27d398a">
<p>
On behalf of the dune team, I’m delighted to announce the availability of dune 3.0.
</p>

<p>
The team has been working on this release for over 6 months, and there’s a bunch of new work to report. I’ll only
highlight the some of the interesting new developments:
</p>

<ul class="org-ul">
<li>The watch mode has been rewritten from scratch to be faster and more scalable. We also no longer rely on any 3rd party tools such as fswatch. If any of you still have a dune workspace dune is still struggling with, we cannot wait to hear from you.</li>

<li>The watch mode now also starts an RPC server in the background. This RPC protocol is going to be the basis for other tools to interact with dune. Watch out for announcement on the LSP side to see how we’ll be making use of it to improve the editing experience.</li>

<li>The dune cache has been rewritten as well. It is now simpler and more reliable. There are still some components missing, such as distribution of the artifacts on the network. Nevertheless, we welcome you all to experiment with this feature and give us feedback.</li>

<li>We’ve addressed one of our oldest feature requests: high level rules for ctypes projects. This feature is still experimental, so we need feedback from real world projects before declaring it as mature.</li>
</ul>

<p>
Of course, there are many other fixes, enhancements, and only a few breaking changes in this release. We hope you
have an easy time upgrading.
</p>

<p>
Happy Hacking.
</p>

<p>
<i>Editor’s note: for the full changelog, please follow the archive link above.</i>
</p>
</div>
</div>
</div>




<div id="outline-container-7" class="outline-2">
<h2 id="7">Blog Post "2021 at OCamlPro"</h2>
<div class="outline-text-2" id="text-7">
<p>
Archive: <a href="https://discuss.ocaml.org/t/blog-post-2021-at-ocamlpro/9390/1">https://discuss.ocaml.org/t/blog-post-2021-at-ocamlpro/9390/1</a>
</p>
</div>

<div id="outline-container-orgbb598dd" class="outline-3">
<h3 id="orgbb598dd">Fabrice Le Fessant announced</h3>
<div class="outline-text-3" id="text-orgbb598dd">
<p>
We just published a review of what OCamlPro did in 2021:
</p>

<p>
<a href="https://www.ocamlpro.com/blog/2022_01_31_2021_at_ocamlpro">https://www.ocamlpro.com/blog/2022_01_31_2021_at_ocamlpro</a>
</p>

<p>
A lot of OCaml, but also some Rust, Cobol, Solidity, and a lot of Formal Verification! OCamlPro is always looking for
skilled OCaml developers to hire, so if you are interested, contact us at contact@ocamlpro.com
</p>
</div>
</div>
</div>




<div id="outline-container-8" class="outline-2">
<h2 id="8">Packstream 0.1</h2>
<div class="outline-text-2" id="text-8">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-packstream-0-1/9392/1">https://discuss.ocaml.org/t/ann-packstream-0-1/9392/1</a>
</p>
</div>

<div id="outline-container-org9bb27d3" class="outline-3">
<h3 id="org9bb27d3">Tomasz Barański announced</h3>
<div class="outline-text-3" id="text-org9bb27d3">
<p>
I have a pleasure to announce the release of <a href="https://github.com/tomob/packstream">Packstream</a> 0.1.
</p>

<p>
Packstream is a library to parse/serialize <a href="https://7687.org/packstream/packstream-specification-1.html">Packstream binary
format</a>.
</p>

<p>
This is the initial release. It is functional but very very limited in scope. It allows parsing a binary stream into
a Packstream datatype and serializing the datatype into a binary stream.
</p>
</div>
</div>
</div>




<div id="outline-container-9" class="outline-2">
<h2 id="9">OCaml 4.14.0, first beta release</h2>
<div class="outline-text-2" id="text-9">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ocaml-4-14-0-first-beta-release/9396/1">https://discuss.ocaml.org/t/ocaml-4-14-0-first-beta-release/9396/1</a>
</p>
</div>

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

<p>
The set of new features has been stabilized, and most opam packages already
work with this release. After two alpha releases, we have created a first
beta version to help you update your softwares and libraries ahead of the
release.
</p>

<p>
If you find any bugs, please report them at:
</p>

<p>
<a href="https://github.com/ocaml/ocaml/issues">https://github.com/ocaml/ocaml/issues</a>
</p>

<p>
The full release of OCaml 4.14.0 is currently expected for the middle of March.
</p>

<p>
Compared to the last alpha, we have  a last minute correction for one of the new
function in the Seq module, some documentation improvements, few configuration
and internal tweaks.
</p>
</div>

<div id="outline-container-org7019354" class="outline-4">
<h4 id="org7019354">Installation instructions</h4>
<div class="outline-text-4" id="text-org7019354">
<p>
The base compiler can be installed as an opam switch with the following commands
</p>

<pre class="example" id="orgb805402">
opam update
opam switch create 4.14.0~beta1 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
</pre>
<p>
With opam 2.1, the previous command line can be simplified to
</p>
<pre class="example" id="orgdc66a6b">
opam update
opam switch create 4.14.0~beta1
</pre>
<p>
If you want to tweak the configuration of the compiler, you can switch to the option variant with:
</p>

<pre class="example" id="orgf636958">
opam update
opam switch create &lt;switch_name&gt; --packages=ocaml-variants.4.14.0~beta1+options,&lt;option_list&gt;
--repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
</pre>
<p>
or with opam 2.1:
</p>
<pre class="example" id="org3ab6674">
opam update
opam switch create &lt;switch_name&gt; ocaml-variants.4.14.0~beta1+options &lt;option_list&gt;
</pre>

<p>
where <code>&lt;option_list&gt;</code> is a comma separated list of <code>ocaml-option-*</code> packages. For instance, for a flambda and
no-flat-float-array switch:
</p>
<pre class="example" id="org0210400">
opam switch create 4.14.0~beta1+flambda+nffa ocaml-variants.4.14.0~beta1+options ocaml-option-flambda
ocaml-option-no-flat-float-array
</pre>
<p>
All available options can be listed with <code>opam search ocaml-option</code>.
</p>

<p>
The source code for the beta is also available at these addresses:
</p>

<ul class="org-ul">
<li><a href="https://github.com/ocaml/ocaml/archive/4.14.0-beta1.tar.gz">https://github.com/ocaml/ocaml/archive/4.14.0-beta1.tar.gz</a></li>
<li><a href="https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.0~beta1.tar.gz">https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.0~beta1.tar.gz</a></li>
</ul>
</div>
</div>

<div id="outline-container-org8a598cb" class="outline-4">
<h4 id="org8a598cb">Changes compared to the last alpha</h4>
<div class="outline-text-4" id="text-org8a598cb">
<p>
The full list of changes for OCaml 4.14 is available at <a href="https://github.com/ocaml/ocaml/blob/4.14/Changes">https://github.com/ocaml/ocaml/blob/4.14/Changes</a>
</p>
</div>

<div id="outline-container-orgdb7b7d7" class="outline-5">
<h5 id="orgdb7b7d7">Standard library</h5>
<div class="outline-text-5" id="text-orgdb7b7d7">
<ul class="org-ul">
<li><b>additional fixes</b> <a href="https://github.com/ocaml/ocaml/issues/10583">10583</a>, +<a href="https://github.com/ocaml/ocaml/issues/10998">10998</a>: Add over 40 new functions in Seq. (François Pottier and Simon Cruanes, review by Nicolás Ojeda Bär, Daniel Bünzli, Naëla Courant, Craig Ferguson, Wiktor Kuchta, Xavier Leroy, Guillaume Munch-Maccagnoni, Raphaël Proust, Gabriel Scherer and Thierry Martinez)</li>
</ul>
</div>
</div>

<div id="outline-container-org0d4436f" class="outline-5">
<h5 id="org0d4436f">Documentation</h5>
<div class="outline-text-5" id="text-org0d4436f">
<ul class="org-ul">
<li><a href="https://github.com/ocaml/ocaml/issues/10397">10397</a>: Document exceptions raised by Unix module functions on Windows (Martin Jambon, review by Daniel Bünzli, David Alsopp, Damien Doligez, Xavier Leroy, and Florian Angeletti)</li>

<li><a href="https://github.com/ocaml/ocaml/issues/10794">10794</a>: Clarify warning 57 (Ambiguous or-pattern variables under guard) (Wiktor Kuchta, review by Gabriel Scherer)</li>
</ul>
</div>
</div>

<div id="outline-container-org21e7087" class="outline-5">
<h5 id="org21e7087">Build system</h5>
<div class="outline-text-5" id="text-org21e7087">
<ul class="org-ul">
<li><a href="https://github.com/ocaml/ocaml/issues/10828">10828</a> Build native-code compilers on OpenBSD/aarch64
(Christopher Zimmermann)</li>

<li><a href="https://github.com/ocaml/ocaml/issues/10835">10835</a> Disable DT_TEXTREL warnings on x86 32 bit architecture by passing -Wl,-z,notext in mksharedlib and mkmaindll. Fixes relocation issues, reported in <a href="https://github.com/ocaml/ocaml/issues/9800">9800</a>, making local patches in Debian, Alpine, and FreeBSD superfluous. (Hannes Mehnert with Kate Deplaix and Stéphane Glondu, review by Xavier Leroy)</li>
</ul>
</div>
</div>

<div id="outline-container-org7860704" class="outline-5">
<h5 id="org7860704">Code generation</h5>
<div class="outline-text-5" id="text-org7860704">
<ul class="org-ul">
<li><a href="https://github.com/ocaml/ocaml/issues/10719">10719</a>: Ensure that build_apply respects Lambda.max_arity
(Stephen Dolan, review by Xavier Leroy)</li>
</ul>
</div>
</div>

<div id="outline-container-org4a5d057" class="outline-5">
<h5 id="org4a5d057">Internal/compiler-libs</h5>
<div class="outline-text-5" id="text-org4a5d057">
<ul class="org-ul">
<li><b>additional fixes</b> <a href="https://github.com/ocaml/ocaml/issues/10718">10718</a>, +<a href="https://github.com/ocaml/ocaml/issues/11012">11012</a>: Add "Shape" information to the cmt files. Shapes are an abstraction of modules that can be used by external tooling to perform definition-aware operations. (Ulysse Gérard, Thomas Refis and Leo White, review by Florian Angeletti)</li>
</ul>
</div>
</div>
</div>
</div>
</div>




<div id="outline-container-org41dfa56" class="outline-2">
<h2 id="org41dfa56">Old CWN</h2>
<div class="outline-text-2" id="text-org41dfa56">
<p>
If you happen to miss a CWN, you can <a href="mailto:alan.schmitt@polytechnique.org">send me a message</a> and I'll mail it to you, or go take a look at <a href="https://alan.petitepomme.net/cwn/">the archive</a> or the <a href="https://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 href="http://lists.idyll.org/listinfo/caml-news-weekly/">online</a>.
</p>

<div class="authorname" id="orgd18e89d">
<p>
<a href="https://alan.petitepomme.net/">Alan Schmitt</a>
</p>

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