From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "lwn" <lwn@lwn.net>, caml-list@inria.fr
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 26 Nov 2024 09:30:02 +0100 [thread overview]
Message-ID: <m2v7wajt2t.fsf@mac-03220211.irisa.fr> (raw)
[-- Attachment #1: Type: text/plain, Size: 29192 bytes --]
Hello
Here is the latest OCaml Weekly News, for the week of November 19 to 26,
2024.
Table of Contents
─────────────────
OCaml 5.2.1 released
smaws preview release, an AWS SDK for OCaml using eio
ppx_deriving_ezjsonm
FUN OCaml now has a YouTube Channel
Terrateam's open source Ocaml repository
OUPS december 2024
Dune dev meeting
Other OCaml News
Old CWN
OCaml 5.2.1 released
════════════════════
Archive: <https://discuss.ocaml.org/t/ocaml-5-2-1-released/15634/1>
octachron announced
───────────────────
We have the pleasure of announcing the release of OCaml 5.2.1,
dedicated to the memory of Niels Bohr and Paul Éluard on the
anniversary of their deaths.
OCaml 5.2.1 is a collection of safe but import runtime time bug fixes
backported from the 5.3 branch of OCaml to improve the stability of
the 5.2 runtime while waiting for the upcoming release of OCaml 5.3.0.
The full list of bug fixes is available below for more details.
Happy hacking, Florian Angeletti, for the OCaml team.
Installation Instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
The base compiler can be installed as an opam switch with the
following commands:
┌────
│ opam update
│ opam switch create 5.2.1
└────
The source code for the release is also directly available on:
• [GitHub]
• [Inria archive]
[GitHub] <https://github.com/ocaml/ocaml/archive/5.2.1.tar.gz>
[Inria archive]
<https://caml.inria.fr/pub/distrib/ocaml-5.2/ocaml-5.2.1.tar.gz>
Bug Fixes In OCaml 5.2.1 (18 November 2024)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
◊ Runtime System:
• [#13207]: Be sure to reload the register caching the exception
handler in `caml_c_call' and `caml_c_call_stack_args', as its value
may have been changed if the OCaml stack is expanded during a
callback. (Miod Vallat, report by Vesa Karvonen, review by Gabriel
Scherer and Xavier Leroy)
• [#13252]: Rework register assignment in the interpreter code on m68k
on Linux, due to the %a5 register being used by GLIBC. (Miod
Vallat, report by Stéphane Glondu, review by Gabriel Scherer and
Xavier Leroy)
• [#13268]: Fix a call to test in `configure.ac' that was causing
errors when LDFLAGS contains several words. (Stéphane Glondu,
review by Miod Vallat)
• [#13234], [#13267]: Open runtime events file in read-write mode on
ARMel (ARMv5) systems due to atomic operations limitations on that
platform. (Stéphane Glondu, review by Miod Vallat and Vincent
Laviron)
• [#13188]: fix races in the FFI code coming from the use of
`Int_val(...)' on rooted values inside blocking questions / without
the runtime lock. (Calling `Int_val(...)' on non-rooted immediates
is fine, but any access to rooted values must be done outside
blocking sections / with the runtime lock.) (Etienne Millon, review
by Gabriel Scherer, Jan Midtgaard, Olivier Nicole)
• [#13318]: Fix regression in GC alarms, and fix them for Flambda.
(Guillaume Munch-Maccagnoni, report by Benjamin Monate, review by
Vincent Laviron and Gabriel Scherer)
• [#13140]: POWER back-end: fix issue with call to
`caml_call_realloc_stack' from a DLL (Xavier Leroy, review by Miod
Vallat)
• [#13370]: Fix a low-probability crash when calling `Gc.counters'.
(Demi Marie Obenour, review by Gabriel Scherer)
• [#13402], [#13512], [#13549], [#13553]: Revise bytecode
implementation of callbacks so that it no longer produces dangling
registered bytecode fragments. (Xavier Leroy, report by Jan
Midtgaard, analysis by Stephen Dolan, review by Miod Vallat)
• [#13502]: Fix misindexing related to `Gc.finalise_last' that could
prevent finalisers from being run. (Nick Roberts, review by Mark
Shinwell)
• [#13520]: Fix compilation of native-code version of
systhreads. Bytecode fields were being included in the thread
descriptors. (David Allsopp, review by Sébastien Hinderer and Miod
Vallat)
[#13207] <https://github.com/ocaml/ocaml/issues/13207>
[#13252] <https://github.com/ocaml/ocaml/issues/13252>
[#13268] <https://github.com/ocaml/ocaml/issues/13268>
[#13234] <https://github.com/ocaml/ocaml/issues/13234>
[#13267] <https://github.com/ocaml/ocaml/issues/13267>
[#13188] <https://github.com/ocaml/ocaml/issues/13188>
[#13318] <https://github.com/ocaml/ocaml/issues/13318>
[#13140] <https://github.com/ocaml/ocaml/issues/13140>
[#13370] <https://github.com/ocaml/ocaml/issues/13370>
[#13402] <https://github.com/ocaml/ocaml/issues/13402>
[#13512] <https://github.com/ocaml/ocaml/issues/13512>
[#13549] <https://github.com/ocaml/ocaml/issues/13549>
[#13553] <https://github.com/ocaml/ocaml/issues/13553>
[#13502] <https://github.com/ocaml/ocaml/issues/13502>
[#13520] <https://github.com/ocaml/ocaml/issues/13520>
smaws preview release, an AWS SDK for OCaml using eio
═════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-smaws-preview-release-an-aws-sdk-for-ocaml-using-eio/15635/1>
Chris Armstrong announced
─────────────────────────
I'm pleased to announce the first preview release for the [smaws]
library (`0.1~preview1').
*[smaws]* provides AWS bindings for OCaml using the modern [eio]
library for effects-based concurrency handling.
[smaws] <https://github.com/chris-armstrong/smaws>
[eio] <https://github.com/ocaml-multicore/eio>
Links
╌╌╌╌╌
• [Installation and Usage instructions]
• [Examples]
[Installation and Usage instructions]
<https://chris-armstrong.github.io/smaws/smaws-clients/>
[Examples]
<https://github.com/chris-armstrong/smaws/tree/main/awssdklib_examples>
Whats in this release
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
This release includes SDKs for some AWS services and is intended to
demonstrate its API.
It is not production ready, lacking important features such as full
API documentation EC2/ECS instance metadata authentication, retry and
timeout handling, etc. It also needs support for the other internal
AWS API types to extend coverage across most AWS services.
Motivation
╌╌╌╌╌╌╌╌╌╌
I wanted to build an AWS SDK using modern effects-based
concurrency. I've built similar bindings for ReScript and ReasonML in
the past (some of the code is in fact ported across) but this is the
first OCaml-native bindings I've created.
Unlike similar projects in the OCaml ecosystem, it uses the newer
Smithy definitions to generate its bindings instead of the Python
botocore definitions. These should be better supported by AWS in the
future with richer API definitions.
What's next
╌╌╌╌╌╌╌╌╌╌╌
My next task is to finish off API documentation generation, and then
expand support for all the authentication methods and other API types
that will allow this to be used with most AWS services.
ppx_deriving_ezjsonm
════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ppx-deriving-ezjsonm/15637/1>
Patrick Ferris announced
────────────────────────
I'm happy to announce the release of `ppx_deriving_ezjsonm' (based off
of [ppx_deriving_yaml]). The two libraries share a common definition
of a "`value'" which made the reuse of the existing deriver possible
for a simple JSON deriver.
┌────
│ opam update
│ opam install ppx_deriving_ezjsonm
└────
The [documentation is online].
This library may come in handy when your dependency cone already
includes `ezjsonm'. If that is not the case, you would probably have
better luck in the `yojson' ecosystem of tools.
Happy JSON-ing :camel:
[ppx_deriving_yaml]
<https://github.com/patricoferris/ppx_deriving_yaml/>
[documentation is online]
<https://patricoferris.github.io/ppx_deriving_yaml/ppx_deriving_ezjsonm/index.html>
FUN OCaml now has a YouTube Channel
═══════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/fun-ocaml-now-has-a-youtube-channel/15639/1>
Sabine Schmaltz announced
─────────────────────────
I just created a YouTube channel for FUN OCaml. :sparkles: :camel:
The talk recordings from the conference in Berlin on September 16 +
17, 2024 are now available for viewing!
<https://www.youtube.com/@FUNOCaml/featured>
If you can, commenting, liking, or subscribing helps us to make these
videos more visible and easier to find on YouTube, so big thanks for
everyone who helps us with this! :orange_heart: :camel:
For people who avoid YouTube: The videos will also be made available
on watch.ocaml.org.
Terrateam's open source Ocaml repository
════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/terrateams-open-source-ocaml-repository/15645/1>
Malcolm announced
─────────────────
A few years ago my friend and I started a company called [Terrateam],
which does infrastructure orchestration on GitHub. Being that I am an
Ocamler and we are a lean company, we chose to use Ocaml as our
primary language. We recently went open source and I'm posting the
link here to contribute an example of an actual company using Ocaml.
A real repository.
The code can be found [here].
There a few things to note about the repo:
1. It's a mono repo, so while many of the libraries in there are
generic, they are not really individually consumable as is.
2. We have our own concurrency framework (more on that below).
3. We use our own build library (pds, which is in opam).
4. The code is in flux all the time so things change rapidly.
Why did we build our own concurrency framework?
Disclaimer: Yet another concurrency framework? Yep! Do I expect
anyone to use it? Nope, and that's ok. It is designed for our needs.
It's meant to be maintainable by one person. It's not meant to
compete with Lwt or Async for mind share. If it grows, great, if it
doesn't, I'm happy still.
Our concurrency framework is called "Asynchronous Building Blocks"
(Abb). It started over a decade ago when I was frustrated with a few
things:
1. I wanted kqueue support in Async, but (at the time) Async required
modifying a handful of repos to support it and it just wasn't
obvious how.
2. Lwt supported kqueue, but for no good reason, I just didn't like
Lwt. Part of it was how failure worked in Lwt and other part is
just it didn't fit my aesthetic. That isn't a ding against Lwt,
just personal preference.
3. I wanted as much of it to be implemented in Ocaml as possible. As
it stands now, the only C code is `libkqueue' which is a little
shim to to allow kqueue code to run on Linux, otherwise everything
is in Ocaml.
4. I didn't like how neither Async nor Lwt really supported
cancelling operations. I wanted that to be part of the framework,
not an ad-hoc feature per library. Coming from Erlang, cancelling
is really important to me and part of how I think about writing
concurrent software. I was bummed that (last I looked) Eio
explicitly rejected cancelling.
5. I also wanted a little experiment of "what if the concurrency
library exposed a syscall interface like an OS?" So a lot of the
interface is meant to look low-level (I don't think this idea
really panned out or made Abb meaningfully different).
6. I also just like having my own frameworks.
Add a dash of naivete, "how hard can it be to build a concurrency
framework?", I started my own. First commit was Mar 9, 2013.
Much of the concurrency monad is based on an unreleased library called
`Fut' by @dbuenzli
Over time, Abb matured to where I could use it in my personal
projects. And by the time we decided to make Terrateam, I felt it was
good enough for production. And it's been running production traffic
for a few years now.
One, unexpected, benefit of Lwt and Async existing in the community is
that adding a third one isn't that hard. Almost all libraries that
want to be used support both, and that usually means that they have a
generic interface. Cohttp and Dns are examples. So I could use
existing libraries for things I didn't want to or don't feel I could
reasonably implement myself.
I've also used Abb as a foundation my web framework called Brtl
(pronounced Brutal) which is both a backend framework build on Cohttp
and a frontend framework built on Brr. It really doesn't do anything
fancy, like Dream, it's pretty low level and focused on being simple.
The good:
1. It works! At least, for me.
2. Given that I wrote very single line of code, debugging and bug
fixing (which is less and less) is very easy. I also have a really
great mental model of how it works.
3. I like that I can just cancel a whole graph of async work if it's
no longer needed.
4. The future's library works in FreeBSD, Linux, and JavaScript.
5. The test coverage is pretty darn high. This is because it's a
pretty intricate thing to implement so I had to implement a lot of
tests to stay sane.
The bad:
1. Performance is not anything special. I don't think this is a
fundamental flaw, it's just that it is as fast as I need it to be
right now.
2. Some of the API is a awkward if you don't know the system. Or
names are long, like `Abb_future_combinators'.
3. The multi-target build story kind of sucks. I think that might be
a bigger issue with the pds build system but for now in the web
framework you have to use `Abb_js' rather than `Abb' for
everything.
4. There are definitely some corners cut in, especially around file
IO, but that's OK, we don't do much file IO.
5. Explicitly takes advantage in that everything runs in a single
thread. So implicitly going multi-threaded would probably break
things.
Future work:
There really isn't a lot of future work. For the most part: Abb is
done. Or should I say the interface is done. Yes, it will need
updates to fight bit rot, but there isn't much more for it to do. It
runs your code concurrently, the end.
However, as Ocaml5 becomes more of a thing, it will need to take
advantage of that. I haven't really thought about how to do it. One
item I have in my to-do list is to evaluate if Picos could be a base
layer for Abb. Abb is a layered approach so really you only need to
implement the `Abb_intf.S' interface and everything above that should
Just Work (given single threaded semantics). I think any future work
to support multi core will probably need an explicit "this crosses a
thread boundary" API. Abb will get there, eventually, but right now
it doesn't need to.
Effects will obviously have a big impact, I have no idea what that'll
do for Abb. I hope I can transition it slowly to supporting effects
but I don't want to look at effects until it's in the type system.
Some, perhaps, libraries of interest in the repo:
1. [Abb_scheduler_kqueue] - The most used scheduler. It implements
the [Abb_intf] interface.
2. [Abb_scheduler_select] - A simpler select-based scheduler. This is
meant to be used any place kqueue is not supported and also as
demo.
3. [Pgsql_io] - An implementation of the PostgreSQL protocol.
4. [Githubc2] - An automatically generated GitHub REST library
generated from their JSON Schema. This actually has no Abb
dependency, just implements the API serializing/deserializing.
5. [OpenAPI CLI] - This generates a library (see Githubc2) from an
OpenAPI spec. It is, absolutely, a bit of a rats nest, but it
works. We chose to do code-gen for this because I didn't want to
be blocked when compiling based on different compiler versions as
we're using `Ast_helper'. Ocaml, the code, is more stable than
Ocaml, the compiler API.
There is a bunch of other stuff in there. If you decide to poke
around and have any questions, feel free to ask. I can promise: not
every decision in there is well thought out or coherent.
[Terrateam] <https://terrateam.io>
[here] <https://github.com/terrateamio/terrateam>
[Abb_scheduler_kqueue]
<https://github.com/terrateamio/terrateam/tree/main/code/src/abb_scheduler_kqueue>
[Abb_intf]
<https://github.com/terrateamio/terrateam/tree/main/code/src/abb_intf>
[Abb_scheduler_select]
<https://github.com/terrateamio/terrateam/tree/main/code/src/abb_scheduler_select>
[Pgsql_io]
<https://github.com/terrateamio/terrateam/tree/main/code/src/pgsql_io>
[Githubc2]
<https://github.com/terrateamio/terrateam/tree/main/code/src/githubc2>
[OpenAPI CLI]
<https://github.com/terrateamio/terrateam/tree/main/code/src/openapi_cli>
OUPS december 2024
══════════════════
Archive: <https://discuss.ocaml.org/t/oups-december-2024/15654/1>
zapashcanon announced
─────────────────────
CAUTION: the time has been changed from 7pm to 6:30pm
The next OUPS meetup will take place on *Thursday, 12th of December*
2024. It will start at *6:30pm* at the *4 place Jussieu* in Paris. It
will be in the in the *Esclangon building* (amphi Astier).
Please, *[register on meetup ]* as soon as possible to let us know how
many pizza we should order.
For more details, you may check the [OUPS’ website ].
This time we'll have the following talks:
*Snapshottable Stores – Clément Allain & Gabriel Scherer (@gasche)*
We say that an imperative data structure is *snapshottable* or
*supports snapshots* if we can efficiently capture its current state,
and restore a previously captured state to become the current state
again. This is useful, for example, to implement backtracking search
processes that update the data structure during search.
Inspired by a data structure proposed in 1978 by Baker, we present a
*snapshottable store*, a bag of mutable references that supports
snapshots. Instead of capturing and restoring an array, we can capture
an arbitrary set of references (of any type) and restore all of them
at once. This snapshottable store can be used as a building block to
support snapshots for arbitrary data structures, by simply replacing
all mutable references in the data structure by our store
references. We present use-cases of a snapshottable store when
implementing type-checkers and automated theorem provers.
Our implementation is designed to provide a very low overhead over
normal references, in the common case where the capture/restore
operations are infrequent. Read and write in store references are
essentially as fast as in plain references in most situations, thanks
to a key optimisation we call *record elision*. In comparison, the
common approach of replacing references by integer indices into a
persistent map incurs a logarithmic overhead on reads and writes, and
sophisticated algorithms typically impose much larger constant
factors.
The implementation, which is inspired by Baker's and the OCaml
implementation of persistent arrays by Conchon and Filliâtre, is both
fairly short and very hard to understand: it relies on shared mutable
state in subtle ways. We provide a mechanized proof of correctness of
its core using the Iris framework for the Coq proof assistant.
[/details]
*Safe, expressive and efficient programming of FPGAs circuits – Loïc
Sylvestre*
FPGAs (Field-Programmable Gate Arrays) are reconfigurable digital
circuits: their behavior can be customized by logic synthesis of
specification at the so-called register transfer level (RT level), in
hardware description languages such as VHDL or Verilog. FPGAs are well
suited to implement reactive systems, directly as synchronous circuits
interacting with the external environment via I/O pins – the logic
synthesizer ensuring that timing constraints are met, given the FPGA
clock frequency. FPGAs are also used to implement hardware
accelerators ; however, RT-level descriptions of transformational
systems (or “computations”) – with latencies of several clock cycles –
are difficult to debug, maintain and manually optimize. High-Level
Synthesis (HLS) offers a simpler way of expressing computations, using
a programming language compiled at the RT level. The advantage of this
approach is to keep the implementation details hidden from the
programmer, leaving the compiler responsible for scheduling
computations over time. However, this leads to a loss of control over
temporal behavior and therefore safety and efficiency for the circuits
generated. As embedded systems, especially those based on FPGAs, need
to perform more and more computations, while interacting with their
environment, this thesis proposes a programming model to combine
hardware description (data-flow oriented) and general-purpose parallel
computation (control-flow oriented) using a synchronous approach. This
programming model forms the basis for the design and implementation of
Eclat, a functional-imperative, parallel and synchronous programming
language, compiled to VHDL. Eclat is sufficiently precise to describe
synchronous circuits at the RT level. It facilitates the programming
of hardware accelerators, with a clear and predictable temporal
semantics by which to exploit time-space trade-offs. Any Eclat program
is reactive, with a mechanism for embedding computations within
programs and thereby mix computation and interaction. Eclat also
offers shared memory (in the form of RAM blocks), with deterministic
concurrency. It is used to develop programming abstractions such as
algorithmic skeletons and virtual machine implementations for
high-level languages. This addresses, at various levels, the need to
run general-purpose algorithms within FPGA-based reactive embedded
applications.
After the talks there will be some pizzas offered by the [OCaml
Software Foundation] and later on we’ll move to a pub nearby as usual.
[register on meetup ]
<https://www.meetup.com/fr-FR/ocaml-paris/events/304726885>
[OUPS’ website ] <https://oups.frama.io>
[OCaml Software Foundation] <https://ocaml-sf.org>
Dune dev meeting
════════════════
Archive: <https://discuss.ocaml.org/t/ann-dune-dev-meeting/14994/17>
Etienne Marais announced
────────────────────────
Hi camelers! :camel: We will hold our regular Dune dev meeting on
Wednesday, November, 27th at 16:00 CET. As usual, the session will be
one hour long.
Whether you are a maintainer, a regular contributor, a new joiner or
just curious, you are welcome to join: these discussions are opened!
The goal of these meetings is to provide a place to discuss the
ongoing work together and synchronise between the Dune developers
:ok_hand:
:calendar: *Agenda*
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
The agenda is available on the [meeting dedicated page]. Feel free to
ask if you want to add more items in it.
[meeting dedicated page]
<https://github.com/ocaml/dune/wiki/dev-meeting-2024-11-27>
:computer: *Links*
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
• Meeting link: [zoom]
• Calendar event: [google calendar]
• Wiki with information and previous notes: [GitHub Wiki]
[zoom]
<https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09>
[google calendar]
<https://calendar.google.com/calendar/embed?src=c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com>
[GitHub Wiki] <https://github.com/ocaml/dune/wiki#dev-meetings>
Other OCaml News
════════════════
From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Universal React in OCaml - David Sancho Moreno - FUN OCaml 2024]
• [Using odoc to Write Documentation - Paul-Elliot Anglès d'Auriac -
FUN OCaml 2024]
• [How the Multicore Garbage Collector works - Sudha Parimala - FUN
OCaml 2024]
• [MirageOS - Developing Operating Systems in OCaml - Hannes Mehnert -
FUN OCaml 2024]
• [The Story Behind the Fastest Image Comparison Library - Dmitriy
Kovalenko - FUN OCaml 2024]
• [Easy GADTs by Repeating Yourself - Eduardo Rafael - FUN OCaml 2024]
• [Maybe OCaml Was the Friends We Made Along the Way - Dillon Mulroy -
FUN OCaml 2024]
• [OCANNL, the `neural_nets_lib` - Lukasz Stafiniak - FUN OCaml 2024]
• [Learning OCaml with Tiny Code Xmas - Michael Dales - FUN OCaml
2024]
• [Let Signals in OCaml - Rizo Isrof - FUN OCaml 2024]
• [A 'Melange' of Tooling Coming Together - Antonio Monteiro - FUN
OCaml 2024]
• [Building Incremental and Reproducible Data Pipelines - Patrick
Ferris - FUN OCaml 2024]
• [The Future of Dune - Leandro Ostera - FUN OCaml 2024]
• [Advanced Code Navigation in OCaml-LSP]
• [opam 2.3.0 release!]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Universal React in OCaml - David Sancho Moreno - FUN OCaml 2024]
<https://www.youtube.com/watch/Oy3lZl2kE-0?version=3>
[Using odoc to Write Documentation - Paul-Elliot Anglès d'Auriac - FUN
OCaml 2024] <https://www.youtube.com/watch/Qzf_ZB1TKLQ?version=3>
[How the Multicore Garbage Collector works - Sudha Parimala - FUN OCaml
2024] <https://www.youtube.com/watch/fgdB_9DcJj4?version=3>
[MirageOS - Developing Operating Systems in OCaml - Hannes Mehnert - FUN
OCaml 2024] <https://www.youtube.com/watch/g7Kl5mRDCDo?version=3>
[The Story Behind the Fastest Image Comparison Library - Dmitriy
Kovalenko - FUN OCaml 2024]
<https://www.youtube.com/watch/hTAvAKolWd8?version=3>
[Easy GADTs by Repeating Yourself - Eduardo Rafael - FUN OCaml 2024]
<https://www.youtube.com/watch/-XYO_ILJG2M?version=3>
[Maybe OCaml Was the Friends We Made Along the Way - Dillon Mulroy - FUN
OCaml 2024] <https://www.youtube.com/watch/1HlIHPa38gY?version=3>
[OCANNL, the `neural_nets_lib` - Lukasz Stafiniak - FUN OCaml 2024]
<https://www.youtube.com/watch/1J2XyHLb2J0?version=3>
[Learning OCaml with Tiny Code Xmas - Michael Dales - FUN OCaml 2024]
<https://www.youtube.com/watch/2ZswyN4aP2o?version=3>
[Let Signals in OCaml - Rizo Isrof - FUN OCaml 2024]
<https://www.youtube.com/watch/34bceAuSRXE?version=3>
[A 'Melange' of Tooling Coming Together - Antonio Monteiro - FUN OCaml
2024] <https://www.youtube.com/watch/3oCXT-ycHHs?version=3>
[Building Incremental and Reproducible Data Pipelines - Patrick Ferris -
FUN OCaml 2024] <https://www.youtube.com/watch/6mxx2j1jmhE?version=3>
[The Future of Dune - Leandro Ostera - FUN OCaml 2024]
<https://www.youtube.com/watch/7_bv3EvQANY?version=3>
[Advanced Code Navigation in OCaml-LSP]
<https://tarides.com/blog/2024-11-20-advanced-code-navigation-in-ocaml-lsp>
[opam 2.3.0 release!]
<https://ocamlpro.com/blog/2024_11_13_opam_2_3_0_releases>
Old CWN
═══════
If you happen to miss a CWN, you can [send me a message] and I'll mail
it to you, or go take a look at [the archive] or the [RSS feed of the
archives].
If you also wish to receive it every week by mail, you may subscribe
to the [caml-list].
[Alan Schmitt]
[send me a message] <mailto:alan.schmitt@polytechnique.org>
[the archive] <https://alan.petitepomme.net/cwn/>
[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>
[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>
[Alan Schmitt] <https://alan.petitepomme.net/>
[-- Attachment #2: Type: text/html, Size: 39744 bytes --]
next reply other threads:[~2024-11-26 8:30 UTC|newest]
Thread overview: 236+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-26 8:30 Alan Schmitt [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-04-15 9:51 Alan Schmitt
2025-04-08 13:14 Alan Schmitt
2025-04-01 9:12 Alan Schmitt
2025-03-25 8:06 Alan Schmitt
2025-03-18 10:18 Alan Schmitt
2025-03-11 15:00 Alan Schmitt
2025-03-04 14:01 Alan Schmitt
2025-02-25 10:36 Alan Schmitt
2025-02-18 14:33 Alan Schmitt
2025-02-11 7:17 Alan Schmitt
2025-02-04 12:05 Alan Schmitt
2025-01-28 13:24 Alan Schmitt
2025-01-21 15:47 Alan Schmitt
2025-01-14 8:20 Alan Schmitt
2025-01-07 17:26 Alan Schmitt
2024-12-31 8:03 Alan Schmitt
2024-12-24 8:55 Alan Schmitt
2024-12-17 13:05 Alan Schmitt
2024-12-10 13:48 Alan Schmitt
2024-12-03 14:44 Alan Schmitt
2024-11-19 6:52 Alan Schmitt
2024-11-12 15:00 Alan Schmitt
2024-11-05 13:22 Alan Schmitt
2024-10-29 13:30 Alan Schmitt
2024-10-22 12:42 Alan Schmitt
2024-10-15 13:31 Alan Schmitt
2024-10-08 10:56 Alan Schmitt
2024-10-01 13:37 Alan Schmitt
2024-09-24 13:18 Alan Schmitt
2024-09-17 14:02 Alan Schmitt
2024-09-10 13:55 Alan Schmitt
2024-09-03 8:24 Alan Schmitt
2024-08-27 9:02 Alan Schmitt
2024-08-20 9:29 Alan Schmitt
2024-08-13 13:21 Alan Schmitt
2024-08-06 9:00 Alan Schmitt
2024-07-30 13:26 Alan Schmitt
2024-07-23 13:30 Alan Schmitt
2024-07-16 6:24 Alan Schmitt
2024-07-09 9:19 Alan Schmitt
2024-07-02 7:30 Alan Schmitt
2024-06-25 13:58 Alan Schmitt
2024-06-18 13:05 Alan Schmitt
2024-06-11 15:04 Alan Schmitt
2024-06-04 13:26 Alan Schmitt
2024-05-28 9:07 Alan Schmitt
2024-05-21 13:07 Alan Schmitt
2024-05-14 13:25 Alan Schmitt
2024-05-07 7:30 Alan Schmitt
2024-04-30 7:22 Alan Schmitt
2024-04-23 12:17 Alan Schmitt
2024-04-16 12:00 Alan Schmitt
2024-04-09 9:15 Alan Schmitt
2024-04-02 14:31 Alan Schmitt
2024-03-26 6:32 Alan Schmitt
2024-03-19 15:09 Alan Schmitt
2024-03-12 10:31 Alan Schmitt
2024-03-05 14:50 Alan Schmitt
2024-02-27 13:53 Alan Schmitt
2024-02-20 9:12 Alan Schmitt
2024-02-13 8:42 Alan Schmitt
2024-02-06 15:14 Alan Schmitt
2024-01-30 14:16 Alan Schmitt
2024-01-23 9:45 Alan Schmitt
2024-01-16 10:01 Alan Schmitt
2024-01-09 13:40 Alan Schmitt
2024-01-02 8:59 Alan Schmitt
2023-12-26 10:12 Alan Schmitt
2023-12-19 10:10 Alan Schmitt
2023-12-12 10:20 Alan Schmitt
2023-12-05 10:13 Alan Schmitt
2023-11-28 9:09 Alan Schmitt
2023-11-21 7:47 Alan Schmitt
2023-11-14 13:42 Alan Schmitt
2023-11-07 10:31 Alan Schmitt
2023-10-31 10:43 Alan Schmitt
2023-10-24 9:17 Alan Schmitt
2023-10-17 7:46 Alan Schmitt
2023-10-10 7:48 Alan Schmitt
2023-10-03 13:00 Alan Schmitt
2023-09-19 8:54 Alan Schmitt
2023-09-12 13:21 Alan Schmitt
2023-09-05 9:00 Alan Schmitt
2023-08-29 13:04 Alan Schmitt
2023-08-22 9:20 Alan Schmitt
2023-08-15 16:33 Alan Schmitt
2023-08-08 8:53 Alan Schmitt
2023-08-01 7:13 Alan Schmitt
2023-07-25 8:45 Alan Schmitt
2023-07-11 8:45 Alan Schmitt
2023-07-04 9:18 Alan Schmitt
2023-06-27 8:38 Alan Schmitt
2023-06-20 9:52 Alan Schmitt
2023-06-13 7:09 Alan Schmitt
2023-06-06 14:22 Alan Schmitt
2023-05-30 15:43 Alan Schmitt
2023-05-23 9:41 Alan Schmitt
2023-05-16 13:05 Alan Schmitt
2023-05-09 11:49 Alan Schmitt
2023-05-02 8:01 Alan Schmitt
2023-04-25 9:25 Alan Schmitt
2023-04-18 8:50 Alan Schmitt
2023-04-11 12:41 Alan Schmitt
2023-04-04 8:45 Alan Schmitt
2023-03-28 7:21 Alan Schmitt
2023-03-21 10:07 Alan Schmitt
2023-03-14 9:52 Alan Schmitt
2023-03-07 9:02 Alan Schmitt
2023-02-28 14:38 Alan Schmitt
2023-02-21 10:19 Alan Schmitt
2023-02-14 8:12 Alan Schmitt
2023-02-07 8:16 Alan Schmitt
2023-01-31 6:44 Alan Schmitt
2023-01-24 8:57 Alan Schmitt
2023-01-17 8:37 Alan Schmitt
2022-11-29 14:53 Alan Schmitt
2022-09-27 7:17 Alan Schmitt
2022-09-20 14:01 Alan Schmitt
2022-09-13 8:40 Alan Schmitt
2022-08-23 8:06 Alan Schmitt
2022-08-16 8:51 Alan Schmitt
2022-08-09 8:02 Alan Schmitt
2022-08-02 9:51 Alan Schmitt
2022-07-26 17:54 Alan Schmitt
2022-07-19 8:58 Alan Schmitt
2022-07-12 7:59 Alan Schmitt
2022-07-05 7:42 Alan Schmitt
2022-06-28 7:37 Alan Schmitt
2022-06-21 8:06 Alan Schmitt
2022-06-14 9:29 Alan Schmitt
2022-06-07 10:15 Alan Schmitt
2022-05-31 12:29 Alan Schmitt
2022-05-24 8:04 Alan Schmitt
2022-05-17 7:12 Alan Schmitt
2022-05-10 12:30 Alan Schmitt
2022-05-03 9:11 Alan Schmitt
2022-04-26 6:44 Alan Schmitt
2022-04-19 5:34 Alan Schmitt
2022-04-12 8:10 Alan Schmitt
2022-04-05 11:50 Alan Schmitt
2022-03-29 7:42 Alan Schmitt
2022-03-22 13:01 Alan Schmitt
2022-03-15 9:59 Alan Schmitt
2022-03-01 13:54 Alan Schmitt
2022-02-22 12:43 Alan Schmitt
2022-02-08 13:16 Alan Schmitt
2022-02-01 13:00 Alan Schmitt
2022-01-25 12:44 Alan Schmitt
2022-01-11 8:20 Alan Schmitt
2022-01-04 7:56 Alan Schmitt
2021-12-28 8:59 Alan Schmitt
2021-12-21 9:11 Alan Schmitt
2021-12-14 11:02 Alan Schmitt
2021-11-30 10:51 Alan Schmitt
2021-11-16 8:41 Alan Schmitt
2021-11-09 10:08 Alan Schmitt
2021-11-02 8:50 Alan Schmitt
2021-10-19 8:23 Alan Schmitt
2021-09-28 6:37 Alan Schmitt
2021-09-21 9:09 Alan Schmitt
2021-09-07 13:23 Alan Schmitt
2021-08-24 13:44 Alan Schmitt
2021-08-17 6:24 Alan Schmitt
2021-08-10 16:47 Alan Schmitt
2021-07-27 8:54 Alan Schmitt
2021-07-20 12:58 Alan Schmitt
2021-07-06 12:33 Alan Schmitt
2021-06-29 12:24 Alan Schmitt
2021-06-22 9:04 Alan Schmitt
2021-06-01 9:23 Alan Schmitt
2021-05-25 7:30 Alan Schmitt
2021-05-11 14:47 Alan Schmitt
2021-05-04 8:57 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-04-20 9:07 Alan Schmitt
2021-04-06 9:42 Alan Schmitt
2021-03-30 14:55 Alan Schmitt
2021-03-23 9:05 Alan Schmitt
2021-03-16 10:31 Alan Schmitt
2021-03-09 10:58 Alan Schmitt
2021-02-23 9:51 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-12 9:47 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2020-12-29 9:59 Alan Schmitt
2020-12-22 8:48 Alan Schmitt
2020-12-15 9:51 Alan Schmitt
2020-12-01 8:54 Alan Schmitt
2020-11-03 15:15 Alan Schmitt
2020-10-27 8:43 Alan Schmitt
2020-10-20 8:15 Alan Schmitt
2020-10-06 7:22 Alan Schmitt
2020-09-29 7:02 Alan Schmitt
2020-09-22 7:27 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-01 7:55 Alan Schmitt
2020-08-18 7:25 Alan Schmitt
2020-07-28 16:57 Alan Schmitt
2020-07-21 14:42 Alan Schmitt
2020-07-14 9:54 Alan Schmitt
2020-07-07 10:04 Alan Schmitt
2020-06-30 7:00 Alan Schmitt
2020-06-16 8:36 Alan Schmitt
2020-06-09 8:28 Alan Schmitt
2020-05-19 9:52 Alan Schmitt
2020-05-12 7:45 Alan Schmitt
2020-05-05 7:45 Alan Schmitt
2020-04-28 12:44 Alan Schmitt
2020-04-21 8:58 Alan Schmitt
2020-04-14 7:28 Alan Schmitt
2020-04-07 7:51 Alan Schmitt
2020-03-31 9:54 Alan Schmitt
2020-03-24 9:31 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-10 14:28 Alan Schmitt
2020-03-03 8:00 Alan Schmitt
2020-02-25 8:51 Alan Schmitt
2020-02-18 8:18 Alan Schmitt
2020-02-04 8:47 Alan Schmitt
2020-01-28 10:53 Alan Schmitt
2020-01-21 14:08 Alan Schmitt
2020-01-14 14:16 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2019-12-31 9:18 Alan Schmitt
2019-12-17 8:52 Alan Schmitt
2019-12-10 8:21 Alan Schmitt
2019-12-03 15:42 Alan Schmitt
2019-11-26 8:33 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-05 6:55 Alan Schmitt
2019-10-15 7:28 Alan Schmitt
2019-09-03 7:35 Alan Schmitt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2v7wajt2t.fsf@mac-03220211.irisa.fr \
--to=alan.schmitt@polytechnique.org \
--cc=caml-list@inria.fr \
--cc=lwn@lwn.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox