No subject


Tue Jun 1 02:23:51 PDT 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 [Beta release of Frama-C 23.0~rc1 (Vanadium)]
  =E2=80=A2 [Building Ahrefs codebase with Melange]
  =E2=80=A2 [Computing an integer using a Grothendieck topos]
  =E2=80=A2 [ ReScript 9.1]
  =E2=80=A2 [Tutorial: Format Module of OCaml]
  =E2=80=A2 [Tarides project SCoP is selected as one of the brightest Data
    Portability projects in Europe!]
  =E2=80=A2 [Alt-Ergo Users=E2=80=99 Club Annual Meeting (2021)]


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

[Beta release of Frama-C 23.0~rc1 (Vanadium)]
<https://frama-c.com/fc-versions/vanadium.html>

[Building Ahrefs codebase with Melange]
<https://tech.ahrefs.com/building-ahrefs-codebase-with-melange-9f881f6d022b>

[Computing an integer using a Grothendieck topos]
<http://math.andrej.com/2021/05/18/computing-an-integer-using-a-sheaf-topos=
/>

[ ReScript 9.1] <https://rescript-lang.org/blog/release-9-1>

[Tutorial: Format Module of OCaml]
<https://www.ocamlpro.com/2021/05/06/tutorial-format-module-of-ocaml/>

[Tarides project SCoP is selected as one of the brightest Data
Portability projects in Europe!]
<https://tarides.com/blog/2021-04-30-scop-selected-for-dapsi-initiative>

[Alt-Ergo Users=E2=80=99 Club Annual Meeting (2021)]
<https://www.ocamlpro.com/2021/04/29/alt-ergo-users-club-annual-meeting-202=
1/>


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] <https://alan.petitepomme.net/cwn/>

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

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

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


--=-=-=
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-06-01 Tue 11:19 -->
<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: 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=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">
// @license magnet:?xt=3Durn:btih:e95b018ef3580986a04669f1b5879592219e2a7a&=
dn=3Dpublic-domain.txt Public Domain
<!--/*--><![CDATA[/*><!--*/
     function CodeHighlightOn(elem, id)
     {
       var target =3D document.getElementById(id);
       if(null !=3D target) {
         elem.classList.add("code-highlighted");
         target.classList.add("code-highlighted");
       }
     }
     function CodeHighlightOff(elem, id)
     {
       var target =3D document.getElementById(id);
       if(null !=3D target) {
         elem.classList.remove("code-highlighted");
         target.classList.remove("code-highlighted");
       }
     }
    /*]]>*///-->
// @license-end
</script>
</head>
<body>
<div id=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2021.05.25.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2021.06.08.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of May 25 to June 01, 20=
21.
</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">Dream =E2=80=94 a simple, yet feature-complete Web frame=
work</a></li>
<li><a href=3D"#2">Ocaml developer at Routine, Paris, Remote OK</a></li>
<li><a href=3D"#3">Feather 0.2.0</a></li>
<li><a href=3D"#4">BAP 2.3.0 Release</a></li>
<li><a href=3D"#5">Building Ahrefs codebase with Melange</a></li>
<li><a href=3D"#6">Lwt 5.4.1</a></li>
<li><a href=3D"#7">Other OCaml News</a></li>
<li><a href=3D"#org783f766">Old CWN</a></li>
</ul>
</div>
</div>


<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">Dream =E2=80=94 a simple, yet feature-complete Web framework</=
h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/dream-a-simple-yet-feature-=
complete-web-framework/7909/1">https://discuss.ocaml.org/t/dream-a-simple-y=
et-feature-complete-web-framework/7909/1</a>
</p>
</div>

<div id=3D"outline-container-orgb971cd0" class=3D"outline-3">
<h3 id=3D"orgb971cd0">Anton Bachin announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgb971cd0">
<p>
I am pleased to announce <a href=3D"https://github.com/aantron/dream"><b>Dr=
eam</b></a>, a very easy-to-use Web framework with high
performance, secure defaults, and thorough documentation!
</p>


<div id=3D"org9ad1b20" class=3D"figure">
<p><img src=3D"https://aws1.discourse-cdn.com/standard11/uploads/ocaml/orig=
inal/2X/3/3384d2a4557f6ab17b585711a47e4f6c90a77652.png" alt=3D"3384d2a4557f=
6ab17b585711a47e4f6c90a77652.png" />
</p>
</div>

<p>
It is available now from opam, with <code>opam install dream</code>.
</p>

