Building Multi-Language Tools
05 Aug 2019 Monday, 02:00 PM to 03:30 PM
COM2 Level 4
Executive Classroom, COM2-04-02
Experts today know how to build extremely powerful program transformation and synthesis tools that can automatically migrate, repair, or otherwise improve code. However, very few of such tools get built, and fewer outside a research context, in part in part because each tool must be built separately for each language, and hence serves a limited target market.
In this talk, I'll be discussing three projects from our work on making it easier to build multi-language tools. First, Cubix is the first framework that achieves the goal of "One Tool, Many Languages" for source-to-source program transformations. Transformations written in Cubix have achieved 100% pass rates on compiler test suites and were rated as no less readable than human-transformed code in our study. Using Cubix, we were able to build a whole-program refactoring too that works on 5 different languages in only 40 hours. Second, Yogo ("You Only Grep Once") is a cross-language semantic code search tool built on Cubix, based on ideas from the Programmer's Apprentice and equality saturation. With Yogo, you can write a single pattern, and then find all semantically-equivalent code in multiple languages. Finally, Mandate is a "CFG-generator generator" which removes the need to build hand-written control-flow-graph generators per language. It takes as input the operational semantics of a programming language, and automatically derives a control-flow graph generator for that language. The output code is similar to what humans write, and Mandate can generate code for different granularities of control-flow-graph as consumed by different kinds of tools. These three projects are important steps towards our long-term goal of radically reducing the per-language cost of building tools, so that we can move from a world where none of these tools are worth building, to one where all of them are.
After winning the "20 Under 20" Thiel Fellowship, Jimmy Koppel graduated early from Carnegie Mellon University to found Tarski Technologies, a startup building commercial program repair technology. In 2014, he joined Apptimize as the third employee, where he obtained four patents in the areas of binary modification and mobile A/B testing. He is currently a fifth-year Ph.D. student in the Computer-Aided Programming group at MIT, with research focusing on meta-metaprogramming. On the side, he also runs a business training software engineers at the advanced level, and writes a popular software-design blog, Path-Sensitive.