No subject


Tue Jan 12 01:47:49 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 [How We Lost at The Delphi Oracle Challenge]
  =E2=80=A2 [Tarides sponsors the Oxbridge Women in Computer Science Confer=
ence
    2020]
  =E2=80=A2 [Coq 8.12.2 is out]
  =E2=80=A2 [First release of MetAcsl plugin]
  =E2=80=A2 [Announcing MirageOS 3.10]
  =E2=80=A2 [ ReScript 8.4]
  =E2=80=A2 [Coq 8.13+beta1 is out]


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

[How We Lost at The Delphi Oracle Challenge]
<https://seb.mondet.org/b/0010-delphi-challenge-post-vivum.html>

[Tarides sponsors the Oxbridge Women in Computer Science Conference
2020]
<https://tarides.com/blog/2020-12-14-tarides-sponsors-the-oxbridge-women-in=
-computer-science-conference-2020>

[Coq 8.12.2 is out] <https://coq.inria.fr/news/coq-8-12-2-is-out.html>

[First release of MetAcsl plugin]
<https://frama-c.com/fc-plugins/metacsl.html>

[Announcing MirageOS 3.10]
<https://mirage.io/blog/announcing-mirage-310-release>

[ ReScript 8.4]
<https://rescript-lang.org/blog/bucklescript-release-8-4>

[Coq 8.13+beta1 is out]
<https://coq.inria.fr/news/coq-8-13beta1-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
Content-Disposition: inline