<p>
Dream offers:
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://github.com/aantron/dream/tree/master/example/k-webso=
cket#files">WebSockets</a> and <a href=3D"https://github.com/aantron/dream/=
tree/master/example/w-graphql-subscription#files">GraphQL</a>.</li>
<li>A <a href=3D"https://github.com/aantron/dream/tree/master/example/7-tem=
plate#files">template syntax</a>, which you can see in the image above.</li>
<li>Trivial <a href=3D"https://github.com/aantron/dream/tree/master/example=
/l-https#files">HTTPS and HTTP/2 support</a>, allowing simple deployments w=
ithout a proxy.</li>
<li><a href=3D"https://github.com/aantron/dream/tree/master/example/b-sessi=
on#files">Sessions</a> with pluggable <a href=3D"https://aantron.github.io/=
dream/#back-ends">back ends</a>.</li>
<li>Easy <a href=3D"https://aantron.github.io/dream/#cookies">secure cookie=
s</a> and <a href=3D"https://aantron.github.io/dream/#forms">CSRF-safe form=
s</a>.</li>
</ul>

<p>
&#x2026;and more, yet Dream sticks to a simple programming model:
</p>

<ul class=3D"org-ul">
<li>Web apps are just <a href=3D"https://aantron.github.io/dream/#type-hand=
ler">bare functions</a> from requests to responses.</li>
<li><a href=3D"https://aantron.github.io/dream/#type-middleware">Middleware=
s</a> are just higher-order wrapper functions.</li>
<li><a href=3D"https://aantron.github.io/dream/#type-route">Routes</a> tell=
 the <a href=3D"https://aantron.github.io/dream/#val-router">router</a> whi=
ch of these functions to call.</li>
</ul>

<p>
Indeed, for those who like algebra, there is a certain <a href=3D"https://a=
antron.github.io/dream/#algebra">structure</a> to
Dream. However, that's not the point of this post!
</p>

<p>
Dream is meant to be very easy to understand. It sticks to base types, intr=
oducing only a few types of its own, and
uses existing languages, such as HTML for templates, and URLs for routes. D=
ream itself is one module in one opam
package, which lives in a monorepo. The <a href=3D"https://aantron.github.i=
o/dream/">docs</a> are on one page.
</p>

<p>
Dream is loosely coupled. Even though Dream offers many defaults, it is uno=
pinionated, and you can quickly configure
or replace anything. For example, it is easy to <a href=3D"https://github.c=
om/aantron/dream/tree/master/example/w-tyxml#files">use TyXML</a> for templ=
ates, and Dream happily supports
such usage with examples.
</p>

<p>
Security-sensitive features, such as cookies, are arranged so that simple a=
nd obvious usage is automatically secure.
Wherever security still depends on the Dream app, the docs
<a href=3D"https://github.com/aantron/dream/tree/master/example/7-template#=
security">highlight</a> it. Dream has selected a modern
<a href=3D"https://aantron.github.io/dream/#cryptography">cipher</a> as a d=
efault, supports <a href=3D"https://aantron.github.io/dream/#servers">key
rotation</a>, and offers suggestions for other purposes, such as password
hashing. It implements and abstracts away all of the <a href=3D"https://che=
atsheetseries.owasp.org/">OWASP</a> security guidelines
that are relevant to its level.
</p>

<p>
Dream is designed for full internationalization. It has a centralized <a hr=
ef=3D"https://github.com/aantron/dream/tree/master/example/9-error#files">e=
rror
handler</a> that intercepts even lower-level HTTP
errors, so that you can decorate them with your app's own error template, a=
nd leak no hardcoded strings. Dream's URL
encoders <a href=3D"https://aantron.github.io/dream/#val-to_percent_encoded=
">favor</a> internationalized (UTF-8) URIs, and the
router accepts them.
</p>

<p>
Finally, Dream is designed for a wide range of applications, including with=
 or without a proxy, standalone or
embedded in larger binaries, and with external static assets or <a href=3D"=
https://github.com/aantron/dream/tree/master/example/w-one-binary#files">as=
sets compiled
in</a>.
</p>
</div>

<div id=3D"outline-container-orgeb4a2df" class=3D"outline-4">
<h4 id=3D"orgeb4a2df">Documentation</h4>
<div class=3D"outline-text-4" id=3D"text-orgeb4a2df">
<p>
Dream is very extensively documented. See&#x2026;
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://github.com/aantron/dream/tree/master/example#readme"=
><b>Examples</b></a>, the first several of which make up a tutorial. Each e=
xample is a complete project.</li>
<li>The online <a href=3D"http://dream.as/ocaml"><b>playground</b></a>, whi=
ch features many of the examples, and is itself a <a href=3D"https://github=
.com/aantron/dream/tree/master/example/z-playground">Dream app</a>!</li>
<li>The <a href=3D"https://aantron.github.io/dream/"><b>API docs</b></a>.</=
li>
</ul>

<p>
In particular, see
</p>

