OCaml Weekly News
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
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:
- 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]
- 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
orflags: 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
- Meeting link: zoom
- Calendar event: google calendar
- Wiki with information and previous notes: GitHub Wiki
"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.
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
Here are links from many OCaml blogs aggregated at the ocaml.org blog.
Old CWN
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe to the caml-list.