[Caml-list] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt
2025-01-07T17:26:55Z

[-- Attachment #1: Type: text/plain, Size: 13769 bytes --]

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:
<https://discuss.ocaml.org/t/playing-with-windows-on-arm64/15875/1>

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…

[Cygwin] <https://cygwin.com>

[my opam fork] <https://github.com/dra27/opam.git>

[windows-on-arm64]
<https://github.com/dra27/opam/commits/windows-on-arm64>

Opam repository archival, Phase 1: unavailable packages
═══════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/opam-repository-archival-phase-1-unavailable-packages/15797/7>

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.

[`x-maintenance-intent']
<https://github.com/ocaml/opam-repository/blob/master/governance/policies/archiving.md#specification-of-the-x--fields-used-in-the-archiving-process>

CCL: Categorical Configuration Language
═══════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-ccl-categorical-configuration-language/15901/1>

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:

• <https://github.com/chshersh/ccl>

[chshersh.com: The Most Elegant Configuration Language]
<https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html>

Dune dev meeting
════════════════

Archive: <https://discuss.ocaml.org/t/ann-dune-dev-meeting/14994/20>

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]
<https://github.com/ocaml/dune/wiki/dev-meeting-2025-01-08>

:computer: Links
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

• Meeting link:[ zoom]
• Calendar event:[ google calendar]
• Wiki with information and previous notes:[ GitHub Wiki]

[ zoom]
<https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09>

[ google calendar]
<https://calendar.google.com/calendar/embed?src=c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com>

[ GitHub Wiki] <https://github.com/ocaml/dune/wiki#dev-meetings>

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

Archive:
<https://discuss.ocaml.org/t/ann-cram-tests-a-hidden-gem-of-dune-and-snapshot-tests-for-your-own-ppx/15910/1>

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
───────────────────────

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] <https://ocaml.org/blog/>

[What Happened in 2024?]
<https://soap.coffee/~lthms/posts/December2024.html>

[Build A CLI in OCaml with the Cmdliner Library]
<https://debajyatidey.hashnode.dev/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] <mailto:alan.schmitt@polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

[Alan Schmitt] <https://alan.petitepomme.net/>

[-- Attachment #2: Type: text/html, Size: 25042 bytes --]