<ul class=3D"org-ul">
<li>Deployment examples for <a href=3D"https://github.com/aantron/dream/tre=
e/master/example/z-heroku#files">Heroku</a>, Digital Ocean <a href=3D"https=
://github.com/aantron/dream/tree/master/example/z-docker-esy#files">with Do=
cker</a>, and Digital Ocean <a href=3D"https://github.com/aantron/dream/tre=
e/master/example/z-systemd#files">with systemd</a>, all of which include Gi=
tHub Actions scripts and instructions.</li>
<li>Full-stack examples with <a href=3D"https://github.com/aantron/dream/tr=
ee/master/example/w-fullstack-jsoo#files">js_of_ocaml</a>, <a href=3D"https=
://github.com/aantron/dream/tree/master/example/w-fullstack-rescript#files"=
>ReScript</a>, and <a href=3D"https://github.com/aantron/dream/tree/master/=
example/r-fullstack-melange#files">Melange</a>.</li>
<li>Examples in <a href=3D"https://github.com/aantron/dream/tree/master/exa=
mple#reason">Reason syntax</a>.</li>
<li>Development <a href=3D"https://github.com/aantron/dream/tree/master/exa=
mple/w-fswatch#files">watching</a> and <a href=3D"https://github.com/aantro=
n/dream/tree/master/example/w-live-reload#files">live reloading</a>.</li>
</ul>
</div>
</div>

<div id=3D"outline-container-org1343b5a" class=3D"outline-4">
<h4 id=3D"org1343b5a">Contributing</h4>
<div class=3D"outline-text-4" id=3D"text-org1343b5a">
<p>
Dream has already received several very helpful
<a href=3D"https://github.com/aantron/dream/graphs/contributors">contributi=
ons</a>, and more are very welcome! See
<a href=3D"https://github.com/aantron/dream/blob/master/docs/CONTRIBUTING.m=
d"><code>CONTRIBUTING.md</code></a>. I must also acknowledge all
the people working on Dream's
<a href=3D"https://github.com/aantron/dream/blob/b79b06dd6add32beba6eee6864=
ce99413634b7b3/dream.opam#L49-L111">dependecies</a> and
<a href=3D"https://github.com/aantron/dream#acknowledgements">prior art</a>=
. In particular, Dream relies heavily on the HTTP and
WebSocket <a href=3D"https://github.com/aantron/dream/tree/b79b06dd6add32be=
ba6eee6864ce99413634b7b3/src/vendor">servers</a>
primarily by Spiros Eliopoulos (@seliopou) and Antonio Nuno Monteiro (@anmo=
nteiro).
</p>

<p>
Apart from accepting code, docs, and examples, Dream will happily link to:
</p>

<ul class=3D"org-ul">
<li>Blogs and articles, as different people learn best from different prese=
ntations.</li>
<li>"Downstream" libraries to use with Dream.</li>
</ul>

<p>
For example, Thibaut Mattio (@tmattio) is working on <a href=3D"https://git=
hub.com/tmattio/dream-livereload">dream-livereload</a>,
a live-reloading middleware for Dream, similar to the
<a href=3D"https://github.com/aantron/dream/tree/master/example/w-live-relo=
ad#files">example</a>, which he also contributed! Once
dream-livereload is slightly more mature, Dream will link to it from its RE=
ADME.
</p>

<p>
There is also <a href=3D"https://github.com/aantron/dream-serve">dream-serv=
e</a>, a live-reloading static site server based on
Dream and libuv, which was used to develop the docs.
</p>
</div>
</div>

<div id=3D"outline-container-orgd34b953" class=3D"outline-4">
<h4 id=3D"orgd34b953">Roadmap</h4>
<div class=3D"outline-text-4" id=3D"text-orgd34b953">
<p>
Dream is currently in an alpha state. It is thought (by me) to be internall=
y quite stable. However, there will
probably be various API tweaks before release 1.0.0.
</p>

<p>
My current, rough plan is to release several alphas of Dream over six month=
s or so. The releases will address:
</p>

<ol class=3D"org-ol">
<li>Flow control for very large responses, and getting the "advanced" part =
of the I/O API to be as close to zero-copy and non-allocating as possible (=
or reasonable).</li>
<li>Remaining (optional) <a href=3D"https://github.com/aantron/dream/issues=
?q=3Dis%3Aissue+is%3Aopen+label%3Asecurity">security enhancements</a>, such=
 as a <a href=3D"https://github.com/aantron/dream/issues/48">default conten=
t security policy</a>.</li>
<li>Remaining <a href=3D"https://github.com/aantron/dream/issues/13">sessio=
n improvements</a>, such as re-keying.</li>
<li>Friction in handling of JSON, database access, etc. This is not properl=
y part of or due to Dream, but it should be addressed for a better Web deve=
lopment experience.</li>
<li>Multicore and effects support.</li>
</ol>

