Programming Languages and Compilers
Programmers use programming languages to express the computations they want their software to perform, and compilers to translate the resulting programs to a form that can be executed on hardware. Research in this area focuses on language and implementation issues: how language constructs influence the way in which computations are performed; how to reason about the behavior of programs; how to translate programs efficiently and effectively into low-level code; and how to improve the performance of code, e.g., with respect to size, speed, resource usage, and/or security.
Research on programming languages and compilers at the University of Arizona focuses on practical issues. It spans a number of different topic areas and encompasses program analyses and transformations related to software security [Collberg], static and dynamic analysis for deobfuscation and code optimization [Debray], novel compilation techniques for new and interesting languages [Proebsting], and application of code generation technologies and static and dynamic program analyses to scientific computing applications [Strout]. Ongoing research projects in this area include code obfuscation using covert channels [Collberg and Debray], generic approaches to deobfuscation [Debray], and language-agnostic optimization and parallelization of interpreted code [Strout and Debray].