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=YZgGtgib; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=5yTXJk5E; 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]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 315D4417D0 for ; Tue, 7 Jan 2025 17:26:55 +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=21Uo3sTZ0kTyLppe4ZASECQsDHlmqYKkNBPWmNr1dIg=; b=YZgGtgibYnw452fcSVs9LikxaKTu5bCNaoqrDUL073W2B+15KHgjNJAa g9pf6zwM/4deq/Ek90ABhi75AYWrQ9y4yx04jP1jvVPteFRchbo5peZqF 6BRXmhckxuDvYug9nP9vjgJhmUdMR91UwPxA8XVIZq3oI8kL/lKTG+hrG 4=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; 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 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com 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@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (body hash did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.12,296,1728943200"; d="scan'208,217";a="201908207" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 07 Jan 2025 18:26:54 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id DE4BAE0D20; Tue, 7 Jan 2025 18:26:53 +0100 (CET) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 79277E0077 for ; Tue, 7 Jan 2025 18:26:52 +0100 (CET) IronPort-SDR: 677d63db_1RwWbYph5YlwVKneMbOf+mDZ/q2NUG7R4/M4YxeBytOU+5i MNwBat7Xo2ucS9l/2HZ0M3YQIjFSvWOb7tpV+cw== X-IPAS-Result: =?us-ascii?q?A0HQEABKY31ngSIeaIFaFoJGAoE/WygZAV0GWjMHCEgDh?= =?us-ascii?q?FODT44fnEWCewMuIxEDAQMBDS4BBQ0BAgQBAQMBAgGEOkYCinUCHwYBBDMGD?= =?us-ascii?q?gECBAEBAQEDAgMBAQEBAQEQAQEFAQEBAgEBAgQGAQIQAQE9BUmFew1JAQEEC?= =?us-ascii?q?wEEAYFlGThBMHQBAQEBAQEBAQEnAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQIMATMrQAkKEwEBOBgjAxAEAQYDAhEBNQMBE?= =?us-ascii?q?wESFAaCD1mCH0UDBAEMBpVHmngFTnqBMoEBggwBAQaBCD4CAQsCBQEOCSbaB?= =?us-ascii?q?oEaSglBgQcBhWqCSRoBKkhqhEqEPCcPgVVEgRWCeW+CPwsXAgEBGEJiAQFNC?= =?us-ascii?q?YMlgmmCN4FIg26BbIRohWQ7HS+BVVmOCoFHIgMmMywBVRMXCwcFYYESAy02M?= =?us-ascii?q?YFRezmCDWlLNwINAjWCHiRYgiuDH4E9hEeEWIVogheCGYJWHUADC209NxQbm?= =?us-ascii?q?ycBCTQ2ATyCcwkmDjgIPDcVBhMICgQCIDAIDjUyDQUFBBsCLQgDOpJAHQkWL?= =?us-ascii?q?JMZij6UXTQHhB6BXQYMiQWBJJV7hASBV4svhwCSSSKYWiKJW4ElCWCBeZVTO?= =?us-ascii?q?WKEO4F9JDyBDQwHMxowQ4JnCQo8HA+OLAEWg1UDQX2DGzuCba0PQjUCAQEEN?= =?us-ascii?q?AIHAQoBAQMJhUUdAQGDBIIXg32BEIFDCAEB?= IronPort-PHdr: A9a23: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 pYXiBrT3rCmO5kYVjL8SCU1Rg== IronPort-Data: A9a23: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 wQ= IronPort-HdrOrdr: A9a23:ihqcLKtFaukVdofoHFbcsvmW7skDS9V00zEX/kB9WHVpm62j5q OTdZEgvyMc5wx+ZJhNo7290cq7IU80l6QV3WB5B97LNzUO01HGEGgN1+ff6gylMxK73O9Q36 VtfsFFeb/NJGk/q931pC2xE9NI+qjizElEv5a680tQ X-Talos-CUID: =?us-ascii?q?9a23=3AFqufB2nalSbolMLVWUWGtLheOdPXOSWGwXj5fU3?= =?us-ascii?q?7M3xKEuTMSXaq9P1gjdU7zg=3D=3D?= X-Talos-MUID: =?us-ascii?q?9a23=3ATom7lAwL6XNktNhiHK8dcODo7LSaqKmfURk3rMk?= =?us-ascii?q?mgvnaFAV7MhqFlQmKRIByfw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.12,296,1728943200"; d="scan'208,217";a="201908185" X-MGA-submission: =?us-ascii?q?MDFOzda/2/yJZtv9GBsNT0rEHty8sRYwg3DSKN?= =?us-ascii?q?Y1YGL2+awXNSQH7QQ6LMuHbLmu1mJSeCkLuzgrQakaFN62jPlABqz5Yc?= =?us-ascii?q?ZIHsfTaVYHnx3mJvVd3CQppnDVHDxJf+IMf4ggAfr9iiL5aJcPVy6xkd?= =?us-ascii?q?FYs4mf45gMOgaRosQ5x1x+jA=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jan 2025 18:26:51 +0100 Received: from TM.local (unknown [82.66.240.41]) (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 78B81564AAE; Tue, 7 Jan 2025 18:26:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1736270810; bh=jtBq4n2lCOzXZ5u/8J392t6w3r9BggsJY5UMCM3o+9M=; h=From:To:Subject:Date:Message-ID; b=5yTXJk5EI5SSlbEB1vI816dlXSXuw1v4j10VWFdQ8mh4VzCmSTEwTcy4O726p81b8 QnBvmoItjhyBUztlRT9KPIFKECYwUPoYYAnnOLUeS/u7HOmt+06Yr5zkCcDjZi9kc1 dZgCfKdp1tQQVsLhWgI5JRxrsr53Sw/uUHCwOvW0= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 07 Jan 2025 18:26:50 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jan 7 18:26:50 2025 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.449040, queueID=C1E45564AB0 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: 19247 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: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Here is the latest OCaml Weekly News, for the week of December 31, 2024 to January 07, 2025. 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 Playing with Windows on ARM64 Opam repository archival, Phase 1: unavailable packages CCL: Categorical Configuration Language Dune dev meeting "Cram tests: a hidden gem of dune" and "Snapshot tests for your own ppx" Other OCaml News Old CWN Playing with Windows on ARM64 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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: David Allsopp 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 Following on from the teaser in , if you're lucky enough to have an ARM64 Windows machine, it's just about possible to get a few opam packages installed and working it! You'll need Visual Studio 2022 (Community) with the following packages: =E2=80=A2 `MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)' =E2=80=A2 `MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest)' =E2=80=A2 `C++/CLI support for v143 build tools (Latest)' =E2=80=A2 `C++ Clang Compiler for Windows (18.1.8)' _That's not a typo_: you need Clang _and_ *both* the x64/x86 and ARM64 MSVC packages Install Git for Windows as normal (`winget install Git.Git', etc.) and [Cygwin] (adding the `make' and `patch' packages - no compilers or libraries needed, it's just to get the shell). Clone [my opam fork] and check out branch [windows-on-arm64]. From a Cygwin bash terminal, `cd' to that clone and run `make cold'. After a little while, that should leave an ARM64 `opam.exe' in the current directory which should be copied to a location which you then add to `PATH'. From Cmd/PowerShell, you can now run: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 PS > opam init --bare =E2=94=82 PS > opam switch create --empty windows-on-arm64 =E2=94=82 PS > opam pin add --yes ocaml-variants git+https://github.com/d= ra27/ocaml.git#windows-on-arm64 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Dune needs a trivial pin (which I think may be more to do with a recent Windows SDK issue, than arm64-specific): =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 PS > opam pin add dune git+https://github.com/dra27/dune.git#wi= ndows-on-arm64 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Unfortunately, it's not quite enough to get opam's dependencies installing through opam (`dose3' failed for me, which is odd because it works with `make cold' and `topkg' was freezing, although that's less surprising). But it's kinda cool how much is working straightaway, and it certainly looks like we'll have native Windows ARM64 support at some point in the future, therefore! Aside from the usual "packages which don't work properly" issue, there're two glaring problems: 1. It should be possible to install the x86 / x64 compilers, but at present this doesn't work because the opam compiler packages need further tweaking[^1] 2. Only Clang-pretending-to-be-`cl' is supported at the moment - I can't see any reason that Clang-pretending-to-be-`gcc' shouldn't be doable, but as we don't presently support that for x64 either (and it necessarily needs MSYS2, rather than Cygwin), I haven't disappeared down that rabbit hole yet[^2] :warning: I have no timeline for upstreaming any of this, but it's all publicly pushed and welcome to anyone to extend to a mergeable state! [^1]: I'll likely get to that at some point soon, as that unblocks general use of OCaml on Windows ARM64 machines, even if not _native_ ARM64 use. However, it exceeds "fun messing around over Christmas and New Year"! [^2]: See 1=E2=80=A6 [Cygwin] [my opam fork] [windows-on-arm64] Opam repository archival, Phase 1: unavailable packages =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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, Hannes Mehnert 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=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 It's done. It's done. It's done. Happy new year! We just merged the removal of the above mentioned uninstallable packages from opam-repository. In case you want to get these old opam files, please use: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 opam repository add opam-archive https://github.com/ocaml/opam-= repository-archive.git =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Each of the opam files now include the two additional fields: (a) a x-reason-for-archival and (b) an x-opam-repository-commit-hash-at-time-of-archiving (as described in = ). We also pushed the tag '2025-01-before-archiving-phase1' to the main opam-repository. Statistics of opam files and unique packages =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=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94= =81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81 date (January 1st) opam files unique packages=20 =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=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 phase1 28863 4805=20 2025 33033 4973=20 2024 29942 4572=20 2023 25983 4126=20 2022 21418 3647=20 2021 16632 3156=20 2020 12998 2554=20 2019 10236 2192=20 2018 8110 1878=20 2017 5966 1458=20 2016 4308 1086=20 2015 3081 823=20 2014 1856 593=20 2013 485 486=20 =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94= =81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81 This shows that the amount of opam files are now back to mid-2023, while in the unique packages we're in mid-2024. Next steps =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 Next steps and call to action: =E2=80=A2 by January 15th we'll have a list of packages that require OCam= l < 4.08 (plus those packages that were marked unavailable between December 15th and January 15th) =E2=80=A2 please mark your packages with [`x-maintenance-intent'] or `fla= gs: deprecated' On February 15th we will propose a list of packages that are deprecated or do not fall into the `x-maintenance-intent' - but only if there's no reverse dependency that requires them: if the package "cohttp" is marked with `x-maintenance-intent: "(latest)"', and some other package "bar" requires a specific cohttp version ('depends: "cohttp" {=3D "1.2.3"}'), the "cohttp.1.2.3" will be kept (to avoid making "bar" uninstallable). We plan to have tooling ready that allows to spot which packages would be beneficial to have a `x-maintenance-intent' or `flags: deprecated' (i.e. which ones would allow to archive more packages). What is the difference between `flags: deprecated' and `x-maintenance-intent'? Please use `flags: deprecated' if either specific versions or an entire package should be archived. Please use `x-maintenance-intent' for packages that are actively developed. If you have any further questions, please don't hesitate to ask. [`x-maintenance-intent'] CCL: Categorical Configuration Language =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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: Dmitrii Kovanikov 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 Hi everyone :wave: For the last month, I've been working on a hobby project, shaping years of my ideas into the implementation of minimalistic config language *ccl: Categorical Configuration Language*. You can read the motivation and a tutorial in my latest article: =E2=80=A2 [chshersh.com: The Most Elegant Configuration Language] I implemented CCL in OCaml using `angstrom'. The source code is here: =E2=80=A2 [chshersh.com: The Most Elegant Configuration Language] Dune dev meeting =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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: Etienne Marais 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 Hi :wave: We will hold our first Dune dev meeting of 2025 (Happy New Year :partying_face:) on *Wednesday, January, 8th at 9:00* CET. As usual, the session will be one hour long. Whether you are a maintainer, a regular contributor, a new joiner or just curious, you are welcome to join: these discussions are opened! The goal of these meetings is to provide a place to discuss the ongoing work together and synchronize between the Dune developers ! :camel: :calendar: Agenda =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 The agenda is available on the[ meeting dedicated page]. Feel free to ask if you want to add more items in it. [ meeting dedicated page] :computer: Links =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=80=A2 Meeting link:[ zoom] =E2=80=A2 Calendar event:[ google calendar] =E2=80=A2 Wiki with information and previous notes:[ GitHub Wiki] [ zoom] [ google calendar] [ GitHub Wiki] "Cram tests: a hidden gem of dune" and "Snapshot tests for your own ppx" =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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: David Sancho 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 Hi, I wrote 2 blog posts about cram tests and It's a good idea to share them together. Cram tests: a hidden gem of dune =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 I'm a strong advocate of unit tests, I can confidently say that it has saved me from introducing regressions countless times. Today I want to share one of the hidden gems of OCaml and their testing story with dune, cram tests. Snapshot tests for your own ppx =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 When building preprocessor extensions (ppx) in OCaml, testing is crucial. You want to ensure your ppx works correctly and continues to work as you make changes. After experimenting with different approaches, I've found that cram tests fit well for the task. Let me know what you think, and if there's a need for more :smiley: Other OCaml News =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 >>From the ocaml.org blog =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 Here are links from many OCaml blogs aggregated at [the ocaml.org blog]. =E2=80=A2 [What Happened in 2024?] =E2=80=A2 [Build A CLI in OCaml with the Cmdliner Library] [the ocaml.org blog] [What Happened in 2024?] [Build A CLI in OCaml with the Cmdliner Library] 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 Content-Disposition: inline OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of December 31, 2024 to January 07, 2025.

Playing with Windows on ARM64

David Allsopp announced

Following on from the teaser in https://discuss.ocaml.org/t/arm-windows-installation-as-of-today/15697/4, if you're lucky enough to have an ARM64 Windows machine, it's just about possible to get a few opam packages installed and working it!

You'll need Visual Studio 2022 (Community) with the following packages:

  • MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)
  • MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest)
  • C++/CLI support for v143 build tools (Latest)
  • C++ Clang Compiler for Windows (18.1.8)

That's not a typo: you need Clang and both the x64/x86 and ARM64 MSVC packages

Install Git for Windows as normal (winget install Git.Git, etc.) and Cygwin (adding the make and patch packages - no compilers or libraries needed, it's just to get the shell).

Clone my opam fork and check out branch windows-on-arm64. From a Cygwin bash terminal, cd to that clone and run make cold. After a little while, that should leave an ARM64 opam.exe in the current directory which should be copied to a location which you then add to PATH.

>>From Cmd/PowerShell, you can now run:

PS > opam init --bare
PS > opam switch create --empty windows-on-arm64
PS > opam pin add --yes ocaml-variants git+https://github.com/dra27/ocaml.git#windows-on-arm64

Dune needs a trivial pin (which I think may be more to do with a recent Windows SDK issue, than arm64-specific):

PS > opam pin add dune git+https://github.com/dra27/dune.git#windows-on-arm64

Unfortunately, it's not quite enough to get opam's dependencies installing through opam (dose3 failed for me, which is odd because it works with make cold and topkg was freezing, although that's less surprising). But it's kinda cool how much is working straightaway, and it certainly looks like we'll have native Windows ARM64 support at some point in the future, therefore!

Aside from the usual "packages which don't work properly" issue, there're two glaring problems:

  1. It should be possible to install the x86 / x64 compilers, but at present this doesn't work because the opam compiler packages need further tweaking[^1]
  2. Only Clang-pretending-to-be-cl is supported at the moment - I can't see any reason that Clang-pretending-to-be-gcc shouldn't be doable, but as we don't presently support that for x64 either (and it necessarily needs MSYS2, rather than Cygwin), I haven't disappeared down that rabbit hole yet[^2]

:warning: I have no timeline for upstreaming any of this, but it's all publicly pushed and welcome to anyone to extend to a mergeable state!

[^1]: I'll likely get to that at some point soon, as that unblocks general use of OCaml on Windows ARM64 machines, even if not native ARM64 use. However, it exceeds "fun messing around over Christmas and New Year"!

[^2]: See 1…

Opam repository archival, Phase 1: unavailable packages

Continuing this thread, Hannes Mehnert announced

It's done. It's done. It's done.

Happy new year!

We just merged the removal of the above mentioned uninstallable packages from opam-repository. In case you want to get these old opam files, please use:

opam repository add opam-archive https://github.com/ocaml/opam-repository-archive.git

Each of the opam files now include the two additional fields: (a) a x-reason-for-archival and (b) an x-opam-repository-commit-hash-at-time-of-archiving (as described in https://github.com/ocaml/opam-repository/blob/master/governance/policies/archiving.md#specification-of-the-x--fields-used-in-the-archiving-process).

We also pushed the tag '2025-01-before-archiving-phase1' to the main opam-repository.

Statistics of opam files and unique packages

date (January 1st) opam files unique packages
phase1 28863 4805
2025 33033 4973
2024 29942 4572
2023 25983 4126
2022 21418 3647
2021 16632 3156
2020 12998 2554
2019 10236 2192
2018 8110 1878
2017 5966 1458
2016 4308 1086
2015 3081 823
2014 1856 593
2013 485 486

This shows that the amount of opam files are now back to mid-2023, while in the unique packages we're in mid-2024.

Next steps

Next steps and call to action:

  • by January 15th we'll have a list of packages that require OCaml < 4.08 (plus those packages that were marked unavailable between December 15th and January 15th)
  • please mark your packages with x-maintenance-intent or flags: deprecated

On February 15th we will propose a list of packages that are deprecated or do not fall into the x-maintenance-intent - but only if there's no reverse dependency that requires them: if the package "cohttp" is marked with x-maintenance-intent: "(latest)", and some other package "bar" requires a specific cohttp version ('depends: "cohttp" {= "1.2.3"}'), the "cohttp.1.2.3" will be kept (to avoid making "bar" uninstallable).

We plan to have tooling ready that allows to spot which packages would be beneficial to have a x-maintenance-intent or flags: deprecated (i.e. which ones would allow to archive more packages).

What is the difference between flags: deprecated and x-maintenance-intent? Please use flags: deprecated if either specific versions or an entire package should be archived. Please use x-maintenance-intent for packages that are actively developed.

If you have any further questions, please don't hesitate to ask.

CCL: Categorical Configuration Language

Dmitrii Kovanikov announced

Hi everyone :wave:

For the last month, I've been working on a hobby project, shaping years of my ideas into the implementation of minimalistic config language ccl: Categorical Configuration Language.

You can read the motivation and a tutorial in my latest article:

I implemented CCL in OCaml using angstrom. The source code is here:

Dune dev meeting

Etienne Marais announced

Hi :wave:

We will hold our first Dune dev meeting of 2025 (Happy New Year :partying_face:) on Wednesday, January, 8th at 9:00 CET. As usual, the session will be one hour long.

Whether you are a maintainer, a regular contributor, a new joiner or just curious, you are welcome to join: these discussions are opened! The goal of these meetings is to provide a place to discuss the ongoing work together and synchronize between the Dune developers ! :camel:

:calendar: Agenda

The agenda is available on the meeting dedicated page. Feel free to ask if you want to add more items in it.

:computer: Links

"Cram tests: a hidden gem of dune" and "Snapshot tests for your own ppx"

David Sancho announced

Hi, I wrote 2 blog posts about cram tests and It's a good idea to share them together.

Cram tests: a hidden gem of dune

I'm a strong advocate of unit tests, I can confidently say that it has saved me from introducing regressions countless times. Today I want to share one of the hidden gems of OCaml and their testing story with dune, cram tests.

https://sancho.dev/blog/cram-tests-a-hidden-gem-of-dune

Snapshot tests for your own ppx

When building preprocessor extensions (ppx) in OCaml, testing is crucial. You want to ensure your ppx works correctly and continues to work as you make changes. After experimenting with different approaches, I've found that cram tests fit well for the task.

https://sancho.dev/blog/snapshot-tests-for-your-own-ppx

Let me know what you think, and if there's a need for more :smiley:

Other OCaml News

From 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.

--=-=-=--