Aaron Tomb

Ph.D., Computer Science, 2011
Computer Science Department
University of California, Santa Cruz
Advisor: Cormac Flanagan
Email: username: atomb, domain: soe.ucsc.edu

Now at Galois

Research Interests

At the most general level, I'm interested in exploring ways to create high-quality software. The aspects of quality that interest me include functional correctness (doing what the designers intended), robustness (handling exceptional situations gracefully), maintainability (adapting easily to future requirements changes), elegance (aesthetically pleasing design), usability (an unobtrusive interface to human users), and efficiency (doing the job without using excessive resources).

My work in this area so far has focused primarily on functional correctness and robustness, through both static analysis (advanced type systems, static analysis tools for defect detection) and dynamic analysis (testing, dynamic contract checking). My future work will probably continue to include these topics, but also extend into explorations of how various language features and design processes aid the creation of high-quality software.


Aaron Tomb and Cormac Flanagan. Automatic Type Inference via Partial Evaluation. In Principles and Practice of Declarative Programming, July 2005.

Cormac Flanagan, Stephen N. Freund, and Aaron Tomb. Hybrid Types, Invariants, and Refinements for imperative Objects. In Workshop on Foundations and Developments of Object-Oriented Languages, January 2006.

Jessica Gronski, Kenneth Knowles, Aaron Tomb, Stephen N. Freund, and Cormac Flanagan. Sage: Hybrid Checking for Flexible Specifications. In Workshop on Scheme and Functional Programming, September 2006.

David Herman, Aaron Tomb, and Cormac Flanagan. Space-Efficient Gradual Typing. In Trends in Functional Programming, April 2007.

Aaron Tomb, Guillaume Brat, and Willem Visser. Variably Interprocedural Program Analysis for Runtime Error Detection. In International Symposium on Software Testing and Analysis, July 2007.

Aaron Tomb and Cormac Flanagan. Detecting Inconsistencies via Universal Reachability Analysis. In International Symposium on Software Testing and Analysis, July 2012.


In addition to my publications, I have been involved with the development of several pieces of software:

Sage, a functional language with expressive dependent types that uses a mix of static and dynamic analysis to deal with the undecidability of type checking. It was a joint project with Cormac Flanagan, Steve Freund, Jessica Gronski, and Kenn Knowles.

A simple bug-finding tool, inspired by FindBugs but for .NET bytecode, as part of Google's 2005 Summer of Code. It has since been integrated into the Gendarme tool in the Mono system, maintained by Sebastien Pouliot.

A symbolic execution and test generation system for Java bytecode. This work was done as part of a summer internship at NASA Ames under Willem Visser (though I was officially working for Mission Critical Technologies, not NASA). The code is not publicly available at the moment, but may be at some point.

Various Resources

I have a blog. I generally write about computer science in general, my specific research, or other technical subjects.

Programming Languages: Check out Haskell, Scala, Objective Caml, and Prolog. I also use Java (I prefer version 1.5 or later) and occasionally C# (through Mono). I used to write a lot of C code, and I still occasionally do a bit of it.

Presenting Information: I strive to clearly and accurately present ideas (though I still struggle to do so). Good resources include the works of Edward Tufte and Richard Feynman.

Last modified: 2014-03-01