[Caml-list] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt
2025-04-22T12:08:00Z

[-- Attachment #1: Type: text/plain, Size: 26220 bytes --]

Hello

Here is the latest OCaml Weekly News, for the week of April 15 to 22,
2025.

Table of Contents
─────────────────

Flambda2 Ep. 4: How to write a purely functional compiler, by OCamlPro
R and D Engineer Positions available at OCamlPro, in Paris (France)
Release of ocaml-eglot 1.2.0
Outreachy December 2024 Round
Dune 3.18
opam 2.4.0~alpha1
ML Family Workshop 2025: Call for Presentations
Other OCaml News
Old CWN

Flambda2 Ep. 4: How to write a purely functional compiler, by OCamlPro
══════════════════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/blog-flambda2-ep-4-how-to-write-a-purely-functional-compiler-by-ocamlpro/16512/1>

OCamlPro announced
──────────────────

*Greetings Cameleers!*

We're back with another deep dive into the *Flambda2 Optimizing
Compiler*! Our latest entry in the *Flambda2 Snippets* blog series is
out !

[Flambda2 Ep. 4: How to write a purely functional compiler]

*Beware, this episode is a hefty one ! :muscle: :triumph:*

This time again, we take you on a journey through the heart of
*Flambda2*'s optimization process. Indeed, we take a look at the
high-level considerations of `Simplify', the main optimization
algorithm! This post is the most important one yet. The subject is key
to coming to grasps with the philosophy and design behind our
home-made compiler and we highly recommend that you read it if you're
interested in *functional programming*, *exotic compiler
architectures*, *novel engineering*, and *programming language
representation*!

If you've been following [the series], this article builds on what
we've covered before — especially [*Foundational Design Decisions*]
(episode 1), and [*Speculative inlining*] (episode 3) — so you might
want to check these out first. And as always, this is all leading up
to even more compiler spelunking in future posts! :pick:

Hope you enjoy the read, and let us know what you think!

Until next time, *The OCamlPro Team*

[Flambda2 Ep. 4: How to write a purely functional compiler]
<https://ocamlpro.com/blog/2025_02_19_the_flambda2_snippets_4/>

[the series]
<https://ocamlpro.com/blog/2024_03_18_the_flambda2_snippets_0/#listing>

[*Foundational Design Decisions*]
<https://ocamlpro.com/blog/2024_03_19_the_flambda2_snippets_1/>

[*Speculative inlining*]
<https://ocamlpro.com/blog/2024_08_09_the_flambda2_snippets_3/>

R and D Engineer Positions available at OCamlPro, in Paris (France)
═══════════════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/hiring-r-d-engineer-positions-available-at-ocamlpro-in-paris-france/16513/1>

OCamlPro announced
──────────────────

Greetings Cameleers,

We are thrilled to announce that *OCamlPro is hiring!*

OCamlPro is a R&D lab founded in 2011, with the mission to help
industrial users benefit from experts with a state-of-the-art
knowledge of programming languages theory and practice. We provide
audit, support, custom developer tools and training for both the most
modern languages, such as Rust, Wasm and OCaml, and for legacy
languages. We design, create and implement software with great
added-value for our clients. We have a long history of creating and
maintaining open-source projects, such as the Opam package manager,
the LearnOCaml web platform, Ocp-indent / Ocp-index, Flambda and
Flambda2 optimizing OCaml compilers. We also contributed to the Rust
compiler and standard library, and are now core contributors of the
GnuCOBOL project. We are also experts of Formal Methods, developing
tools such as our SMT Solver Alt-Ergo.

We are currently looking to hire *French speaking* *Senior* and
*non-Senior R&D Engineers* as well as new *Project Managers*. Since
*speaking French is mandatory*, the rest of this article, and the job
offers linked below, will be written in French. :france:

OCamlPro recrute :

• *Un·e Ingénieur·e R&D Senior*

Conception et dev en OCaml (et Rust), encadrement, relation client,
exploration techno, perfs, tests, veille et formations. Poste clé au
cœur d’une équipe experte.

• *Un·e Ingénieur·e R&D*

Développement en OCaml (et Rust), conception logicielle, perfs,
tests, veille techno, montée en compétences et travail en équipe
experte.

• *Un·e Chef·fe de Projet Informatique & R&D*

Pilotage de projets, coordination d’équipes, interface client, suivi
budget/délais, reporting, et veille techno dans un environnement
innovant.

Notre équipe est principalement basée à Paris, mais nous sommes
ouverts au travail à distance, tant que des séjours réguliers à Paris
sont possibles pour renforcer la cohésion de l'équipe.

Veuillez envoyer votre CV ainsi qu'une description de certaines de vos
meilleures réalisations à l'adresse suivante :
[contact@ocamlpro.com](<mailto:contact@ocamlpro.com>)

*Vous trouverez des fiches de poste détaillées au format PDF ici :*
<http://www.ocamlpro.com/jobs>

Release of ocaml-eglot 1.2.0
════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-release-of-ocaml-eglot-1-2-0/16515/1>

Xavier Van de Woestyne announced
────────────────────────────────

We (at [Tarides]) are *particularly pleased* to announce the release
of [OCaml-eglot] `1.2.0', An overlay on [Eglot] (the /built-in/ [LSP]
client for Emacs) for editing OCaml!