<p>
That's all. Let's bring OCaml to the Web! Happy Web programming!
</p>


<p>
<a href=3D"https://github.com/aantron/dream">https://github.com/aantron/dre=
am</a>
</p>
</div>
</div>
</div>


<div id=3D"outline-container-org0a84bfb" class=3D"outline-3">
<h3 id=3D"org0a84bfb">Anton Bachin then added</h3>
<div class=3D"outline-text-3" id=3D"text-org0a84bfb">
<p>
For readers who saw the repo during the earlier <a href=3D"https://discuss.=
ocaml.org/t/7605">"leak,"</a> the main updates are:
</p>

<ul class=3D"org-ul">
<li>A large number of new examples, including <a href=3D"https://github.com=
/aantron/dream/tree/master/example#deploying">deployment</a>.</li>
<li>The <a href=3D"http://dream.as">playground</a>, which runs the examples=
, and itself served as a test.</li>
<li>An esy-based <a href=3D"https://github.com/aantron/dream#quick-start">q=
uick start</a> script.</li>
</ul>

<p>
There have also been very many smaller changes to the code, API, and the re=
st of the docs, but the above changes are
the biggest "chunks." The rest is too much to detail :)
</p>
</div>
</div>


<div id=3D"outline-container-org52d9a17" class=3D"outline-3">
<h3 id=3D"org52d9a17">Ivan Gotovchits asked and Anton Bachin replied</h3>
<div class=3D"outline-text-3" id=3D"text-org52d9a17">
<blockquote>
<p>
I was always wondering how does the source code that uses <a href=3D"https:=
//aantron.github.io/dream/#templates">templates</a> work with OCaml tooling=
, in particular with
merlin, ocp-indent, ocaml-format, tuareg and other editor modes?
</p>
</blockquote>

<p>
It doesn't work well in practice with anything other than syntax highlighti=
ng. Note that you control the syntax mode
with the extension. If your template is mostly HTML, you can name it <code>=
foo.eml.html</code>.
</p>

<p>
The intent is that the templates should contain mostly HTML in a large proj=
ect, and most of them would be in their
own <code>template/</code> subdirectory. OCaml tooling wouldn't be needed f=
or these mostly-HTML files. For a still-small, but
real example of this, see the Playground's
<a href=3D"https://github.com/aantron/dream/blob/fa20aebf36307a07b59c9ea018=
c25e508415d91a/example/z-playground/client/client.eml.html"><code>client.em=
l.html</code></a>.
</p>

<p>
The one-file <code>.ml</code> projects with templates, where tooling is a p=
roblem, are mostly good for the very first steps of
getting started, and examples.
</p>

<p>
There is also an issue about this in the repo, <a href=3D"https://github.co=
m/aantron/dream/issues/55">#55 " how to apply
ocamlformat"</a>.
</p>

<p>
Note that, as in the announcement text, you can use Dream with other templa=
ters, including
<a href=3D"https://github.com/aantron/dream/tree/master/example/w-tyxml#fil=
es">TyXML</a>, which has an <a href=3D"https://github.com/aantron/dream/tre=
e/master/example/w-tyxml#html-syntax">HTML
PPX</a>. In addition, if you are using Reason,
you can use <a href=3D"https://github.com/aantron/dream/tree/master/example=
/r-tyxml#files">TyXML JSX</a>. Either of these options
interacts well with tooling, as far as I know.
</p>

<p>
I didn't make TyXML the default because it considerably increases the Dream=
 learning curve for getting basic tasks
done. However, Dream still supports the choice of using TyXML with examples=
 and links.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">Ocaml developer at Routine, Paris, Remote OK</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/job-ocaml-developer-at-rout=
ine-paris-remote-ok/7911/1">https://discuss.ocaml.org/t/job-ocaml-developer=
-at-routine-paris-remote-ok/7911/1</a>
</p>
</div>

