OCaml Weekly News

Previous Week Up Next Week

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

Darren announced

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

Repo

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

    6e01a779f649ba35dec72595d3706847f87e1442.gif

  • Non-interactive use

    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

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!

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

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

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

Continuing this thread, Sid Kshatriya announced

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

opam 2.4.0~alpha2

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.

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:

(BER) MetaOCaml N153, for OCaml 5.3.0

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.

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.