Week 47: What’s everyone hacking on this week?

The usual open thread: what’s everyone doing this week?

(Continuing @avsm’s idea for the fourth week running, since people seem to enjoy it.)


Replying for myself: over the weekend I updated a bunch of the MacPorts build infrastructure to use a much more modern OCaml (4.05.0) and related tools. Hopefully that will be committed over the next couple of days.

Today I’m working on my compiler (written in OCaml, naturally).

I am still trying to make window resizing work better in my framebuffer library, which I really hope I’ll get to the bottom of before the MirageOS hackathon/retreat in Morocco next week.

I played around a little bit more with a Notty-helper for drawing Notty.images to the windows and using the Notty keyboard/mouse input types, which is getting there slowly, but steady:

Yesterday I started implementing a handler for the QubesOS file copying mechanism (that allows VMs to exchange files) so that my eye-of-mirage application can receive images from VMs while it is running, here are the basic types:


I’m writing (or at least trying to write) a ledger-cli importer for the CSVs that I can download for my bank. A handful of these already exist but I figured it might be a good toy project to familiarize myself with OCaml and it’s ecosystem.


fixed all the bugs I can find in my open statement extension patch. Merged with trunk. Preparing pull request.


I’m discovering js_of_ocaml to port my plotkicadsch project to plot electronic schematics in the browser.

1 Like

I’m finishing up a YAML implementation and a library that manipulates OCaml version numbers (a surprisingly complex process).

These are all dependencies of the Obi tool which is coming together nicely to improve the quality of opam packages. Thanks to everyone for their help with fixing 4.06.0 safe-string issues (but there are a few left)


Holy moly that’s putting it mildly. How are you fixing these packages with no access to their repos?

opam files containing metadata for packages are committed directly to opam-repository as part of their release. Where appropriate we’ve been making upstream PRs for opam files in the project repository, but it’s not necessary to change the opam file in the project repository to fix it in opam-repository (and therefore for users of opam). (Recent non-safe-string-but-moral-equivalent example I happened to still have a tab open for.)


I am exploring OCaml as a compile target for a structured editor, and am enjoying it! It’s such a fascinating eco system. Right now I am investigating what it could look like to generate OCaml code from the S-expression format I have used so far. It looks promising! And attributes are really interesting for this purpose.


The last few weeks, I’ve been sketching out the revised API for the Caqti database connector. Since yesterday’s commits, I believe it’s fairly close to the final API, and I’ll start migrating my own projects to see if I hit any issues.

1 Like

ppx stuff

By lack of another volunteer, I am handling a group release of the ppx_deriving ecosystem (the package, its plugins, and ppx_import) with 4.06 support. I was not working on the codebase previously, and don’t personally use the tools for my projects, so I’m walking in the dark a bit, but it seems to be doing mostly fine. (I hope to find people closer to the projects to tackle co-maintenance in the future, and a first step on my TODO-list is to write more documentation on the release process.)

warnings for pattern matching

I have an ongoing project with Thomas Refis and Luc Maranget to refactor and clean up the part of the compiler codebase dealing with pattern-matching.

I started looking at it in 2016 when working on the new warning for “ambiguous pattern variables”, and wrote a few refactoring/cleanup commits, and Thomas invested a lot more work in a series of refactoring on top of that. On November 10th we had a meeting with Luc (the maintainer of this part of the codebase) to review Thomas’ work, and Thomas integrated our feedback and sent a new Pull Request #1488 this week, which I reviewed.

Refactoring work may not seem as exciting as new language features or stuff, but this particular one has the indirect goal of increasing the bus factor of this part of the codebase. Currently only Luc Maranget (and on some part Jacques Garrigue) is comfortable with it, so adding Thomas Refis and myself to the mix will improve maintenance and evolution capabilities in the future.

There are two fairly distinct pieces of code dealing with pattern-matching in the compiler, typing/parmatch.ml deals with the warnings about pattern-matching (non-exhaustivity, useless/redundant patterns, etc.), and is in essence defining various static analyses over patterns, and bytecomp/matching.ml deals with compilation of pattern-matching to simpler tests. We have only looked at typing/parmatch.ml (static analysis), which is an easier piece of code. I hope that we will collectively find the time to apply the same treatment to matching.ml (compilation), but the code is trickier and more sensitive (regressions there could turn into wrong-code production instead of additional errors/warnings or disable warnings) so it would be a lot more work.


Thanks @gasche! I’m grateful for both contributions. People find it hard to get motivated to do the kind of functionality-free cleanup and refactoring you guys are doing, but I think it’s understood how important it is. Similarly for the PPX work.


Working on adding ppx_inline_test support to jbuilder. For those who are interested in an early preview: https://github.com/janestreet/jbuilder/pull/338


While procrastinating on my compiler project, I did an initial pass on converting sedlex to use Uchar.t for representing unicode chars over using ints. The changes were very small. What’s there is slighty hacky so far, and I still need to clean up the Unicode handling to use a library instead of duplicating doing that stuff on its own.

It may never see the light of day but it has taught me a bunch (including how ppx extensions work.)

1 Like