`ocaml-eglot' is an *alternative mode* to [`merlin'] which
uses [`ocaml-lsp-server'] (instead of `ocamlmerlin') as
the language server. So yes, if you decide to
use~ocaml-eglot~, `merlin' *is no longer needed*. (Merlin
is still used as a library, in `ocaml-lsp-server').

• [Release note]
• [Github repository]
• [Package on MELPA]
• [Features list]
• [Installation procedure]
• [Comparison table with Merlin]

This version discreetly improves the ergonomics of certain orders,
gives more control over customer-side order support and drastically
improves error handling! Here's the full changelog and, in the
meantime, I'm adding the changelog for version `1.1.0', which hadn't
been announced:

[Tarides] <https://tarides.com/>

[OCaml-eglot] <https://github.com/tarides/ocaml-eglot>

[Eglot] <https://www.gnu.org/software/emacs/manual/html_node/eglot/>

[LSP] <https://microsoft.github.io/language-server-protocol/>

[`merlin'] <https://ocaml.github.io/merlin/>

[`ocaml-lsp-server'] <https://github.com/ocaml/ocaml-lsp>

[Release note]
<https://github.com/tarides/ocaml-eglot/releases/tag/1.2.0>

[Github repository] <https://github.com/tarides/ocaml-eglot>

[Package on MELPA] <https://melpa.org/#/ocaml-eglot>

[Features list]
<https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#features>

[Installation procedure]
<https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#installation>

[Comparison table with Merlin]
<https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#comparison-of-merlin-and-ocaml-eglot-commands>

`1.2.0'
╌╌╌╌╌╌╌

• Fix Type-enclosing's buffer update when using `caml-mode' ([#48])
• Add `ocaml-eglot-search-definition',
`ocaml-eglot-search-declaration' and alternative functions ([#45])
• Fix some warnings on byte-compilation ([#40])
• Fix error on on `ocaml-eglot-construct' ([#42])
• `ocaml-eglot-alternate-file' now visits file in other window when
prefix argument is set ([#51])
• Add error-handling for jsonrpc-request ([#52])
• Maintain more diagnostics for location failure ([#52])
• Fix hole cycle navigation ([#53])
• Relay on custom request (if it is available) for managing holes
([#53])
• Implementation of support for experimental client commands (and
implementation of `ocaml.next-hole' in the presence of the
`ocaml-eglot-destruct' action) ([#54])

[#48] <https://github.com/tarides/ocaml-eglot/pull/48>

[#45] <https://github.com/tarides/ocaml-eglot/pull/45>

[#40] <https://github.com/tarides/ocaml-eglot/pull/40>

[#42] <https://github.com/tarides/ocaml-eglot/pull/40>

[#51] <https://github.com/tarides/ocaml-eglot/pull/51>

[#52] <https://github.com/tarides/ocaml-eglot/pull/52>

[#53] <https://github.com/tarides/ocaml-eglot/pull/53>

[#54] <https://github.com/tarides/ocaml-eglot/pull/54>

`1.1.0'
╌╌╌╌╌╌╌

• A first support for `flycheck' ([#29], [#33] and [#37])
• Use a more efficient way to ensure that a vector is empty ([#27])
• Made the mode-line "lighter" more conventional ([#26])

[#29] <https://github.com/tarides/ocaml-eglot/pull/29>

[#33] <https://github.com/tarides/ocaml-eglot/pull/33>

[#37] <https://github.com/tarides/ocaml-eglot/pull/37>

[#27] <https://github.com/tarides/ocaml-eglot/pull/27>

[#26] <https://github.com/tarides/ocaml-eglot/pull/26>

Spotlight on new features
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

Two easily observable features:

◊ Finding an identifier

• `ocaml-eglot-find-identifier-declaration'
• `ocaml-eglot-find-identifier-definition'

the two commands behave like their analogues
(`ocaml-eglot-find-definition' and `ocaml-eglot-find-declaration') but
allow the user to enter the identifier directly:

<https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/5/5835742f3fadaf6054faf15e02c02c842a757e5a.gif>

◊ Searching for a definition or a declaration

• `ocaml-eglot-search-declaration'
• `ocaml-eglot-search-definition'

Allows you to search by type or polarity to find the definition
(implementation) or declaration (signature) of values!

<https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/f/f48b3cb62a6eb6b81aa141e471e40e6f7641e0ae.gif>

Upgrading
╌╌╌╌╌╌╌╌╌

The release is available on MELPA, so you can update it using the
usual process. As always, your feedback is invaluable!

_Happy hacking_

Outreachy December 2024 Round
═════════════════════════════

Archive:
<https://discuss.ocaml.org/t/outreachy-december-2024-round/15223/6>

Continuing this thread, Patrick Ferris announced
────────────────────────────────────────────────

Thank you everyone who came along to our demo day. I think I speak for
everyone when I say @abdulaziz.alkurd's work is very impressive and we
all can't wait for being able to easily diff OCaml APIs!

The meeting has now been published:
<https://watch.ocaml.org/w/eWRikkpwoox1SboAwrDshD>

Dune 3.18
═════════

Archive: <https://discuss.ocaml.org/t/ann-dune-3-18/16428/2>

Etienne Marais announced
────────────────────────

We are happy to announce the release of Dune `3.18.1' :camel:

This version is a minor release that contains a bug fix to an issue
that was preventing `pkg-config' from finding some libraries in some
contexts.

If you encounter a problem with this release, you can report it on the
[ocaml/dune] repository.

[ocaml/dune] <https://github.com/ocaml/dune/issues>

Changelog
╌╌╌╌╌╌╌╌╌

◊ Fixed

• fix: pass pkg-config (extra) args in all pkgconfig invocations. A
missing `--personality' flag would result in pkgconf not finding
libraries in some contexts. (#11619, @MisterDA)

opam 2.4.0~alpha1
═════════════════

Archive: <https://discuss.ocaml.org/t/ann-opam-2-4-0-alpha1/16520/1>

Kate announced
──────────────

Hi everyone,

We are happy to announce the first alpha release of opam 2.4.0.

This version is an alpha, we invite users to test it to spot
previously unnoticed bugs as we head towards the stable release.

What’s new? Some highlights:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

• :dragon_face: *On `opam init' the compiler* chosen for the default
switch will *no longer be `ocaml-system'* ([#3509]) This was done
because the system compiler (as-is your ocaml installed system wide,
e.g. /usr/bin/ocaml) is known to be under-tested and prone to a
variety of bugs and configuration issues. Removing it from the
default compiler allows new-comers a more smooth experience. *Note:
if you wish to use it anyway, you are always able to do it
explicitly using `opam init --compiler=ocaml-system'*

• :camel: GNU *`patch'* and the *`diff'* command are *no longer
runtime dependencies*. Instead the OCaml `patch' library is used
([#6019], [#6052], [#3782], [ocaml/setup-ocaml#933]) Doing this
we've removed some rarely used features of GNU Patch such as the
support of [Context diffs]. The new implementation only supports
[Unified diffs] including the [git extended headers], however file
permission changes via said extended headers have no effect.

• :snowflake: Add *Nix support* for *external dependencies (depexts)*
by adding support for stateless package managers ([#5982]). *Thanks
to [@RyanGibb] for this contribution*

• :cockroach: *Fix `opam install <local_dir>'* with and without
options like `--deps-only' or `--show-action' having *unexpected
behaviours* ([#6248], [#5567]) such as:
‣ reporting `Nothing to do' despite dependencies or package not
being up-to-date
‣ asking to install the wrong dependencies

• :ocean: Many more UI additions and improvements, bug fixes,
performance improvements, …

:open_book: You can read our [blog post] for more information about
these changes and more, and for even more details you can take a look
at the [release note] or the [changelog].

[#3509] <https://github.com/ocaml/opam/issues/3509>

[#6019] <https://github.com/ocaml/opam/issues/6019>

[#6052] <https://github.com/ocaml/opam/issues/6052>

[#3782] <https://github.com/ocaml/opam/issues/3782>

[ocaml/setup-ocaml#933] <https://github.com/ocaml/setup-ocaml/pull/933>

[Context diffs]
<https://www.gnu.org/software/diffutils/manual/html_node/Example-Context.html>

[Unified diffs]
<https://www.gnu.org/software/diffutils/manual/html_node/Example-Unified.html>

[git extended headers] <https://git-scm.com/docs/diff-format>

[#5982] <https://github.com/ocaml/opam/issues/5982>

[@RyanGibb] <https://github.com/RyanGibb>

[#6248] <https://github.com/ocaml/opam/issues/6248>

[#5567] <https://github.com/ocaml/opam/issues/5567>

[blog post] <https://opam.ocaml.org/blog/opam-2-4-0-alpha1/>

[release note] <https://github.com/ocaml/opam/releases/tag/2.4.0-alpha1>

[changelog] <https://github.com/ocaml/opam/blob/2.4.0-alpha1/CHANGES>

Try it!
╌╌╌╌╌╌╌

The upgrade instructions are unchanged:

For Unix systems
┌────
│ bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.4.0~alpha1"
└────
or from PowerShell for Windows systems
┌────
│ Invoke-Expression "& { $(Invoke-RestMethod https://opam.ocaml.org/install.ps1) } -Version 2.4.0~alpha1"
└────

Please report any issues to the [bug-tracker].

Happy hacking, <> <> The opam team <> <> :camel:

[bug-tracker] <https://github.com/ocaml/opam/issues>

ML Family Workshop 2025: Call for Presentations
═══════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ml-family-workshop-2025-call-for-presentations/16521/1>

Sam announced
─────────────

We are happy to invite submissions to the 2025 ML Family Workshop!
Please help spread the word and consider submitting!
<https://conf.researchr.org/home/icfp-splash-2025/mlsymposium-2025>

Higher-order, Typed, Inferred, Strict: ML Family Workshop 2025
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

Co-located with [ICFP/SPLASH]

*Workshop date*: October 16, 2025, Singapore

*Submission deadline*: June 19, 2025

The ML Family Workshop is an established informal workshop serving to
promote and inform the development of programming languages in the ML
family (such as OCaml, Standard ML, F#, and many others) as well as
related languages (such as Haskell, Scala, Rust, Koka, F*, Eff, ATS,
Nemerle, Links, etc.) We welcome presentations on all aspects of the
design, semantics, theory, application, implementation, and teaching
of languages in the entire extended ML family.

The ML 2025 workshop will continue the informal approach followed
since 2010. Presentations are selected by the program committee from
submitted proposals. There are no published proceedings, so
contributions may be submitted for publication elsewhere. The main
criterion is promoting and informing the development of the entire
extended ML family and delivering a lively workshop atmosphere. We
particularly encourage talks about works in progress, presentations of
negative results (things that were expected to but did not quite work
out) and informed positions.

Each presentation should take 20-25 minutes. The exact time will be
decided based on scheduling constraints.

We plan the workshop to an be in-person event with remote
participation (streamed live). We hope that speakers are able to
present in person. If a speaker is unable to attend, they may instead
present remotely.

The 2025 ML family workshop is co-located with ICFP/SPLASH 2025 and
will take place on *October 16, 2025* in Singapore.

[ICFP/SPLASH] <https://conf.researchr.org/home/icfp-splash-2025>

Scope
╌╌╌╌╌

We seek presentations on topics including (but not limited to):

‣ Language design: abstraction, higher forms of polymorphism,
concurrency and parallelism, distribution and mobility, staging,
extensions for semi-structured data, generic programming, object
systems, etc.

‣ Implementation: compilers, interpreters, type checkers, partial
evaluators, runtime systems, garbage collectors, foreign function
interfaces, etc.

‣ Type systems: inference, effects, modules, contracts, specifications
and assertions, dynamic typing, error reporting, etc.

‣ Applications: case studies, experience reports, pearls, etc.

‣ Environments: libraries, tools, editors, debuggers, cross-language
interoperability, functional data structures, etc.

‣ Semantics of ML-family languages: operational and denotational
semantics, program equivalence, parametricity, mechanization, etc.

We specifically encourage reporting what did not meet expectations or
what, despite all efforts, did not work to satisfaction.

Four kinds of submissions are solicited: Research Presentations,
Experience Reports, Demos, and Informed Positions.

‣ Research Presentations: Research presentations should describe new
ideas, experimental results, or significant advances in ML-related
projects. We especially encourage presentations that describe work
in progress, that outline a future research agenda, or that
encourage lively discussion. These presentations should be
structured in a way which can be, at least in part, of interest to
(advanced) users.

‣ Experience Reports: Users are invited to submit Experience Reports
about their use of ML and related languages. These presentations do
not need to contain original research but they should tell an
interesting story to researchers or other advanced users, such as an
innovative or unexpected use of advanced features or a description
of the challenges they are facing or attempting to solve.

‣ Demos: Live demonstrations or short tutorials should show new
developments, interesting prototypes, or work in progress, in the
form of tools, libraries, or applications built on or related to ML
and related languages. (You will need to provide all the hardware
and software required for your demo; the workshop organizers are
only able to provide a projector.)

‣ Informed Positions: A justified argument for or against a language
feature. The argument must be substantiated, either theoretically
(e.g., by a demonstration of (un)soundness, an inference algorithm,
a complexity analysis), empirically or by substantial experience.
Personal experience is accepted as justification so long as it is
extensive and illustrated with concrete examples.

Submission details
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

Submissions must be in the PDF format and have a short summary
(abstract) at the beginning. Submissions in the categories of
Experience Reports, Demos, or Informed Positions should indicate so in
the title or subtitle. The point of the submission should be clear
from its two first pages (PC members are not obligated to read any
further.)

Submissions must be uploaded to the workshop submission website before
the submission deadline.

Only the short summary/abstract of accepted submissions will be
published on the conference website. After acceptance, authors will
have the opportunity to attach or link to that summary any relevant
material (such as the updated submission, slides, etc.)

*Submission Website*: <https://ml2025.hotcrp.com/>

*Workshop Website*:
<https://conf.researchr.org/home/icfp-splash-2025/mlsymposium-2025>

Dates and Deadlines
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

*Submission Deadline*: Thursday, June 19 AoE

*Initial Author Notification* (most cases): Thursday, July 31

*Final Author Notification* (if needed): Thursday, Aug 7

*Workshop Date*: Thursday, Oct 16

Program Committee
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

‣ Sam Westrick (New York University, USA) (Chair)
‣ Michael D. Adams (National University of Singapore, Singapore)
‣ Jonathan Brachthäuser (University of Tübingen, Germany)
‣ Chris Casinghino (Jane Street, USA)
‣ Arthur Charguéraud (INRIA, France)
‣ Kiran Gopinathan (University of Illinois Urbana-Champaign, USA)
‣ Mirai Ikebuchi (Kyoto University, Japan)
‣ Keigo Imai (DeNA Co., Ltd., Japan)
‣ Anton Lorenzen (University of Edinburgh, UK)
‣ Cyrus Omar (University of Michigan, USA)
‣ Zoe Paraskevopoulou (National Technical University of Athens,
Greece)
‣ Filip Sieczkowski (Heriot-Watt University, UK)
‣ Yong Kiam Tan (A*STAR Institute for Infocomm Research, Singapore)
‣ Yuting Wang (Shanghai Jiao Tong University, China)

Past Iterations
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

• 2024: <https://icfp24.sigplan.org/home/mlworkshop-2024>
• 2023: <https://icfp23.sigplan.org/home/mlworkshop-2023>
• 2022: <https://icfp22.sigplan.org/home/mlfamilyworkshop-2022>
• 2021: <https://icfp21.sigplan.org/home/mlfamilyworkshop-2021>

More info: <https://www.mlworkshop.org/home>

Coordination with the OCaml Users and Developers Workshop
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

The OCaml workshop is seen as more practical and is dedicated in
significant part to OCaml community building and the development of
the OCaml system. In contrast, the ML family workshop is not focused
on any language in particular, is more research-oriented, and deals
with general issues of ML-style programming and type systems. There is
some overlap, which we are keen to explore in various ways. The
authors who feel their submission fits both workshops are encouraged
to mention it at submission time or contact the program chairs.

Other OCaml News
════════════════

>From the ocaml.org blog
───────────────────────

Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].

• [Outreachy December 2024 Demo]

[the ocaml.org blog] <https://ocaml.org/blog/>

[Outreachy December 2024 Demo]
<https://watch.ocaml.org/videos/watch/70ef58ff-ff7c-40d6-ab19-e886e4e98205>

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: 39984 bytes --]