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.

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:

  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.