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: 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] [the series] [*Foundational Design Decisions*] [*Speculative inlining*] R and D Engineer Positions available at OCamlPro, in Paris (France) ═══════════════════════════════════════════════════════════════════ Archive: 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]() *Vous trouverez des fiches de poste détaillées au format PDF ici :* Release of ocaml-eglot 1.2.0 ════════════════════════════ Archive: 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] [OCaml-eglot] [Eglot] [LSP] [`merlin'] [`ocaml-lsp-server'] [Release note] [Github repository] [Package on MELPA] [Features list] [Installation procedure] [Comparison table with Merlin] `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] [#45] [#40] [#42] [#51] [#52] [#53] [#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] [#33] [#37] [#27] [#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: ◊ 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 ═════════════════════════════ Archive: 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: Dune 3.18 ═════════ Archive: 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] 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: 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 '* 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] [#6019] [#6052] [#3782] [ocaml/setup-ocaml#933] [Context diffs] [Unified diffs] [git extended headers] [#5982] [@RyanGibb] [#6248] [#5567] [blog post] [release note] [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: [bug-tracker] ML Family Workshop 2025: Call for Presentations ═══════════════════════════════════════════════ Archive: Sam announced ───────────── We are happy to invite submissions to the 2025 ML Family Workshop! Please help spread the word and consider submitting! 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] 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*: *Workshop Website*: 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: • 2023: • 2022: • 2021: More info: 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] [Outreachy December 2024 Demo] 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] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt]