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: Darren announced ──────────────── Hi all, I am happy to announce the release of Docfd 11.0.0. [Repo] [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 ◊ Non-interactive use ◊ 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: 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 and am happy to receive feedback on this mechanism! [#5982] [@RyanGibb] Early work experimenting with zig as a cross-compiler for OCaml ═══════════════════════════════════════════════════════════════ Archive: 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: Dune 3.18 ═════════ Archive: 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: Continuing this thread, Sid Kshatriya announced ─────────────────────────────────────────────── BTW aarch64 support was released – forgot to mention it on this thread. opam 2.4.0~alpha2 ═════════════════ Archive: 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] ' 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] [#6495] [#6474] [#6448] [blog post] [release note] [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: [bug-tracker] (BER) MetaOCaml N153, for OCaml 5.3.0 ═════════════════════════════════════ Archive: 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. 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] [Bstr, a synthetic library for bigstrings] 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] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt]