Research
I am particularly interested in language and its relation to meaning.
This manifests itself in various different fashions in different fields.
- In linguistics, I am particularly interested in semantics (but also do a bit of syntax), within which I am most interested in tense/aspect/modality and mood and quantification.
- In computer science, I am exclusively interested in programming languages, and within PL, I am particularly interested in effect handlers and language interop.
I find effect handlers to be the most interesting area of active research in programming languages out there today. Serious work on the topic didn’t really kick off til the 2010s, and there’s a couple of open problems that seem very solvable, mostly around performance and modularity.
There are three promises effect handlers provide that make them appealing.
- First, they provide a unified system of non-local control flow. The interaction between any subsequent systems – exceptions, generators, async, etc – is thus inherently well-defined. The pervasive use of effect handlers also provides for fancier features like colourless async.
- Second, they provide well-founded effect tracking. The handlers of effects are the side-effects of the program, and thus tracking falls out of a well-typed effect system for-free.
- Third and finally, effect handlers look imperative. They let you implement imperative interfaces in terms of well-structured underpinnings. The imperative programmer can keep writing their code imperatively, but get the benefits of a structured PL-focused approach. I view this as a fight against prescripivism: effect handlers are for the masses!
To this end, I am working on a couple of languages centred around effect handlers. They aim to explore 1) what design decisions naturally arise out of a Scheme centred around effect handlers, and 2) how well a language can provide facilities to abstract over these handlers and present a familiar interface to the user. Currently, I am developing this in private, but plan to do so in public once I have something interesting and worth sharing.
I find language interop to be a really interesting topic because the status quo sucks, there’s basically no research on it (almost everything I am aware of comes from one person), and it’s an inherently hard problem. It is almost antithetical to the typical approaches to problems taken by the field, even. When confronted with an issue, programming language people like to, well, design a new programming language. But unless these languages are an embedded DSL (and even sometimes then) these languages are largely incompatible with other languages. This is by virtue of designing a language, not a library, and while it isn’t necessarily a bad thing (and often is necessary) – it’s got some downsides! Seamless interop is hard, sometimes irreconcilably so.
To this end, I am keeping an eye on WebAssembly and crABI. WebAssembly is (essentially) a language-agnostic JVM + a module system. A module system is an expression of dependency and compatibility, and in this context, facilitates interop. Multiple languages can compile targeting WebAssembly, making use of its generic local/non-local control features and GC’d / non-GC’d references, and exposing an interface suitable for use by other languages without the performance concerns of copying objects or counts across call graphs. I think it’s the future of compiled code.
In the mean time, though, and for everything where you can’t escape reality and the C ABI, there’s crABI – a proposed extension of the C ABI to encode type information. This would much simplify the process of FFI among supporting languages, though it wouldn’t improve performance overhead around incompatible memory systems or anything. It’s stalled a bit, unfortunately. Regardless, any language I write, I plan to have target crABI (and WebAssembly).
I plan to apply for graduate school in December 2026, for positions beginning September 2027. If any of this seems fun and you’d like to talk about it / work together on it before or while I’m in grad school – please, don’t hesitate to reach out! I can be contacted over email at jj [at] toki.la.