From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=BFed9Met; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by plum.tunbury.org (Postfix) with ESMTP id 50ED940093 for ; Tue, 31 Mar 2026 06:10:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=NYuBa+l50dLYEyYQ3tOXcb/k+iQx22RvY/rm2r4uWH0=; b=BFed9MetuHoSbw+3lHmzr++r5e57NCHAgmHEQCPSWkH6Df6CQ78EVYyW CbmJluuDf1S1HtkdVXTbSEVnO7gEPbdNjwrj2wA76ca1AvBK40BR0nmqA l7t0JJoRriWgOWEc31n+flK3oEzYxsZQi+yf+E478TRnIQvI9HulzIEjj o=; X-CSE-ConnectionGUID: h+HpmW+KSJGpk6rGH7xg8A== X-CSE-MsgGUID: lEAmldXcQZmGQbE6kK4zrw== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.23,151,1770591600"; d="asc'?scan'208,217";a="270249817" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 31 Mar 2026 08:10:42 +0200 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id D548280733; Tue, 31 Mar 2026 08:10:41 +0200 (CEST) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 84BD7800CB for ; Tue, 31 Mar 2026 08:10:27 +0200 (CEST) X-CSE-ConnectionGUID: BkPdnJk6QjWZj4j+BXPraA== X-CSE-MsgGUID: IeS35O8pQOeurjruA2oZNQ== IronPort-SDR: 69cb6551_LVmpn9SvUlH/DyD73LP9EhEqSiExZDK/SOPPMGCFxKRCUgT V0dXbmbx+Lfuoy1q2g9IYaDCPE9RF0hdvYRFKpQ== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0EmBADeY8tpjyIeaIFagluBO4EEGgFsXzMHCEmEWINPj?= =?us-ascii?q?iWRTYp7gWmBLBYhAg4HAQMBCAUuARsEAQIEAQEDAQIBggyCLkaNKAIfBgEEN?= =?us-ascii?q?BMBAgQBAQEBAwIDAQEBAQEBAQEBAQELAQEFAQEBAgEBAgQGAQIQAQEBAQEBO?= =?us-ascii?q?QVJhk8NSQEMAYFuLSRxXgIBBAIBBgYBAQEBAQEBAQEnAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIECAEZFwQOHAE9AgEIC?= =?us-ascii?q?hMBATgYFA8DCQcEAQYDAhEBNQMUARIUBoJoAYIiAk8DBAEMBpocm0R6gTKBA?= =?us-ascii?q?YIMAQEGgQg+AQIDDAMPL9oRgV4JAwYUgSEYgViEGIJKDw0BBSVJagIBAoROh?= =?us-ascii?q?D8nD4FVRIEVgnlvgUKBCBcBAQEBARd/CRwBAQIERxKDHIJpghEVgQ6Bf4U+g?= =?us-ascii?q?V4FHS85hnCBZgNZLAFVExcLBwVegQgDKi8tbjIdgSM+FzRYGwcFgVCIFoFhg?= =?us-ascii?q?RODfj8DC209NxQbiwQQIQ2BJkMZKAGBaA4LMwIFECcWBggCPwgKAgICBRsCL?= =?us-ascii?q?gQEBS0HBwMVAyEGBAEJHQ4QDwkNAisCkkYnFSp3jmWOGJNZgQo0B4QfgV4GD?= =?us-ascii?q?IkIgSaWB4QEjROZVCKYZCKCNocogSYJYIEPH0wWlR4sBAQLhUWBfyOBXDMaM?= =?us-ascii?q?EOCMwEBATEJRhwPWIQfjSqBPoEmgXQ7vUcyQTUCAQEHNAcCBwELBIVOHQEBh?= =?us-ascii?q?GuHT4FLAQE?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 JusPx4BFE5Lk89BM80IXDvUX1S/k4o8Jw== IronPort-HdrOrdr: A9a23:WWI6tqF7479bBpfJpLqE18eALOsnbusQ8zAXPiFKOH5om6mj/a 2TdZsgtCMc5Ax8ZJhCo6HiBEDjexPhHPdOiOF7AV7IZmfbUQWTQ71K3M/L/HnLGiH19OJRvJ 0QFpRWOZnXFlY/qc775WCDYrEdKTS8gcSVuds= X-Talos-CUID: =?us-ascii?q?9a23=3AH0yGH2q4EQsAs6LIMv+cfwPmUeomSnHb7nSOGk2?= =?us-ascii?q?HO2Q1Sv6/eWeK8Yoxxg=3D=3D?= X-Talos-MUID: 9a23:8exNjQpD3LNkNc7pU6gezxBvD5w1xPS2MWcAjI8EodStbytCHQ7I2Q== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.23,151,1770591600"; d="asc'?scan'208,217";a="142779497" X-MGA-submission: =?us-ascii?q?MDGHBRioYaZXwBbw9VAUDUF7Coo19PCEnMwCsI?= =?us-ascii?q?VLb417qjQfns9OEuJEojxC+lWPpYdzCqP5v6Svv9OjwebFKyRGkkDzij?= =?us-ascii?q?HSy1scGnelr0sHgnVK3QYmvSqbw/gaa0btJ5321ooT1uJhdTbwXV33HS?= =?us-ascii?q?AjOA82wMU7omXVQpD0jKEQaQ=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2026 08:10:25 +0200 Received: from TM.local (unknown [212.133.41.95]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 2DF791A4E2; Tue, 31 Mar 2026 08:10:24 +0200 (CEST) From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 31 Mar 2026 08:10:20 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="===-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Mar 31 08:10:24 2026 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.332080, queueID=B00B01A502 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19481 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: Archived-At: --===-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: multipart/alternative; boundary="==-=-=" --==-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Here is the latest OCaml Weekly News, for the week of March 24 to 31, 2026. Table of Contents =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 Improve signature-help feature in Merlin Feedback Wanted: Upcoming OCaml Users Survey 2026 Questions OCaml Users Survey 2023 Results ortac-0.8 specification-driven testing with Domains Third alpha release for OCaml 5.5.0 ocaml-openapi-gen 0.1.0, ocaml-forgejo CS6868 Concurrent Programming =E2=80=93 Course Materials libinput - OCaml bindings for Linux input devices OCaml compiler office hours Old CWN Improve signature-help feature in Merlin =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Charl=C3=A8ne_Gros announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 We, at Tarides, are very happy to announce some improvements made to Merlin=E2=80=99s `signature-help' feature! As a reminder, `signature-help' is a feature in Merlin that displays the function signature and highlights the active parameter. In the editor, this is typically displayed in a tooltip, floating window, or minibuffer. For instance, the following image displays the `signature-help' for the function `exec_prog' in VSCode. The implementation of the signature-help command had a few shortcomings, which have been fixed. These fixes are making the feature way more pleasant to use. Some of these improvements are already part of the last Merlin and ocaml-lsp releases, others will be included in the next release. Results: =E2=80=A2 Merlin only displays `signature-help' information on the functi= on parameters and no longer displays it on the function name. =E2=80=A2 `signature-help' displays the function's information only for t= he active parameters, and no longer loops back to highlight the first parameter after the last one. =E2=80=A2 `signature-help' is now triggered even if used inside a `let ..= in' binding, in which the `in' is not yet written after the function call =E2=80=A2 The optional parameters are now detected and highlighted when t= he active parameter starts writing one. Feedback Wanted: Upcoming OCaml Users Survey 2026 Questions =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90 Archive: Sabine Schmaltz announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Hi everyone, I am preparing the OCaml Users Survey 2026 on behalf of the OCSF and would like your input on the survey questions before we finalize them. You can find the proposed question list here: [Proposed OCaml Users Survey Questions 2026] For reference, there is a [summary of the changes compared to the 2023 survey]. [Proposed OCaml Users Survey Questions 2026] [summary of the changes compared to the 2023 survey] Summary of proposed changes since the 2023 survey =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C New sections: =E2=80=A2 AI/LLM Usage (4 questions) - Do you use AI/LLM tools for OCaml development? Which ones? What for? =E2=80=A2 Debugging & Profiling (3 questions) - What debugging approaches= and tools do you use? What are the biggest challenges? (Motivated by frequent mentions of debugging difficulties in the 2023 free-text responses.) New standalone questions: =E2=80=A2 Community size preference ("I wish the community was=E2=80=A6") =E2=80=A2 Documentation tools used (odoc, ocamldoc, etc.) =E2=80=A2 Dedicated free-text fields for tooling and package repository feedback Removed questions (10 total) - questions that yielded low-actionability data or were redundant, including: largest project size, release schedule satisfaction, source hosting platform, web deployment platforms, "OCaml tooling provides a comfortable workflow for me", "OCaml libraries are stable enough", "software written in OCaml is easy to maintain", and the language feature wishlist (effect handlers have shipped in OCaml 5). Modified questions - new answer options reflecting ecosystem evolution: OxCaml, Zig, Helix, Zed, WebAssembly targets, dune package management, Nix-based builds, Bluesky, and AI/LLM-related options in the "burning desires" section. Old compiler versions (4.02-4.06) collapsed into "=E2=89=A44.07". Benchmarking tools now listed by specific= name rather than category. We'd love your feedback on: =E2=80=A2 Are there questions you think should be added or removed? =E2=80=A2 Are any answer options missing? =E2=80=A2 Are there new topics that are important to the OCaml community = that we should ask about? =E2=80=A2 Is the survey too long, too short, or about right at 58 questio= ns? Thank you for helping us make the survey as useful as possible! :two_hump_camel: :orange_heart: Sabine PS: See also [the results of the OCaml Users Survey 2023]! [the results of the OCaml Users Survey 2023] OCaml Users Survey 2023 Results =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Sabine Schmaltz announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Hi everyone, on behalf of the OCSF, I am happy to announce the (belated) report on the responses to the OCaml Users Survey 2023. We apologize for the delay in evaluating and are committed to run the OCaml Users Survey reliably in a yearly fashion from now on. Without further ceremony, here is the link to the report: We welcome any feedback on the report, discussion around the responses and numbers (please share your interpretations and opinions), or other commentary. Thank you to everyone who participated in the survey to help us better understand the state of OCaml and its ecosystem! :orange_heart: :two_hump_camel: Sabine PS: the 2026 OCaml Users Survey is coming up. We greatly value your input on [the feedback thread about 2026 survey question changes]. [the feedback thread about 2026 survey question changes] ortac-0.8 specification-driven testing with Domains =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90 Archive: Nicolas Osborne announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Hi! We, at Tarides, are very excited to announce the release of ortac-0.8.0 for specification-driven testing! `ortac' is a tool in the [Gospel] ecosystem. The core idea is to translate a subset of the Gospel specification language into OCaml code and use these translations to generate runtime checking. `ortac' has a plugin architecture. You can install it via opam: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 $ opam install ortac-wrapper # install the wrapper plugin fo= r runtime assertion checking, with all the other necessary parts (runtime a= nd cli) =E2=94=82 $ opam install ortac-qcheck-stm # install the qcheck-stm plugin= that generates QCheck-STM tests, with all the other necessary parts (runti= me and cli) =E2=94=82 $ opam install ortac-dune # install the dune plugin to ge= nerate dune boilerplate to use the two previous plugins =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 This release focuses on making Ortac/QCheck-STM take advantage of more features from the QCheck-STM test framework: namely testing in a parallel context and flexibility of the command generation. You can take a look at the [documentation] that explains how it works. Regarding testing in a parallel context, with the introduction of the bug report feature in version 0.2 and the coverage of SUT-returning functions in version 0.4, it was not possible anymore to easily generate QCheck-STM tests in a parallel context (which is quite easy in hand-written QCheck-STM tests). This is now fixed! Information for the bug report are partly collected in the function doing the actual testing (comparing the results from the actual run and the results from the model). This means that implementing the bug report feature for the parallel testing requires to rewrite this function, which is the heart of QCheck-STM+Domains and what we are trusting when running the tests (the Trusted Testing Base if you will). In order to check that we keep the same behaviour, that the generated tests have the same semantic as corresponding hand-written QCheck-STM tests, we minimized the diff of the [commit] introducing the collection of the information so that the preservation of the logic is apparent (at the end of the day, human review is what we trust). Since version 0.4, SUT-returning functions are included in the tests. The newly created SUT is then added to the store of SUTs that are picked as argument for the next calls. The question here is what to do with them in a parallel context: We can't add a SUT created in a parallel branch in a global store, as it is not supposed to be shared between domains. We've chosen a simple design, where we stop storing newly created SUTs once we are in a parallel context. No worries, these SUT-returning functions will still be fully tested in the sequential part of the testing (in sequential mode and/or in the sequential prefix of the parallel mode). One of the power of the QCheck-STM test framework is the flexibility of its command generator. This flexibility comes from the `QCheck.Gen' API itself and from the fact that the QCheck-STM command generator is parameterized over the state of the current model (think generation of a `lookup' command for a key-value store, you want to be able to have a chance to generate a call that lookup a key that is actually associated to a value). An automatically generated command generator ought to be a bit naive. In order to mitigate this naivet=C3=A9, we allow the user to provide: =E2=80=A2 weights to be applied to specific command generation, usefull f= or example to disable the generation of the `push' command on a [work stealing queue] on the domain that is not supposed to own the queue. =E2=80=A2 complete command generator implementation when the user wants to take advantage on the command generator being parameterized over the current state of the model. Happy testing! [Gospel] [documentation] [commit] [work stealing queue] Third alpha release for OCaml 5.5.0 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90 Archive: octachron announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80 With the progress of the ongoing stabilisation effort for OCaml 5.5.0, we are happy to announce a third alpha release for OCaml 5.5.0. The missing second alpha was unreleased due to an unforeseen interaction between the relocatable compiler and bootstrapping. This issue is fixed in this third alpha. Beyond this important change, compared to the first alpha this new alpha release contains =E2=80=A2 two code generation fixes =E2=80=A2 three type system fixes =E2=80=A2 one standard library fix (see the Changelog below for a full list). Overall, it looks like 5.5.0 is stabilizing quite well and alpha versions of most development tools are available. Thus we are planning to switch to a beta release in the beginning of April. More precisely, the ongoing progress on stabilising the ecosystem is tracked on the [5.5.0 readiness meta-issueon opam]. There is also a companion alpha opam repository available for this alpha release =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 $ opam repo add alpha git+https://github.com/kit-ty-kate/opam-a= lpha-repository.git =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 which contains in-progress alpha releases of opam packages that are being updated for OCaml 5.5.0 . The final release is still planned for between May and June. If you find any bugs, please report them on the [issue tracker]. If you are interested by the full list of new features and bug fixes, the updated [changelog for OCaml 5.5.0] is available. Happy hacking, Florian Angeletti for the OCaml team [5.5.0 readiness meta-issueon opam] [issue tracker] [changelog for OCaml 5.5.0] Changes compared to the first alpha =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C =E2=97=8A Compiler artefact fixes =E2=80=A2 More bootstrap-friendly relocatable compiler =E2=80=A2 A bootstrap to fix compiler-libs related issues reported by js_of_ocaml =E2=97=8A Code generation bug fixes =E2=80=A2 [#14583]: fix bug in linear scan spilling heuristic that in cer= tain situations could lead to miscompilations. (Nicol=C3=A1s Ojeda B=C3=A4r, review by Vincent Laviron) =E2=80=A2 [#13693], [#14514]: s390x: fix heap corruption with libasmrun_shared.so caused by PLT lazy binding trampoline saving FPRs into OCaml's fiber stack. Replace PLT calls with GOT-indirect calls in the s390x code emitter. (Zane Hambly, review by David Allsopp and Xavier Leroy) [#14583] [#13693] [#14514] =E2=97=8A Type system bug fixes =E2=80=A2 [#14434], [#14652]: Protect check_counter_example_pat against polymorphic types, restoring type soundness. (Stephen Dolan and Jacques Garrigue, report and review by Alistair O'Brien) =E2=80=A2 [#14603], [#14604]: avoid Ctype.apply failures when mixing polymorphic types and unboxed constructors. (Gabriel Scherer and Stefan Muenzel, report by Brandon Stride, review by Florian Angeletti) =E2=80=A2 [#14626], [#14675]: take in account module-dependent functions = when determining if an optional argument is non-erasable. (Alistair O'Brien and Florian Angeletti, review by Gabriel Scherer) [#14434] [#14652] [#14603] [#14604] [#14626] [#14675] =E2=97=8A Standard library fix =E2=80=A2 [#14635]: Fix a bug in `caml_floatarray_gather' that would caus= e the result of `Float.Array.sub', `Float.Array.append', `Float.Array.concat' (when empty) not to be equal to `[||]'. (Marc Lasson, review by Gabriel Scherer) [#14635] =E2=97=8A Documentation update =E2=80=A2 [#13590]: Document automatic command-line expansion of `*' and = `?' wildcards by the runtime under Windows. (Benjamin Sigonneau, review by Nicol=C3=A1s Ojeda B=C3=A4r) [#13590] ocaml-openapi-gen 0.1.0, ocaml-forgejo =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Zoggy announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Hello, I just made a first release of [ocaml-openapi-gen], a tool generating code from an [openapis] specification. The `openapi_gen' package is available from my [personal opam repository]. This tool is used to generate code for [ocaml-forgejo], a library to interact with Codeberg and other forgejo-based platforms through the [provided REST API]. The generated interfaces way evolve in the future. [ocaml-openapi-gen] [openapis] [personal opam repository] [ocaml-forgejo] [provided REST API] CS6868 Concurrent Programming =E2=80=93 Course Materials =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: KC Sivaramakrishnan announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80 I=E2=80=99m currently teaching a course called =E2=80=9CCS6868: Concurrent Programming=E2=80=9D at IIT Madras. The goal of the course is to teach concurrent and parallel programming using OCaml 5, and then introduce [OxCaml] for safe and fast parallelism. I=E2=80=99ve covered the OCaml 5 parts, and will be starting OxCaml next. I thought it would be good to share the course materials with the community. CS6868 assumes knowledge of OCaml, which I cover in [CS3100: Paradigms of Programming]. This course includes a [YouTube playlist] with all the lectures, notebooks, and assignments. CS6868 builds the foundations of parallelism, reasoning about correctness through linearizability, parallel programming through spin locks, mutexes, condition variables, memory consistency models, and the basics of performance and non-blocking data structures (lock-free linked lists, queues, and stacks). Here, the course closely follows the book [The Art of Multiprocessor Programming]. All the code has been redone in OCaml 5. In addition to the book content, the course also covers the OCaml relaxed memory model. We also cover a fair bit of OCaml-specific tools here, including concurrent property-based testing using [qcheck-lin and qcheck-stm], and [data race detection using TSAN]. Following this, the course covers the basics of effect handlers, following specific parts of [Control structures in programming languages: from goto to algebraic effects]. We then build a full-fledged Go-like, multicore-capable concurrent programming library with lightweight threads, buffered channels, selective communication (in the vein of [Concurrent ML]), nested parallel programming (as in [domainslib]), and basic asynchronous IO (as in [Eio]). There is a growing collection of [course projects], which should be doable if you=E2=80=99ve gone through the course materials. Let me know i= f you have ideas for course projects. The course tries to bring together the content from [many] [tutorials] [we] [have] done in the past. Let me know if you have feedback. I=E2=80= =99m open to accepting PRs fixing small issues, but given that this is an ongoing course, any large PRs will likely not be accepted. I hope you will enjoy working through this as much as I had fun making it. [OxCaml] [CS3100: Paradigms of Programming] [YouTube playlist] [The Art of Multiprocessor Programming] [qcheck-lin and qcheck-stm] [data race detection using TSAN] [Control structures in programming languages: from goto to algebraic effects] [Concurrent ML] [domainslib] [Eio] [course projects] [many] [tutorials] [we] [have] libinput - OCaml bindings for Linux input devices =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Thomas Leonard announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I'm pleased to announce the first release of [libinput-ocaml] (OCaml bindings for the libinput C library). libinput is used by applications such as Wayland compositors to access mice, keyboards, touch pads, etc. [Linux input devices (with libinput-ocaml)] explains how input devices work on Linux, and shows how to use the library to create a little game: [libinput-ocaml] [Linux input devices (with libinput-ocaml)] OCaml compiler office hours =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90 Archive: Continuing this thread, gasche announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I propose to hold OCaml compiler office hours on Friday April 3d, 11:00-12:00 UTC (in local time, [date-range from=3D2026-04-03T11:00:00 to=3D2026-04-03T12:00:00 timezone=3DUTC].) =E2=80=A2 [collaborative pad to prepare questions/topics] [collaborative pad to prepare questions/topics] Old CWN =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 If you happen to miss a CWN, you can [send me a message] and I'll mail it to you, or go take a look at [the archive] or the [RSS feed of the archives]. If you also wish to receive it every week by mail, you may subscribe to the [caml-list]. [Alan Schmitt] [send me a message] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt] --==-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of March 24 to 31, 2026.

Improve signature-help feature in Merlin

Charl=C3=A8ne_Gros announced

We, at Tarides, are very happy to announce some improvements made to Merlin= =E2=80=99s signature-help feature!

As a reminder, signature-help is a feature in Merlin that disp= lays the function signature and highlights the active parameter. In the edi= tor, this is typically displayed in a tooltip, floating window, or minibuff= er. For instance, the following image displays the signature-help for the function exec_prog in VSCode.

3D"46e99c5c69bab991=

The implementation of the signature-help command had a few shortcomings, wh= ich have been fixed. These fixes are making the feature way more pleasant t= o use. Some of these improvements are already part of the last Merlin and o= caml-lsp releases, others will be included in the next release.

Results:

  • Merlin only displays signature-help information on the fun= ction parameters and no longer displays it on the function name.
  • signature-help displays the function's information only fo= r the active parameters, and no longer loops back to highlight the first pa= rameter after the last one.
  • signature-help is now triggered even if used inside a let .. in binding, in which the in is not yet written= after the function call
  • The optional parameters are now detected and highlighted when the activ= e parameter starts writing one.

Feedback Wanted: Upcoming OCaml Users Survey 2026 Questions

Sabine Schmaltz announced

Hi everyone,=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 I am preparing the OCaml Users Survey 2026 on behalf of the OCSF and woul= d like your input on the survey questions before we finalize them.

You can find the proposed question list here: Proposed OCaml Users Survey Questions 2026=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 For reference, there is a summary of the changes compared to the 2023 survey.=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20

Summary of proposed changes since the 2023 survey

New sections:

  • AI/LLM Usage (4 questions) - Do you use AI/LLM tools for OCaml developm= ent? Which ones? What for?
  • Debugging & Profiling (3 questions) - What debugging approaches and= tools do you use? What are the biggest challenges? (Motivated by frequent = mentions of debugging difficulties in the 2023 free-text responses.)

New standalone questions:=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20

  • Community size preference ("I wish the community was…")
  • Documentation tools used (odoc, ocamldoc, etc.)
  • Dedicated free-text fields for tooling and package repository feedback<= /li>

Removed questions (10 total) - questions that yielded low-actionability dat= a or were redundant, including: largest project size, release schedule sati= sfaction, source hosting platform, web deployment platforms, "OCaml tooling= provides a comfortable workflow for me", "OCaml libraries are stable enoug= h", "software written in OCaml is easy to maintain", and the language featu= re wishlist (effect handlers have shipped in OCaml 5).=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20

Modified questions - new answer options reflecting ecosystem evolution: OxC= aml, Zig, Helix, Zed, WebAssembly targets, dune package management, Nix-bas= ed builds, Bluesky, and AI/LLM-related options in the "burning desires" sec= tion. Old compiler versions (4.02-4.06) collapsed into "=E2=89=A44.07". Ben= chmarking tools now listed by specific name rather than category.

We'd love your feedback on:=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20

  • Are there questions you think should be added or removed?
  • Are any answer options missing?
  • Are there new topics that are important to the OCaml community that we = should ask about?
  • Is the survey too long, too short, or about right at 58 questions?

Thank you for helping us make the survey as useful as possible! :two_hump_c= amel: :orange_heart:=20

Sabine

PS: See also the results of the OCaml Users Survey 2023!

OCaml Users Survey 2023 Results

Sabine Schmaltz announced

Hi everyone,

on behalf of the OCSF, I am happy to announce the (belated) report on the r= esponses to the OCaml Users Survey 2023. We apologize for the delay in eval= uating and are committed to run the OCaml Users Survey reliably in a yearly= fashion from now on.

Without further ceremony, here is the link to the report:

https://ocam= l-sf.org/docs/2023/survey-results.html

We welcome any feedback on the report, discussion around the responses and = numbers (please share your interpretations and opinions), or other commenta= ry.

Thank you to everyone who participated in the survey to help us better unde= rstand the state of OCaml and its ecosystem! :orange_heart: :two_hump_camel= :=20

Sabine

PS: the 2026 OCaml Users Survey is coming up. We greatly value your input o= n the feedback thread about 2026 survey que= stion changes.

ortac-0.8 specification-driven testing with Domains

Nicolas Osborne announced

Hi! We, at Tarides, are very excited to announce the release of ortac-0.8.0= for specification-driven testing!

ortac is a tool in the Gospel ecosystem. The core idea is to translate a subset of the Go= spel specification language into OCaml code and use these translations to g= enerate runtime checking.

ortac has a plugin architecture. You can install it via opam:

$ opam install ortac-wrapper    # install the wrapper plugin for runtime as=
sertion checking, with all the other necessary parts (runtime and cli)
$ opam install ortac-qcheck-stm # install the qcheck-stm plugin that genera=
tes QCheck-STM tests, with all the other necessary parts (runtime and cli)
$ opam install ortac-dune       # install the dune plugin to generate dune =
boilerplate to use the two previous plugins

This release focuses on making Ortac/QCheck-STM take advantage of more feat= ures from the QCheck-STM test framework: namely testing in a parallel conte= xt and flexibility of the command generation.

You can take a look at the documentation that explains how it works.

Regarding testing in a parallel context, with the introduction of the bug r= eport feature in version 0.2 and the coverage of SUT-returning functions in= version 0.4, it was not possible anymore to easily generate QCheck-STM tes= ts in a parallel context (which is quite easy in hand-written QCheck-STM te= sts). This is now fixed!

Information for the bug report are partly collected in the function doing t= he actual testing (comparing the results from the actual run and the result= s from the model). This means that implementing the bug report feature for = the parallel testing requires to rewrite this function, which is the heart = of QCheck-STM+Domains and what we are trusting when running the tests (the = Trusted Testing Base if you will). In order to check that we keep the same = behaviour, that the generated tests have the same semantic as corresponding= hand-written QCheck-STM tests, we minimized the diff of the commit introducing the collection of the information so that t= he preservation of the logic is apparent (at the end of the day, human revi= ew is what we trust).

Since version 0.4, SUT-returning functions are included in the tests. The n= ewly created SUT is then added to the store of SUTs that are picked as argu= ment for the next calls. The question here is what to do with them in a par= allel context: We can't add a SUT created in a parallel branch in a global = store, as it is not supposed to be shared between domains. We've chosen a s= imple design, where we stop storing newly created SUTs once we are in a par= allel context. No worries, these SUT-returning functions will still be full= y tested in the sequential part of the testing (in sequential mode and/or i= n the sequential prefix of the parallel mode).

One of the power of the QCheck-STM test framework is the flexibility of its= command generator. This flexibility comes from the QCheck.Gen= API itself and from the fact that the QCheck-STM command generator is para= meterized over the state of the current model (think generation of a = lookup command for a key-value store, you want to be able to have a = chance to generate a call that lookup a key that is actually associated to = a value). An automatically generated command generator ought to be a bit na= ive. In order to mitigate this naivet=C3=A9, we allow the user to provide:

  • weights to be applied to specific command generation, usefull for examp= le to disable the generation of the push command on a work stealing queue on the domain that is not = supposed to own the queue.
  • complete command generator implementation when the user wants to take a= dvantage on the command generator being parameterized over the current stat= e of the model.

Happy testing!

Third alpha release for OCaml 5.5.0

octachron announced

With the progress of the ongoing stabilisation effort for OCaml 5.5.0, we a= re happy to announce a third alpha release for OCaml 5.5.0.

The missing second alpha was unreleased due to an unforeseen interaction be= tween the relocatable compiler and bootstrapping. This issue is fixed in th= is third alpha.

Beyond this important change, compared to the first alpha this new alpha re= lease contains=20

  • two code generation fixes
  • three type system fixes
  • one standard library fix

(see the Changelog below for a full list).

Overall, it looks like 5.5.0 is stabilizing quite well and alpha versions o= f most development tools are available. Thus we are planning to switch to a= beta release in the beginning of April.

More precisely, the ongoing progress on stabilising the ecosystem is tracke= d on the = 5.5.0 readiness meta-issueon opam.

There is also a companion alpha opam repository available for this alpha re= lease

$ opam repo add alpha git+https://github.com/kit-ty-kate/opam-alpha-reposit=
ory.git

which contains in-progress alpha releases of opam packages that are being u= pdated for OCaml 5.5.0 .

The final release is still planned for between May and June.

If you find any bugs, please report them on the issue tracker.

If you are interested by the full list of new features and bug fixes, the updated changel= og for OCaml 5.5.0 is available.

Happy hacking, Florian Angeletti for the OCaml team

Changes compared to the first alpha

  • Compiler artefact fixes
    • More bootstrap-friendly relocatable compiler
    • A bootstrap to fix compiler-libs related issues reported by js_of_ocaml=
  • Code generation bug fixes
    • #14583: fix= bug in linear scan spilling heuristic that in certain situations could lead to miscompilations. (Nicol=C3=A1s Ojeda B=C3=A4r, review by Vincent Laviron)
    • #13693, #14514: s390x: fix= heap corruption with libasmrun_shared.so caused by PLT lazy binding trampoline saving FPRs into OCaml's fiber stack. Replace PLT calls with GOT-indirect calls in the s390x code emitter. (Zane Hambly, review by David Allsopp and Xavier Leroy)
  • Type system bug fixes
    • #14434, #14652: Protect ch= eck_counter_example_pat against polymorphic types, restoring type soundness. (Stephen Dolan and Jacques Garrigue, report and review by Alistair O'Brien)=
    • #14603, #14604: avoid Ctyp= e.apply failures when mixing polymorphic types and unboxed constructors. (Gabriel Scherer and Stefan Muenzel, report by Brandon Stride, review by Florian Angeletti)
    • #14626, #14675: take in ac= count module-dependent functions when determining if an optional argument is non-erasable. (Alistair O'Brien and Florian Angeletti, review by Gabriel Scherer)
  • Standard library fix
    • #14635: Fix= a bug in caml_floatarray_gather that would cause the result of Float.Array.sub, Float.Array.append= , Float.Array.concat (when empty) not to be equal to [||]. (Marc Lasson, review by Gabriel Scherer)
  • Documentation update
    • #13590: Doc= ument automatic command-line expansion of * and ?= wildcards by the runtime under Windows. (Benjamin Sigonneau, review by Nicol=C3=A1s Ojeda B=C3=A4r)

ocaml-openapi-gen 0.1.0, ocaml-forgejo

Zoggy announced

Hello,

I just made a first release of = ocaml-openapi-gen, a tool generating code from an openapis specification.

The openapi_gen package is available from my personal opam repository.

This tool is used to generate code for ocaml-forgejo, a library to interact with Codeberg and ot= her forgejo-based platforms through the provided REST API.

The generated interfaces way evolve in the future.

CS6868 Concurrent Programming – Course Materials

KC Sivaramakrishnan announced

I=E2=80=99m currently teaching a course called =E2=80=9CCS6868: Concurrent = Programming=E2=80=9D at IIT Madras. The goal of the course is to teach conc= urrent and parallel programming using OCaml 5, and then introduce OxCaml for safe and fast parallelism. I=E2=80= =99ve covered the OCaml 5 parts, and will be starting OxCaml next. I though= t it would be good to share the course materials with the community.

https://github.com/kayc= eesrk/cs6868_s26

CS6868 assumes knowledge of OCaml, which I cover in CS3100: Paradigms of Programming. This cou= rse includes a YouTube playlist with all t= he lectures, notebooks, and assignments.

CS6868 builds the foundations of parallelism, reasoning about correctness t= hrough linearizability, parallel programming through spin locks, mutexes, c= ondition variables, memory consistency models, and the basics of performanc= e and non-blocking data structures (lock-free linked lists, queues, and sta= cks). Here, the course closely follows the book The Art of Multiprocessor Programming. All the code has been redo= ne in OCaml 5. In addition to the book content, the course also covers the = OCaml relaxed memory model. We also cover a fair bit of OCaml-specific tool= s here, including concurrent property-based testing using qcheck-lin and qcheck-stm= , and data race detectio= n using TSAN.=20

Following this, the course covers the basics of effect handlers, following = specific parts of C= ontrol structures in programming languages: from goto to algebraic effects<= /a>. We then build a full-fledged Go-like, multicore-capable concurrent pro= gramming library with lightweight threads, buffered channels, selective com= munication (in the vein of Concurrent ML), nested parallel programming (as in domainslib), and basic as= ynchronous IO (as in Eio= ).=20

There is a growing collection of course projects, which should be d= oable if you=E2=80=99ve gone through the course materials. Let me know if y= ou have ideas for course projects.=20

The course tries to bring together the content from many tutorials we have done in the past. Let me know if you have feedback. I=E2=80=99m= open to accepting PRs fixing small issues, but given that this is an ongoi= ng course, any large PRs will likely not be accepted. I hope you will enjoy= working through this as much as I had fun making it.

libinput - OCaml bindings for Linux input devices

Thomas Leonard announced

I'm pleased to announce the first release of libinput-ocaml (OCaml bindings for the libinput = C library).

libinput is used by applications such as Wayland compositors to access mice= , keyboards, touch pads, etc.

Linux = input devices (with libinput-ocaml) explains how input devices work on = Linux, and shows how to use the library to create a little game:

3D"87988f00d0f601de=

OCaml compiler office hours

Continuing this thread, gasche announced

I propose to hold OCaml compiler office hours on Friday April 3d, 11:00-12:= 00 UTC (in local time, [date-range from=3D2026-04-03T11:00:00 to=3D2026-04-= 03T12:00:00 timezone=3DUTC].)

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 loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--==-=-=-- --=-=-=-- --===-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmnLZU0bFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v cmcACgkQBA0KO07S5cehRwf/djc1IDgpVJT92d4TQ2PPeEPCEiO7JdSg4b/wXtZr +GYqPZZM0g34ASc5EIAlFyg/V+fHmPoYItszUEpOrrUgihdWVgmljXjg5L98YJL6 Cf411NcgXElJ7m/Yw4vpjnthu6mpxO6HD0s4PG22uAsm4RX6m47i4peS8DeGXrzK sFS0mRxHWb7bBwOaPJ8RqoGnkTpBRy8mLhg091l0AiCwUuEg8/eJmhXCMEd/5/3w cDnfZD9Z1ko0Ub6GW9VLPLeG1EfbXQprUTg3TROBFUU7VuoV2qvTiVSiagXGU6Jk RvmbTRxfllhyKGYsZmGwxxKKbn202nVYIn1cPYVOZt+77g== =5mhi -----END PGP SIGNATURE----- --===-=-=--