Hello Here is the latest OCaml Weekly News, for the week of December 31, 2024 to January 07, 2025. Table of Contents ───────────────── 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 ═════════════════════════════ Archive: David Allsopp announced ─────────────────────── 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: • `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… [Cygwin] [my opam fork] [windows-on-arm64] Opam repository archival, Phase 1: unavailable packages ═══════════════════════════════════════════════════════ Archive: 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 ). 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. [`x-maintenance-intent'] CCL: Categorical Configuration Language ═══════════════════════════════════════ Archive: 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: • [chshersh.com: The Most Elegant Configuration Language] I implemented CCL in OCaml using `angstrom'. The source code is here: • [chshersh.com: The Most Elegant Configuration Language] Dune dev meeting ════════════════ Archive: 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. [ meeting dedicated page] :computer: Links ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ • Meeting link:[ zoom] • Calendar event:[ google calendar] • 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" ════════════════════════════════════════════════════════════════════════ Archive: 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. 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. Let me know what you think, and if there's a need for more :smiley: Other OCaml News ════════════════ >From the ocaml.org blog ─────────────────────── Here are links from many OCaml blogs aggregated at [the ocaml.org blog]. • [What Happened in 2024?] • [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 ═══════ 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]