<?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>
<!-- 2021-01-12 Tue 10: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: 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="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">
/*
@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 = document.getElementById(id);
   if(null != target) {
     elem.cacheClassElem = elem.className;
     elem.cacheClassTarget = target.className;
     target.className = "code-highlighted";
     elem.className   = "code-highlighted";
   }
 }
 function CodeHighlightOff(elem, id)
 {
   var target = document.getElementById(id);
   if(elem.cacheClassElem)
     elem.className = elem.cacheClassElem;
   if(elem.cacheClassTarget)
     target.className = elem.cacheClassTarget;
 }
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">OCaml Weekly News</h1>
<p>
<a href="http://alan.petitepomme.net/cwn/2021.01.05.html">Previous Week</a> <a href="http://alan.petitepomme.net/cwn/index.html">Up</a> <a href="http://alan.petitepomme.net/cwn/2021.01.19.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of January 05 to 12, 2021.
</p>

<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#1">Marshal determinism and stability</a></li>
<li><a href="#2">Sedlex + Menhir parser for both tty and file parsing</a></li>
<li><a href="#3">First release of awa-ssh</a></li>
<li><a href="#4">Introducing Feather: A lightweight shell-scripting library for OCaml</a></li>
<li><a href="#5">postdoc researcher and research engineer positions for CHERI and Arm verification</a></li>
<li><a href="#6">First ocb (OCaml Badgen) release</a></li>
<li><a href="#7">Release of OCaml-Git v3.0 and co</a></li>
<li><a href="#8">Other OCaml News</a></li>
<li><a href="#orge5e8799">Old CWN</a></li>
</ul>
</div>
</div>


<div id="outline-container-org0cf7460" class="outline-2">
<h2 id="1">Marshal determinism and stability</h2>
<div class="outline-text-2" id="text-1">
<p>
Archive: <a href="https://discuss.ocaml.org/t/marshal-determinism-and-stability/7041/28">https://discuss.ocaml.org/t/marshal-determinism-and-stability/7041/28</a>
</p>
</div>

<div id="outline-container-orge619cc4" class="outline-3">
<h3 id="orge619cc4">Continuing this thread, David Allsopp said</h3>
<div class="outline-text-3" id="text-orge619cc4">
<p>
A couple of notes on <code>Marshal</code>, which I don't think have been covered
</p>
<ul class="org-ul">
<li>Although the guarantee is only between identical versions of OCaml, the implementation actually goes to considerable lengths to maintain backwards compatibility (so a value <span class="underline">written</span> by older OCaml remains <span class="underline">readable</span> in newer OCaml). Our own testsuite, for example, indirectly <a href="https://github.com/ocaml/ocaml/blob/trunk/testsuite/tests/lib-hashtbl/compatibility.ml">includes a test which unmarshals a 3.12.1 value</a>. I don't know exactly how far back the support goes.</li>
<li>As it happens, the change which affected Unison in 4.08 was the first breaking change to Marshal since either 4.00 or 4.01. The fact that it doesn't break often (and that the two code paths - at least at present - are small) meant I have suggested a few months back that we could in future add an additional flag in the style of <code>Compat_32</code> to allow values to be written in a way which should be readable on older versions of OCaml. Indeed, it's small enough that flags could be added for the changes in 4.08 (<a href="https://github.com/ocaml/ocaml/pull/1683">PR#1683</a>) and in 4.11 (<a href="https://github.com/ocaml/ocaml/pull/8791">PR#8791</a>).</li>
<li>Neither point undermines using alternative formats either for network serialisation or persistent storage, for the many reasons discussed above!</li>
</ul>
</div>
</div>
</div>




<div id="outline-container-orgd382858" class="outline-2">
<h2 id="2">Sedlex + Menhir parser for both tty and file parsing</h2>
<div class="outline-text-2" id="text-2">
<p>
Archive: <a href="https://discuss.ocaml.org/t/sedlex-menhir-parser-for-both-tty-and-file-parsing/7055/1">https://discuss.ocaml.org/t/sedlex-menhir-parser-for-both-tty-and-file-parsing/7055/1</a>
</p>
</div>

<div id="outline-container-org2363749" class="outline-3">
<h3 id="org2363749">Bernard Sufrin announced</h3>
<div class="outline-text-3" id="text-org2363749">
<p>
I am a great fan of Menhir, and have used it in several private language projects, using the ulexing
scanner generator to provide Unicode-capable scanners.
</p>

<p>
Alarmed by the obsolescence of ulexing, and needing a utf8-capable  scanner in a hurry I decided to
(teach myself to) use Sedlex. On the whole the experience was very satisfactory,
and I found it straightforward to produce a variant of the sedlexing library which supports
buffers with variable chunk sizes, thereby enabling efficient lexing on channels connected to
files as well as  immediately responsive lexing on channels connected to terminals.
</p>

<p>
I also wanted to teach myself how to use the error-reporting, incremental, interfaces to
Menhir-generated parsers. In the hope that it might be useful to others facing the same learning task,
or the problem of adapting Sedlex for efficient interactive use, I have placed the example
mock-S-Expression parser that resulted from this excursion in:
</p>

<p>
<a href="https://github.com/sufrin/InteractiveSedlexMenhirExample">Git Repository: github.com/sufrin/InteractiveSedlexMenhirExample</a>
</p>
</div>
</div>
</div>




<div id="outline-container-org977e327" class="outline-2">
<h2 id="3">First release of awa-ssh</h2>
<div class="outline-text-2" id="text-3">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-first-release-of-awa-ssh/7057/1">https://discuss.ocaml.org/t/ann-first-release-of-awa-ssh/7057/1</a>
</p>
</div>

<div id="outline-container-orgd1e6a78" class="outline-3">
<h3 id="orgd1e6a78">Hannes Mehnert announced</h3>
<div class="outline-text-3" id="text-orgd1e6a78">
<p>
I'm happy to announce that <code>awa-ssh</code> (<a href="https://github.com/mirage/awa-ssh">https://github.com/mirage/awa-ssh</a>) has just been merged into
opam-repository. It is a pure OCaml implementation of the ssh (secure shell,
<a href="https://en.wikipedia.org/wiki/SSH_(Secure_Shell)">https://en.wikipedia.org/wiki/SSH_(Secure_Shell)</a>) protocol.
</p>

<p>
This is the initial release, please report issues you encounter.
</p>

<p>
It was initially developed by Christiano Haesbaert in 2016, and revived mid-2019 by myself and in 2020
it was migrated to the MirageOS organization on GitHub for further development and maintenance.
</p>

<p>
Both client and server code are present in the library (pure code in the main awa package), though the
awa-lwt package implements only a server, and the awa-mirage package implements only a client. Tests
and examples are in the test subdirectory.
</p>

<p>
The MirageOS client has been successfully used to clone git repositories (on private servers, on
GitHub, etc.). It supports apart from RSA keys also ED25519 keys (and key exchanges).
</p>
</div>
</div>
</div>




<div id="outline-container-org396d3a1" class="outline-2">
<h2 id="4">Introducing Feather: A lightweight shell-scripting library for OCaml</h2>
<div class="outline-text-2" id="text-4">
<p>
Archive: <a href="https://discuss.ocaml.org/t/introducing-feather-a-lightweight-shell-scripting-library-for-ocaml/7059/1">https://discuss.ocaml.org/t/introducing-feather-a-lightweight-shell-scripting-library-for-ocaml/7059/1</a>
</p>
</div>

<div id="outline-container-org8aa8941" class="outline-3">
<h3 id="org8aa8941">Charles announced</h3>
<div class="outline-text-3" id="text-org8aa8941">
<p>
I wrote a shell scripting library called <a href="https://hg.sr.ht/~etc/feather">Feather</a>. I like idea of
writing bash-like code quickly, later being able to intersperse OCaml to add more typeful components as
needed. It's kind of like <a href="https://github.com/janestreet/shexp/">Shexp</a> but without the monadic
interface and with Async support. (<a href="https://hg.sr.ht/~etc/feather_async">Feather_async</a>)
</p>

<p>
There's a tutorial and some examples in the link above but here's a quick taste:
</p>

<div class="org-src-container">
<pre class="src src-ocaml"><span style="color: #000000; font-weight: bold;">open </span><span style="color: #228b22;">Feather</span>

<span style="color: #000000; font-weight: bold;">let</span> <span style="color: #a0522d;">lines</span> = find <span style="color: #8b2252;">"."</span> <span style="color: #008b8b;">~name</span>:<span style="color: #8b2252;">"*.ml"</span>
  <span style="color: #a52a2a;">|.</span> tr <span style="color: #8b2252;">"/"</span> <span style="color: #8b2252;">"\n"</span>
  <span style="color: #a52a2a;">|.</span> map_lines <span style="color: #008b8b;">~f</span>:<span style="color: #228b22;">String.</span>capitalize
  <span style="color: #a52a2a;">|.</span> sort
  <span style="color: #a52a2a;">|.</span> process <span style="color: #8b2252;">"uniq"</span> [ <span style="color: #8b2252;">"-c"</span> ]
  <span style="color: #a52a2a;">|.</span> process <span style="color: #8b2252;">"sort"</span> [ <span style="color: #8b2252;">"-n"</span> ]
  <span style="color: #a52a2a;">|.</span> tail 4
  <span style="color: #a52a2a;">|&gt;</span> collect_lines
<span style="color: #000000; font-weight: bold;">in</span>
<span style="color: #228b22;">String.</span>concat <span style="color: #008b8b;">~sep</span>:<span style="color: #8b2252;">", "</span> lines <span style="color: #a52a2a;">|&gt;</span> print_endline
</pre>
</div>
<p>
Let me know if you have any feedback! And feel free to file bug reports
<a href="https://todo.sr.ht/~etc/feather">here</a>. Hope it ends up being useful, entertaining, or both!
</p>
</div>
</div>
</div>




<div id="outline-container-org58819d9" class="outline-2">
<h2 id="5">postdoc researcher and research engineer positions for CHERI and Arm verification</h2>
<div class="outline-text-2" id="text-5">
<p>
Archive: <a href="https://sympa.inria.fr/sympa/arc/caml-list/2021-01/msg00023.html">https://sympa.inria.fr/sympa/arc/caml-list/2021-01/msg00023.html</a>
</p>
</div>

<div id="outline-container-org62943c8" class="outline-3">
<h3 id="org62943c8">Peter Sewell announced</h3>
<div class="outline-text-3" id="text-org62943c8">
<p>
We are looking for postdoctoral researchers and postdoctoral or
postgraduate research engineers to help develop semantics and verification
to improve the foundations and security of mainstream computer systems, for
CHERI and Arm system software verification, at the University of
Cambridge.  OCaml expertise to help develop verification tools will be
especially welcome. Closing date 13 January 2021 - see the advert
<a href="http://www.jobs.cam.ac.uk/job/28012/">http://www.jobs.cam.ac.uk/job/28012/</a>.
</p>
</div>
</div>
</div>




<div id="outline-container-orgca6e49e" class="outline-2">
<h2 id="6">First ocb (OCaml Badgen) release</h2>
<div class="outline-text-2" id="text-6">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-first-ocb-ocaml-badgen-release/7073/1">https://discuss.ocaml.org/t/ann-first-ocb-ocaml-badgen-release/7073/1</a>
</p>
</div>

<div id="outline-container-org410e4b8" class="outline-3">
<h3 id="org410e4b8">zapashcanon announced</h3>
<div class="outline-text-3" id="text-org410e4b8">
<p>
A few days ago, I released <a href="https://github.com/ocamlpro/ocb">ocb</a>. It's a library and a command-line
tool to generate SVG badges.
</p>

<p>
To get started quickly:
</p>

<div class="org-src-container">
<pre class="src src-shell">ocb --label Hello --color green --style flat --labelcolor white --status Goodbye
</pre>
</div>

<p>
Will gives this result: <a href="https://raw.githubusercontent.com/OCamlPro/ocb/master/example/cli.svg">SVG
example</a>.
</p>

<p>
My first use case was <a href="https://github.com/ocaml-toml/To.ml">To.ml</a> where I'm using
<a href="https://github.com/aantron/bisect_ppx">bisect_ppx</a> to generate and deploy a <a href="https://ocaml-toml.github.io/To.ml/coverage/">coverage
report</a>. I wanted to display the coverage percentage in
the README and tried existing tools but wasn't fully satisfied as they didn't work or were failing
randomly. Now, <a href="https://github.com/ocaml-toml/To.ml/blob/6ac580848ad1d34ec3032da8672bbd9aca203cc4/.github/workflows/deploy.yml#L34">I'm generating the badge directly in a GitHub
action</a>.
</p>

<p>
The project was inspired by <a href="https://github.com/badgen/badgen">badgen</a>. I still have to add support for
icons and to improve the documentation but it's usable.
</p>
</div>
</div>
</div>




<div id="outline-container-org5a49852" class="outline-2">
<h2 id="7">Release of OCaml-Git v3.0 and co</h2>
<div class="outline-text-2" id="text-7">
<p>
Archive: <a href="https://discuss.ocaml.org/t/ann-release-of-ocaml-git-v3-0-and-co/7076/1">https://discuss.ocaml.org/t/ann-release-of-ocaml-git-v3-0-and-co/7076/1</a>
</p>
</div>

<div id="outline-container-orgd0c42c7" class="outline-3">
<h3 id="orgd0c42c7">Ulugbek Abdullaev announced</h3>
<div class="outline-text-3" id="text-orgd0c42c7">
<p>
We, the <a href="https://github.com/mirage/ocaml-git"><code>ocaml-git</code></a> team, are happy to announce a new major
release of <code>ocaml-git v3.0</code> and related libraries.
</p>
</div>

<div id="outline-container-org4559a5b" class="outline-4">
<h4 id="org4559a5b">Release Notes</h4>
<div class="outline-text-4" id="text-org4559a5b">
</div>
<div id="outline-container-orgcf7f349" class="outline-5">
<h5 id="orgcf7f349">OCaml-Git v3.0</h5>
<div class="outline-text-5" id="text-orgcf7f349">
<p>
<a href="https://github.com/mirage/ocaml-git"><b>OCaml-Git</b></a> is a library that implements  <code>git</code> format and
protocol implementation in pure OCaml. The library is used by libraries such as
<a href="https://github.com/mirage/irmin"><code>irmin</code></a>, a git-like distributed database, or
<a href="https://github.com/dinosaure/pasteur"><code>pasteur</code></a>, a MirageOS unikernel-based snippet storage service.
</p>
</div>

<div id="outline-container-orgbc29a43" class="outline-6">
<h6 id="orgbc29a43">Changes</h6>
<div class="outline-text-6" id="text-orgbc29a43">
<p>
The main goal behind this major release was to get better compatibility with various platforms,
including [~MirageOS~](mirage.io), 32-bit platforms, and <code>js_of_ocaml</code>. In order to achieve that, we
broke down <code>ocaml-git</code> into several components, which are represented as sub-libraries. We will
describe some of those components later in this post.
</p>

<p>
Along with better support for various platforms, <code>ocaml-git 3.0</code>  also comes with SSH support for
<code>fetch/push</code> and various bug fixes.
</p>

<p>
The rest of the changes are mostly internal and pave a way for interesting features such as a
full-blown <code>git</code> <a href="https://git-scm.com/docs/git-gc">garbage collector</a> and wire protocol v2
(<a href="https://opensource.googleblog.com/2018/05/introducing-git-protocol-version-2.html">announcment</a> and
<a href="https://github.com/git/git/blob/master/Documentation/technical/protocol-v2.txt">spec</a>).
</p>

<p>
<b>References:</b>
</p>

<ul class="org-ul">
<li>Full <a href="https://github.com/mirage/ocaml-git/blob/master/CHANGES.md">changes list</a></li>
<li><a href="https://github.com/mirage/ocaml-git/pull/395">PR</a> that introduced the major rewrite of <code>ocaml-git</code></li>
</ul>

<p>
&#x2014;
</p>

<p>
In the new version of <code>ocaml-git</code>, we try to have better separation of concerns by breaking some of the
<code>ocaml-git</code> components into sub-libraries, which do not contain <code>git</code>-specific logic and can be reused
for other purposes.
</p>
</div>
</div>
</div>

<div id="outline-container-orgea4bd87" class="outline-5">
<h5 id="orgea4bd87">Carton</h5>
<div class="outline-text-5" id="text-orgea4bd87">
<p>
Git uses <a href="https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt">PACK files</a>
to store old git objects such as commits and transfer objects over wire using git's wire protocols
(<code>git-nss</code> library mentioned below implements
<a href="https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt">v1</a> of the protocol;
<a href="https://github.com/git/git/blob/master/Documentation/technical/protocol-v2.txt">v2</a> implementation is
in progress).
</p>

<p>
<a href="https://github.com/mirage/ocaml-git/tree/master/src/carton"><b>Carton</b></a> is a library to work with PACK
files. The library does not contain git-specific code, so one can easily reuse the library and PACK
format for non-git objects. One can see how <code>ocaml-git</code> uses <code>carton</code> for its purposes
<a href="https://github.com/mirage/ocaml-git/tree/master/src/carton-git">here</a>.
</p>

<p>
<b>References:</b>
</p>

<ul class="org-ul">
<li><a href="https://github.com/mirage/ocaml-git/issues/375">PR</a> that introduces <code>carton</code></li>
</ul>
</div>
</div>

<div id="outline-container-org955fcde" class="outline-5">
<h5 id="org955fcde">Git-NSS (Not So Smart)</h5>
<div class="outline-text-5" id="text-org955fcde">
<p>
When one wants to synchronize with a remote repository using git, they need to use <code>git fetch/push</code>.
Communication and synchronization/negotiation is defined by git <b>wire protocol</b>, which has two
versions: older version 1 and newer leaner version 2. The protocols are defined for four wire
transports: HTTP(S), SSH, and <code>git://</code> (TCP).
</p>

<p>
<a href="https://github.com/mirage/ocaml-git/tree/master/src/not-so-smart"><code>Not-So-Smart</code></a> library is a library
that allows for such synchronization based on the git wire protocols but without git-specific code,
meaning that files being fetched do not need to be git objects or that there is no assumptions on the
"repository" that one is synchronizing with. So, as well as <code>carton</code>, the library aims to be reusable
for other purposes.
</p>

<p>
This release features support for SSH using <a href="https://github.com/mirage/awa-ssh">awa-ssh</a> by @hannesm
(see <a href="https://discuss.ocaml.org/t/ann-first-release-of-awa-ssh/7057">the release</a>), support for
<a href="https://git-scm.com/docs/partial-clone">partial-clone</a> (of various <code>depth</code>), and memory consumption
fixes for unikernels.
</p>

<p>
<b>Note 1:</b> The library's name "Not so smart" is a play on the git's "smart" protocol, a part of wire
protocol v1 over HTTP(S) transport.
</p>

<p>
<b>Note 2:</b> only client side logic is implemented for wire protocols. The server-side is planned but not
yet implemented. One can use <code>git</code> as the server for now.
</p>
</div>
</div>

<div id="outline-container-orgf093f20" class="outline-5">
<h5 id="orgf093f20">Mimic</h5>
<div class="outline-text-5" id="text-orgf093f20">
<p>
<a href="https://github.com/mirage/ocaml-git/tree/master/src/mimic"><b>Mimic</b></a> is a small reimplementation of
<a href="https://github.com/mirage/ocaml-conduit"><code>conduit</code></a>, a library that helps to abstract over a transport
protocol such as HTTP(S) or SSH. In other words, the code using <code>mimic</code> can deal not with different
types that represent an HTTP or SSH connection, but just deal, e.g., read from or write to, with a
<code>flow</code> value, which hides protocol-specific details under its hood.
</p>

<p>
&#x2014;
</p>

<p>
There are several independent libraries that were upgraded along with <code>ocaml-git 3.0</code>.
</p>
</div>
</div>

<div id="outline-container-org4746b82" class="outline-5">
<h5 id="org4746b82">Duff v0.3</h5>
<div class="outline-text-5" id="text-org4746b82">
<p>
<a href="https://github.com/mirage/duff"><b>Duff</b></a> is a library that implements git's
<a href="http://www.xmailserver.org/xdiff-lib.html"><code>libXdiff</code></a> (<code>xdiff</code> algorithm) in OCaml. PACK files use a
binary diff algorithm, <code>xdiff</code>, to compress binary data. More on the project
<a href="https://github.com/mirage/duff">page</a> and release
<a href="https://discuss.ocaml.org/t/ann-ocaml-git-2-0/2740">notes</a> for <code>ocaml-git 2.0</code>.
</p>
</div>

<div id="outline-container-org616837a" class="outline-6">
<h6 id="org616837a">Changes</h6>
<div class="outline-text-6" id="text-org616837a">
<p>
This release fixes the support for 32-bit architecture platforms.
</p>
</div>
</div>
</div>

<div id="outline-container-org4a8c181" class="outline-5">
<h5 id="org4a8c181">Encore v0.7</h5>
<div class="outline-text-5" id="text-org4a8c181">
<p>
<a href="https://github.com/mirage/encore"><b>Encore</b></a> is a library that can create an encoder/decoder based on
the format given. It also ensures isomorphism by construction.
</p>
</div>

<div id="outline-container-org7e728ec" class="outline-6">
<h6 id="org7e728ec">Changes</h6>
<div class="outline-text-6" id="text-org7e728ec">
<p>
Extensive changes to the API. See the project page.
</p>
</div>
</div>
</div>

<div id="outline-container-org121d95e" class="outline-5">
<h5 id="org121d95e">Decompress v1.2.0</h5>
<div class="outline-text-5" id="text-org121d95e">
<p>
<a href="https://github.com/mirage/decompress"><b>Decompress</b></a> is an OCaml implementation of certain
decompression algorithms such as <code>Zlib</code>, <code>Gzip</code>, etc.
</p>
</div>

<div id="outline-container-org751ebf9" class="outline-6">
<h6 id="org751ebf9">Changes</h6>
<div class="outline-text-6" id="text-org751ebf9">
<p>
<code>ocaml-git 3.0</code> uses new version of <code>decompress</code> with extensive performance improvements documented in
<b>Tarides's</b> blog <a href="https://tarides.com/blog/2019-08-26-decompress-the-new-decompress-api">API changes</a>
and <a href="https://tarides.com/blog/2019-09-13-decompress-experiences-with-ocaml-optimization">performance
improvements</a>.
</p>

<p>
We'd be happy to get your feedback or questions! :-)
</p>
</div>
</div>
</div>
</div>
</div>
</div>




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

<ul class="org-ul">
<li><a href="https://seb.mondet.org/b/0010-delphi-challenge-post-vivum.html">How We Lost at The Delphi Oracle Challenge</a></li>
<li><a href="https://tarides.com/blog/2020-12-14-tarides-sponsors-the-oxbridge-women-in-computer-science-conference-2020">Tarides sponsors the Oxbridge Women in Computer Science Conference 2020</a></li>
<li><a href="https://coq.inria.fr/news/coq-8-12-2-is-out.html">Coq 8.12.2 is out</a></li>
<li><a href="https://frama-c.com/fc-plugins/metacsl.html">First release of MetAcsl plugin</a></li>
<li><a href="https://mirage.io/blog/announcing-mirage-310-release">Announcing MirageOS 3.10</a></li>
<li><a href="https://rescript-lang.org/blog/bucklescript-release-8-4"> ReScript 8.4</a></li>
<li><a href="https://coq.inria.fr/news/coq-8-13beta1-is-out.html">Coq 8.13+beta1 is out</a></li>
</ul>
</div>
</div>
</div>




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

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

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


--=-=-=--



More information about the caml-news-weekly mailing list