OCaml Weekly News
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
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
R and D Engineer Positions available at OCamlPro, in Paris (France)
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
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 tomerlin
which usesocaml-lsp-server
(instead ofocamlmerlin
) 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, inocaml-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:
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 theocaml-eglot-destruct
action) (#54)
1.1.0
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
andocaml-eglot-find-declaration
) but allow the user to enter the identifier directly: - 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!
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
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
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.
opam 2.4.0~alpha1
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 beocaml-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 usingopam init --compiler=ocaml-system
- :camel: GNU
patch
and thediff
command are no longer runtime dependencies. Instead the OCamlpatch
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
- reporting
- :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.
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:
ML Family Workshop 2025: Call for Presentations
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.
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
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.
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.