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

Alan Schmitt
2025-05-06T07:24:22Z

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

Hello

Here is the latest OCaml Weekly News, for the week of April 29 to May
06, 2025.

Table of Contents
─────────────────

Docfd 11.0.0: TUI multiline fuzzy document finder
opam 2.4.0~alpha1
Early work experimenting with zig as a cross-compiler for OCaml
Dune 3.18
A tool to reverse debug OCaml/other binary runs
opam 2.4.0~alpha2
(BER) MetaOCaml N153, for OCaml 5.3.0
Other OCaml News
Old CWN

Docfd 11.0.0: TUI multiline fuzzy document finder
═════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-docfd-11-0-0-tui-multiline-fuzzy-document-finder/16574/1>

Darren announced
────────────────

Hi all, I am happy to announce the release of Docfd 11.0.0.

[Repo]

[Repo] <https://github.com/darrenldl/docfd>

What Docfd is
╌╌╌╌╌╌╌╌╌╌╌╌╌

Think interactive grep for text files, PDFs, DOCXs, etc, but
word/token based instead of regex and line based, so you can search
across lines easily.

Docfd aims to provide good UX via integration with common text editors
and PDF viewers, so you can jump directly to a search result with a
single key press.

If you have used Recoll or other local document search engines before,
then you can roughly think of this as Recoll-lite with TUI.

◊ Interactive use

<https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/6/6e01a779f649ba35dec72595d3706847f87e1442.gif>

◊ Non-interactive use

<https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/6/6d6984de3d73d0c949d06f1c8345ac9940d7f28e.gif>

◊ Features

• Multithreaded indexing and searching
• Multiline fuzzy search of multiple files
• Content view pane that shows the snippet surrounding the search
result selected
• Text editor and PDF viewer integration
• Editable command history - rewrite/plan your actions in text editor
• Search scope narrowing - limit scope of next search based on current
search results
• Clipboard integration

Changes since 3.0.0
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

The last version announced here was 3.0.0. Docfd has since then
undergone many improvements.

Major changes:

• Asynchronous UI
• You can type and interact with UI without any blocking even if
search is slow, and active search will be cancelled when
appropriate
• Scripting functionality in the form of a commands file
• One-to-one correspondence to most UI interactions, allowing you to
interact as normal, and save your interaction into a file to
repeat the search steps later via `–commands-from`
• Swapped to using SQLite as index DB format, which lowers the memory
footprint significantly
• For the sample of 1.4GB of PDFs used, earlier versions use around
1.9GB of memory to store the index in-memory, while versions since
9.0.0 use only 39MB of memory
• Document indexing was reworked into a multistage pipeline to allow
I/O tasks and computational tasks to run concurrently, which makes
indexing a few times faster than older versions usually
• Searching was also reworked into a pipeline for better work
distribution across domains, improving search speed by 30% in the
sample set of PDFs
• Added `--open-with' to allow customising the command used to open a
file based on file extension

opam 2.4.0~alpha1
═════════════════

Archive: <https://discuss.ocaml.org/t/ann-opam-2-4-0-alpha1/16520/2>

Continuing this thread, Ryan Gibb announced
───────────────────────────────────────────

:snowflake: Add *Nix support* for *external dependencies
(depexts)* by adding support for stateless package
managers ([#5982]). /Thanks to [@RyanGibb] for this
contribution/

I've written a small explainer of this at
<https://ryan.freumh.org/opam-nix.html> and am happy to receive
feedback on this mechanism!

[#5982] <https://github.com/ocaml/opam/issues/5982>

[@RyanGibb] <https://github.com/RyanGibb>

Early work experimenting with zig as a cross-compiler for OCaml
═══════════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/early-work-experimenting-with-zig-as-a-cross-compiler-for-ocaml/16151/17>

Continuing this thread, Chris Armstrong announced
─────────────────────────────────────────────────

I've written up a summary in a blog post of much of my progress I've
described above:
<https://www.chrisarmstrong.dev/posts/ocaml-cross-compilation-an-experiment>

Dune 3.18
═════════

Archive: <https://discuss.ocaml.org/t/ann-dune-3-18/16428/3>

Etienne Marais announced
────────────────────────

The Dune Team is glad to announce the release of Dune `3.18.2'.

