Brief Overview

Interested in learning about how program analysis and compiler optimization and transformation techniques can be used to: make programs run faster; build program understanding tools, decompilers, obfuscators; and help verify correctness of programs?

This course provides an introduction to the tools and techniques are used in optimizing compilers and the old title of the course was ``Optimizing Compilers". However, these tools and techniques can actually be used in a wide variety of situations including compilers, software engineering tools and tools for domain-specific languages. Hence, the course was recently renamed ``Program Analysis and Transformations".

This year we will look at analysis and transformation of imperative languages such as C, object-oriented langauges such as Java, and dynamic scientific languages such as MATLAB. The course introduces foundations including standard flow analysis techniques and program transformations. This year we will work with the McLAB framework, a framework for analyzing and optmizing MATLAB currently being developed at McGill.

A previous course in compilers is highly recommended, although not strictly necessary, but students should be willing to do some background reading if they have not taken an introductory compiler course. Students should have a familiarity with Java, C# and/or C++ and the ability to work with large applications. The course will require a large project which includes substantial software development, as well as a written project report and an oral presentation. Thus, students must be fluent in writing reports and must be capable of presenting clear oral presentations.

Laurie HENDREN 2016-09-05