I like the intersection of language research and implementation. I can greatly enjoy pointer arithmetic as well as working towards avoiding it.
I am working on a JIT for the R language, called Ř. The compiler uses context dispatch to specialize functions to different dynamic contexts and it has a custom IR to handle R reflection and lazyness. We also experimented with sampling based profiling approaches.
We formalized speculative optimizations in a model IR called sourir. Speculation needs deoptimization, aka on-stack-replacement (OSR): optimizations are undone at runtime, functions replaced while being executed. We show how to construct and maintain correct deoptimization points and prove correctness of standard optimizations.