This version contains a fix to restore compatibility with the upcoming
OCaml `5.4.0'.

Changelog
╌╌╌╌╌╌╌╌╌

◊ Fixed

• fix compatibility with `ocaml.5.4.0' by avoiding shadowing sigwinch
(@nojb, #11639)

A tool to reverse debug OCaml/other binary runs
═══════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-a-tool-to-reverse-debug-ocaml-other-binary-runs/16366/6>

Continuing this thread, Sid Kshatriya announced
───────────────────────────────────────────────

BTW aarch64 support was released – forgot to mention it on this
thread.

opam 2.4.0~alpha2
═════════════════

Archive: <https://discuss.ocaml.org/t/ann-opam-2-4-0-alpha2/16609/1>

Kate announced
──────────────

Hi everyone,

We are happy to announce the second alpha release of opam 2.4.0.

This version is an alpha, we invite users to test it to spot
previously unnoticed bugs as we head towards the stable release.

What’s new?
╌╌╌╌╌╌╌╌╌╌╌

• :dragon_face: `opam switch create [name] <version>' will not include
compiler packages flagged with `avoid-version~/~deprecated' in the
generated invariant anymore. ([#6494]) This will allow opam to avoid
the use of the `ocaml-system' package unless actually explicitly
requested by the user. The opam experience when the `ocaml-system'
compiler is used is known to be prone to a variety of bugs and
configuration issues. This alpha made this change in order to
provide `opam switch create' with the same experience as `opam
init', which will itself not choose `ocaml-system' anymore since the
previous alpha1 release.

• :window: Fallback to the existing Cygwin package manager if its
upgrade failed to be fetched ([#6495], partial fix for [#6474])

• :goggles: Fix various crashes and extreme performance issues when
updating some opam repositories ([#6448])

:open_book: You can read our [blog post] for more information, and for
even more details you can take a look at the [release note] or the
[changelog].

[#6494] <https://github.com/ocaml/opam/pull/6494>

[#6495] <https://github.com/ocaml/opam/issues/6495>

[#6474] <https://github.com/ocaml/opam/issues/6474>

[#6448] <https://github.com/ocaml/opam/issues/6448>

[blog post] <https://opam.ocaml.org/blog/opam-2-4-0-alpha2/>

[release note] <https://github.com/ocaml/opam/releases/tag/2.4.0-alpha2>

[changelog] <https://github.com/ocaml/opam/blob/2.4.0-alpha2/CHANGES>

Try it!
╌╌╌╌╌╌╌

The upgrade instructions are unchanged:

For Unix systems
┌────
│ bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.4.0~alpha2"
└────
or from PowerShell for Windows systems
┌────
│ Invoke-Expression "& { $(Invoke-RestMethod https://opam.ocaml.org/install.ps1) } -Version 2.4.0~alpha2"
└────
Please report any issues to the [bug-tracker].

Happy hacking, <> <> The opam team <> <> :camel:

[bug-tracker] <https://github.com/ocaml/opam/issues>

(BER) MetaOCaml N153, for OCaml 5.3.0
═════════════════════════════════════

Archive:
<https://inbox.ci.dev/caml-list/aBmw%2F+5a2x%2FaQN5m@Magus.localnet/T/#u>

Oleg announced
──────────────

BER MetaOCaml (or, simply MetaOCaml, since there aren't any others)
N153 is a strict superset of OCaml 5.3.0 for ``writing programs that
generate programs''. MetaOCaml adds to OCaml the type of code values
(denoting ``program code'', or future-stage computations), and two
basic constructs to build them: quoting and splicing. MetaOCaml also
features cross-stage persistence, generating ordinary and
mutually-recursive definitions, first-class pattern-matching and
heterogeneous metaprogramming.

The generated code can be printed, stored in a file – or compiled and
linked-back to the running program, thus implementing run-time code
optimization. A subset of the generated OCaml code can also be
converted to C, via offshoring. (The generated C needs no particular
runtime or GC.) A well-typed MetaOCaml program generates only
well-scoped and well-typed programs: The generated code shall compile
without type errors. Staging-annotation–free MetaOCaml is identical
to OCaml; MetaOCaml can link to any OCaml-compiled library (and vice
versa).

There aren't any notable new features to talk about. OCaml 5.x has
changed AST (Parsetree) and Typedtree in significant ways, especially
concerning functions. Adjusting MetaOCaml to those changes took some
work. See also ChangeLog and NOTES.txt in the MetaOCaml distribution
for more details.

I'm very thankful to the OCaml team for merging the patch to the OCaml
grammar concerning staging annotations. It has made maintaining
MetaOCaml quite easier.

MetaOCaml N153 should be available through OPAM, hopefully soon. In
the meanwhile, it is available as a set of patches to the OCaml 5.3.0
distribution. <https://okmij.org/ftp/ML/ber-metaocaml.tar.gz> See the
INSTALL document in that archive. You need the source distribution of
OCaml 5.3.0.

Other OCaml News
════════════════

>From the ocaml.org blog
───────────────────────

Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].

• [Bstr, a synthetic library for bigstrings]

[the ocaml.org blog] <https://ocaml.org/blog/>

[Bstr, a synthetic library for bigstrings]
<https://blog.osau.re/articles/bstr.html>

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: 24193 bytes --]