Joe Thomas

Aug 30, 2021

Things I learned at ICFP 2021

Last week I attended ICFP for the first time. Due to the pandemic, the conference was entirely online. This made it really easy and inexpensive to attend (were it in person, I would've had to fly to Korea), but also made it harder to meet people and benefit from "the hallway track".

Despite the circumstances, there were a number of interesting sessions. Below is a summary of some of the projects I learned about at the conference. Some caveats:

  • ICFP has a lot of parallel tracks. I was focused primarily on ML and OCaml sessions, so I'm sure there were interesting talks that I missed.

  • I missed some talks due to timezone issues.

  • I'm approaching the conference as someone who primarily works on the backend of analytics applications, so I wasn't as interested in new results about PL theory.

I think conferences are a great way to hear about new technologies, but for depth you have to study on your own afterwards. As such, this post is a bit of a "listicle" capturing topics I might want to investigate later.

Keynote

Ravi Chugh gave an interesting keynote about how programming language techniques can be applied to human-computer interaction problems. He demonstrated a 2D graphics editor called Sketch-n-sketch where the user could create an image using a GUI or a programming language, and synchronize between the two.

Before this session, I didn't realize how much research has been done into applying FP/PL techniques to human/computer interfaces. It would be interesting to apply similar techniques to a 3D animation system like Blender. When I used to work on animation (long, long ago), I wanted GUI capabilities for building individual models in a scene but would have preferred a programming language when rigging characters or automating certain motions. Debugging GUI-based automation was no fun at all.

Historical Talks

Don Syme gave a talk about the history of F#. This covered the original motivation for the language, it's interactions with the C# community, and the impact of Object Orient Programming's popularity on PL research. Xavier Leroy gave a presentation about the history of OCaml (this year was the language's 25th anniversary), and also commented on the impact of OO. It was interesting to hear about how OCaml was used for teaching programming in Universities and how this language related to research in automated theorem proving.

Research and Industry Talks

Marten Agren gave a talk about how Standard Chartered uses a strict version of Haskell for their work, and how FP is especially suited to scalable inter-operation with spreadsheets. Before this talk, I didn't know that some people use Haskell without lazy evaluation.

Denis Merigoux gave a presentation about a new DSL called Catala that makes it possible to model laws (e.g. tax law) with code. The compiler for the language is written in OCaml. Naturally, the correctness of these types of systems is quite important; errors mean that essential social services aren't delivered (e.g. paychecks for government workers). It's interesting to think about other areas where this work could be applied beyond tax law. For example, most utility costs are also a matter of public record and having an open, formally verified system for calculating those costs would help ensure rate payers are billed fairly.

Talks about tooling and libraries

The OCaml workshop featured several exciting talks about improvements to the OCaml ecosystem.

Laurent Mazare spoke about how Jane Street makes OCaml libraries accessible from within python, with a special focus on Jupyter notebooks. As someone who has worked supporting data scientists in the past, this seems like a great way to get the benefits of the Python data science ecosystem while building primarily in a strongly typed language. I'm not sure what this work means for projects like Owl that try to provide a similar feature set as Numpy/SciPy/Pandas in OCaml.

Di Long Li and Gabriel Radanne presented a new library called timere that makes it easier to work with dates and times. The library simplifies solving recurrence-rule problems like "tell me which Christmases fall on a Wednesday from now on". I think this is a great development, especially if you're building an application that works with time series data from a business domain. Gabriel Radanne also presented dowsing a tool that allows the user to search OCaml codebases using a type signature. This is a bit like hoogle, but the underlying techniques used to enable search are quite different.

Thomas Leonard gave an impressive talk about applying the new effect system in multicore OCaml to the angstrom library, demonstrating performance on par with Rust. I think it will be exciting to start using effects as they become available in the next year or two.

Two different teams discussed their efforts to improve the state of OCaml documentation, so that a site similar to hackage could be generated directly from OPAM. This seems like a great way to lower one of the barriers to entry for maintainers and make OCaml documentation more consistent.

Gargi Sharma presented work that a team at Tarides is doing on current-bench, a system for analyzing benchmarking data that integrates with OCaml CI systems. Using their tools, one can track trends in benchmark data over time and identify builds that improved or degraded performance. This system also provides a nice example of how to build an analytics app using FP techniques. They use rescript for their frontend, hasura to serve analytics results via GraphQL, and an OCaml program for ingesting performance data into their database.

Takeaways

There was a lot of focus on "ecosystem tooling" at the OCaml workshop and considerable excitement about the upcoming release of multicore OCaml. I didn't hear much about work on the frontend (ReasonML, Bucklescript, Rescript) or updates about applications of OCaml to statistics/numerical computing. Possibly this was just a function of the unusual pandemic environment or the nature of a conference with a more academic focus. In any case, I'm excited to dive into some of these new tools, and especially to start getting the benefits of improved documentation and search capabilities for OCaml libraries.