<div id=3D"outline-container-org83b9a22" class=3D"outline-3">
<h3 id=3D"org83b9a22">mefyl announced</h3>
<div class=3D"outline-text-3" id=3D"text-org83b9a22">
<p>
Routine (<a href=3D"https://routine.co">https://routine.co</a>) is looking =
for an OCaml developer.
</p>

<p>
Routine is a personal productivity assistant. The technological revolves he=
avily around OCaml which represents 90% of
the codebase, the remaining 10% being the UI in Typescript and Vue.js. We t=
arget both the browser and desktop through
electron, using Js_of_ocaml.
</p>

<p>
While the product is "just" a web app, our technological and academic backg=
round leads us to use designs that, I
think, can pique the interest of seasoned Ocaml developer. Amongst other th=
ings :
</p>

<ul class=3D"org-ul">
<li>Type-driven programming based on ppx derivers that produces typescript =
declaration for frontend bindings, JSON schema to expose and consume extern=
al REST APIs (Google, Notion, &#x2026;), automatic SQL bindings, etc.</li>
<li>Angstrom based parsing for the interactive console with highlighting an=
d completion.</li>
<li>Incremental based state updates to refresh minimal subsets of the app.<=
/li>
<li>Highly concurrent implementation through Lwt, exception-free design.</l=
i>
</ul>

<p>
We use state of the art CI/CD and development processes. We plan on distrib=
uting open sources packages of these
utilities (type-driven system, Google API bindings, Notion API bindings, &#=
x2026;). Future exciting subjects could be
extending Angstrom with manual rollback to implement generic completions or=
 binding Vue in OCaml directly using
melange or rescript to achieve rock solid typing down to the very frontend =
code (highly prospective teases, don't
quote me on this yet :).
</p>

<p>
The company is very much a startup, having just completed YC batch W21 and =
closed its first round of investment.
Salary is up to market standard depending on the profile, plus usual option=
s package, to be discussed.
</p>

<p>
While we expect great OCaml and general computer science proficiency, we're=
 open to most levels of experience.
Thoroughness and a love for well rounded, robust and beautiful software des=
ign is a must have - but that comes
bundled with OCaml love, right ?
</p>

<p>
Do not hesitate to reach out for any question here, at quentin.hocquet at rout=
ine.co or refer this to someone who may be
interested.
</p>

<p>
Thanks for your time and happy camel riding !
</p>
</div>
</div>
</div>




<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">Feather 0.2.0</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-feather-0-2-0/7916/1">h=
ttps://discuss.ocaml.org/t/ann-feather-0-2-0/7916/1</a>
</p>
</div>

<div id=3D"outline-container-org94c6c29" class=3D"outline-3">
<h3 id=3D"org94c6c29">Charles announced</h3>
<div class=3D"outline-text-3" id=3D"text-org94c6c29">
<p>
I'm happy to announce feather version 0.2.0! Feather is a minimal library f=
or bash-like scripting and process
execution.  (<a href=3D"https://github.com/charlesetc/feather">github</a>, =
<a href=3D"https://opam.ocaml.org/packages/feather/">opam</a>)
</p>

<p>
This release fixes some bugs and adds three new functions
</p>

<ul class=3D"org-ul">
<li><code>val and_ : cmd -&gt; cmd -&gt; cmd</code> =E2=80=94 chain two com=
mands, short circuiting if the first fails, akin to bash's <code>&amp;&amp;=
</code> operator.</li>
<li><code>val or_ : cmd -&gt; cmd -&gt; cmd</code> =E2=80=94 chain two comm=
ands, short circuiting if the first succeeds, akin to bash's <code>||</code=
> operator.</li>
<li><code>val sequence : cmd -&gt; cmd -&gt; cmd</code> =E2=80=94 chain two=
 commands regardless of exit status.</li>
</ul>

<p>
We include two new operators <code>&amp;&amp;.</code> and <code>||.</code> =
which correspond to <code>and_</code> and <code>or_</code> respectively. Th=
ey'll be found in
the <code>Feather.Infix</code> module, which has been renamed from <code>Fe=
ather.File_redirection_infix</code>.
</p>

<p>
Many thanks to new contributors @Firobe @juxd and @tmarti2 for making this =
release possible!
</p>
</div>
</div>
</div>




<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">BAP 2.3.0 Release</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-bap-2-3-0-release/7926/=
1">https://discuss.ocaml.org/t/ann-bap-2-3-0-release/7926/1</a>
</p>
</div>

<div id=3D"outline-container-org44b478f" class=3D"outline-3">
<h3 id=3D"org44b478f">Ivan Gotovchits announced</h3>
<div class=3D"outline-text-3" id=3D"text-org44b478f">
<p>
We're proud to release the next stable version of Carnegie Mellon Universit=
y Binary Analysis Platform (<a href=3D"https://github.com/BinaryAnalysisPla=
tform/bap">BAP</a>). The
full list of changes can be found on the <a href=3D"https://github.com/Bina=
ryAnalysisPlatform/bap/releases/tag/v2.3.0">release page</a> but the most i=
nteresting new features are highlighted
below.
</p>
</div>

<div id=3D"outline-container-orgad671dd" class=3D"outline-4">
<h4 id=3D"orgad671dd">The Primus Lisp Frontend</h4>
<div class=3D"outline-text-4" id=3D"text-orgad671dd">
<p>
Now BAP is able to understand not only binary programs but sources written =
in Primus Lisp. In case if you don't know,
<a href=3D"https://binaryanalysisplatform.github.io/bap/api/master/bap-prim=
us/Bap_primus/Std/Primus/Lisp/index.html">Primus Lisp</a> is our DSL for wr=
iting analysis and library stubs (e.g., to specify semantics of missing lib=
rary
functions). Now, it is possible to reify Primus Lisp programs into static r=
epresentation. For example, we can
translate the following Lisp program
</p>

<div class=3D"org-src-container">
<pre class=3D"src src-lisp">;; file demo.lisp

(defun example1 (x)
  (set R0 1)
  (set R1 2)
  (set R3 (+ R1 R2 (* R1 R2 3)))
  (memory-write R4 (+ R3 R1))
  (if (&gt; R0 (* R0 R0))
      (exec-addr 0xDEADBEEF)
    (set R0 (* R0 R2 R3))))
</pre>
</div>

<p>
into the BIL (BAP Instruction Language) AST and then pretty print it,
</p>
<pre class=3D"example" id=3D"org8f4fbc3">
$ bap show --primus-lisp-load=3Ddemo --target=3Darmv7+le -obap:bil example1
example1:
"{
   R0 :=3D 1
   R1 :=3D 2
   R3 :=3D R1 + R2 + R1 * R2 * 3
   mem :=3D mem with [R4] &lt;- low:8[R3 + R1]
   #1 :=3D R0 * R0 &lt; R0
   if (#1) {
     jmp 0xDEADBEEF
   }
   else {
     R0 :=3D R0 * R2 * R3
   }
 }"
</pre>

<p>
This new feature not only allows us to reify our Lisp stubs into static for=
m but also enables the main killer
feature. It is now possible to specify the semantics of machine instruction=
s in Primus Lisp. This feature enables
rapid development and experimentation with CPU semantics. And this brings u=
s to the next new feature.
</p>
</div>
</div>

<div id=3D"outline-container-orga7299ba" class=3D"outline-4">
<h4 id=3D"orga7299ba">New Target: RISC-V</h4>
<div class=3D"outline-text-4" id=3D"text-orga7299ba">
<p>
The first application of the Primus Lisp Frontend was writing the RISC-V se=
mantics. It took me only one day to write
the semantic of the <a href=3D"https://github.com/BinaryAnalysisPlatform/ba=
p/pull/1287">minimal subset</a> of RISC-V instruction. Well, partially it i=
s because RISCV-V is truly RISC,
like the <code>add</code> instruction just adds,
</p>

<pre class=3D"example" id=3D"org84be4fb">
(defun ADDI (dst rm rn)
  (set$ dst (+ rm rn)))
</pre>
</div>
</div>

<div id=3D"outline-container-org89a6986" class=3D"outline-4">
<h4 id=3D"org89a6986">New Target: ARMv8 (Aarch64)</h4>
<div class=3D"outline-text-4" id=3D"text-org89a6986">
<p>
The next target that we tried was Aarch64, the 64-bit ARM architecture. It =
was a little bit <a href=3D"https://github.com/BinaryAnalysisPlatform/bap/b=
lob/master/plugins/arm/semantics/aarch64.lisp">harder</a> but still
definitely more readable than the official ARM semantics.
</p>
</div>
</div>

<div id=3D"outline-container-org99bc6d6" class=3D"outline-4">
<h4 id=3D"org99bc6d6">Adds namespaces (packages) to Primus Lisp</h4>
<div class=3D"outline-text-4" id=3D"text-org99bc6d6">
<p>
Since now we have much more code in Primus Lisp we found ourselves struggli=
ng with name clashes. The Primus Lisp
program model is a set of mututally recursive overloaded definitions, so na=
ming things is crucial for us. Therefore
we implemented namespaces (which are, following Common Lisp trandition, nam=
ed packages). We ended up in a very Common
Lisp look and fill but without inheriting CL problems, like the dependency =
on the order of inclusion and package
redefinitions, and so on. Given our model, and that Primus Lisp features ty=
pe inference and Haskell-style type
classes for overloading, it wasn't that easy to implement :)
</p>
</div>
</div>

<div id=3D"outline-container-org0bf8d9a" class=3D"outline-4">
<h4 id=3D"org0bf8d9a">Adds the <code>bap dependencies</code> command</h4>
<div class=3D"outline-text-4" id=3D"text-org0bf8d9a">
<p>
The <a href=3D"https://github.com/BinaryAnalysisPlatform/bap/pull/1294">com=
mand</a> outputs program dependencies such as libraries and symbols. The in=
formation is collected recursively
with various output options, including dependency graph, YAML, JSON, and SE=
XP.
</p>

<p>
Much like <code>nm~+~ldd</code> on steroids and cross-platform (works on PE=
/ELF/COFF, and on binaries that are not native to the
host). So it could be quite useful even if you're not doing program analysi=
s, but just want to solve a nasty missing
library feature or figure our what programs use what libraries, e.g.,
</p>
<pre class=3D"example" id=3D"org31ed793">
$ bap dependencies `which ping` --recursive --ldconfig -ograph | graph-easy=
 --as boxart
                     =E2=94=8C=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=90
                     =E2=94=82 libresolv.so.2 =E2=94=82 =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=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90
                     =E2=94=94=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=98                                   =E2=94=
=82
                       =E2=96=B2                                           =
       =E2=94=82
                       =E2=94=82                                           =
       =E2=94=82
                       =E2=94=82                                           =
       =E2=94=82
=E2=94=8C=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=90     =
=E2=94=8C=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=90     =E2=94=8C=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=90  =E2=94=82
=E2=94=82 libidn.so.11 =E2=94=82 =E2=97=80=E2=94=80=E2=94=80 =E2=94=82     =
      ping           =E2=94=82 =E2=94=80=E2=94=80=E2=96=B6 =E2=94=82 libnet=
tle.so.6 =E2=94=82  =E2=94=82
=E2=94=94=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=98     =
=E2=94=94=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=98     =E2=94=94=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=98  =E2=94=82
  =E2=94=82                    =E2=94=82                 =E2=94=82         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                    =E2=94=82                 =E2=94=82         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                    =E2=96=BC                 =E2=94=82         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                  =E2=94=8C=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=90  =E2=94=82              =E2=94=
=82                 =E2=94=82
  =E2=94=82                  =E2=94=82  libcap.so.2   =E2=94=82  =E2=94=82 =
             =E2=94=82                 =E2=94=82
  =E2=94=82                  =E2=94=94=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=98  =E2=94=82              =E2=94=
=82                 =E2=94=82
  =E2=94=82                    =E2=94=82                 =E2=94=82         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                    =E2=94=82                 =E2=94=82         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                    =E2=96=BC                 =E2=96=BC         =
     =E2=94=82                 =E2=94=82
  =E2=94=82                  =E2=94=8C=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=90       =E2=94=82  =
               =E2=94=82
  =E2=94=94=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=96=B6 =E2=94=82        libc.so.6         =E2=94=82 =E2=97=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98                 =E2=94=
=82
                     =E2=94=94=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=98                         =
=E2=94=82
                       =E2=94=82                      =E2=96=B2            =
               =E2=94=82
                       =E2=94=82                      =E2=94=94=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=98
                       =E2=96=BC
                     =E2=94=8C=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=90
                     =E2=94=82 ld-linux.so.2  =E2=94=82
                     =E2=94=94=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=98
</pre>
</div>
</div>

<div id=3D"outline-container-orgfcaf32e" class=3D"outline-4">
<h4 id=3D"orgfcaf32e">What's Next?</h4>
<div class=3D"outline-text-4" id=3D"text-orgfcaf32e">
<p>
We are working on decompilation and integrating with Ghidra, so in 2.4.0 yo=
u should expect that bap will output C
code for binaries. But it is not all, we're even working into turning BAP i=
nto a program analysis framework that
enables analysis of source code programs. And even crazier, we're working o=
n adding compilation capabilities to BAP,
i.e., an ability to compile/recompile the input sources. So soon BAP will o=
utlive its name, or we will need to find a
new interpretation for the BAP acronym, something like the Best Analysis Pl=
atform ;)
</p>

<p>
We also plan to make BAP more available for non-seasoned OCaml users and wa=
nt to push bap into mainstream Linux
distributions and overall lower the entrance barrier.  Of course, with the =
end goal to lure users into installing
opam))
</p>
</div>
</div>

<div id=3D"outline-container-org9809ec0" class=3D"outline-4">
<h4 id=3D"org9809ec0">Questions and Suggestions</h4>
<div class=3D"outline-text-4" id=3D"text-org9809ec0">
<p>
Please, do not hesitate to ask questions and provide your suggestions and, =
ideally, join our <a href=3D"https://gitter.im/BinaryAnalysisPlatform/bap">=
community</a>. Even if
you don't plan to work on binary analysis, BAP offers lots of opportunities=
 for writing your toy programs for
learning the language, or maybe even student projects.
</p>
</div>
</div>
</div>
</div>




<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">Building Ahrefs codebase with Melange</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/building-ahrefs-codebase-wi=
th-melange/7941/1">https://discuss.ocaml.org/t/building-ahrefs-codebase-wit=
h-melange/7941/1</a>
</p>
</div>

<div id=3D"outline-container-org47de54d" class=3D"outline-3">
<h3 id=3D"org47de54d">Javier Ch=C3=A1varri announced</h3>
<div class=3D"outline-text-3" id=3D"text-org47de54d">
<p>
At Ahrefs, we make extensive use of OCaml and ReScript =E2=80=94previously =
<a href=3D"https://rescript-lang.org/blog/bucklescript-is-rebranding">known=
 as
BuckleScript</a>. So we have been following the latest
developments in the ReScript ecosystem with great interest.
</p>

<p>
A few months ago, <a href=3D"https://discuss.ocaml.org/u/anmonteiro/summary=
">Ant=C3=B3nio Monteiro</a> released
<a href=3D"https://github.com/melange-re/melange">Melange</a>, a fork of Re=
Script with an emphasis of keeping compatibility with
OCaml ecosystem. One of the key features of Melange is that it uses OCaml 4=
.12, with all the upsides that that
entails (ppxlib, let syntax, better errors, &#x2026;). Besides that, Melang=
e has been modeled recently <a href=3D"https://github.com/melange-re/melang=
e/pull/107">as just a
<code>compiler-libs</code> library</a>, so it can be integrated with other =
OCaml
code in a single opam switch.
</p>

<p>
We decided to give Melange a try recently at Ahrefs, and shared the results=
 of this experiment in a blog post:
</p>

<p>
<a href=3D"https://tech.ahrefs.com/building-ahrefs-codebase-with-melange-9f=
881f6d022b">https://tech.ahrefs.com/building-ahrefs-codebase-with-melange-9=
f881f6d022b</a>
</p>

<p>
We are currently looking into how a deeper integration with Dune would look=
 like. If your team or company has tried
Melange, or is interested on doing so, we would be very interested to hear =
your use cases and share experiences.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">Lwt 5.4.1</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-lwt-5-4-1/7943/1">https=
://discuss.ocaml.org/t/ann-lwt-5-4-1/7943/1</a>
</p>
</div>

<div id=3D"outline-container-orgc74c142" class=3D"outline-3">
<h3 id=3D"orgc74c142">Rapha=C3=ABl Proust announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc74c142">
<p>
We are glad to announce the release of version 5.4.1 of Lwt: a bugfix-only =
release.
</p>

<p>
<a href=3D"https://github.com/ocsigen/lwt/releases/tag/5.4.1">https://githu=
b.com/ocsigen/lwt/releases/tag/5.4.1</a>
</p>

<p>
You can update to this version in <code>opam</code>:
</p>

<pre class=3D"example" id=3D"orge5dc407">
opam update
opam upgrade lwt
</pre>

<p>
Thanks to the contributors for finding and fixing the bugs, leading to this=
 release. Check out the release notes
(link above) for a full list.
</p>
</div>
</div>
</div>




<div id=3D"outline-container-7" class=3D"outline-2">
<h2 id=3D"7">Other OCaml News</h2>
<div class=3D"outline-text-2" id=3D"text-7">
</div>
<div id=3D"outline-container-orgafc71f5" class=3D"outline-3">
<h3 id=3D"orgafc71f5">From the ocamlcore planet blog</h3>
<div class=3D"outline-text-3" id=3D"text-orgafc71f5">
<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://frama-c.com/fc-versions/vanadium.html">Beta release =
of Frama-C 23.0~rc1 (Vanadium)</a></li>
<li><a href=3D"https://tech.ahrefs.com/building-ahrefs-codebase-with-melang=
e-9f881f6d022b">Building Ahrefs codebase with Melange</a></li>
<li><a href=3D"http://math.andrej.com/2021/05/18/computing-an-integer-using=
-a-sheaf-topos/">Computing an integer using a Grothendieck topos</a></li>
<li><a href=3D"https://rescript-lang.org/blog/release-9-1"> ReScript 9.1</a=
></li>
<li><a href=3D"https://www.ocamlpro.com/2021/05/06/tutorial-format-module-o=
f-ocaml/">Tutorial: Format Module of OCaml</a></li>
<li><a href=3D"https://tarides.com/blog/2021-04-30-scop-selected-for-dapsi-=
initiative">Tarides project SCoP is selected as one of the brightest Data P=
ortability projects in Europe!</a></li>
<li><a href=3D"https://www.ocamlpro.com/2021/04/29/alt-ergo-users-club-annu=
al-meeting-2021/">Alt-Ergo Users=E2=80=99 Club Annual Meeting (2021)</a></l=
i>
</ul>
</div>
</div>
</div>




<div id=3D"outline-container-org783f766" class=3D"outline-2">
<h2 id=3D"org783f766">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org783f766">
<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"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</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" id=3D"org8d135c0">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>

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


--=-=-=--



More information about the caml-news-weekly mailing list