Quick Facts

Course B629—Practical Compiling for Modern Machines (Topics in Programming Languages)
Credits 3
Location Lindley 120
Times Mon & Wed, 11:15 AM-12:30 PM
Instructor Arun Chauhan
Office Hours By Appointment
Textbook Keith Cooper and Linda Torczon, Engineering a Compiler. Morgan Kaufmann Publishers, 2003.

Incorporating feedback from the past offerings of this course, the programming assignments will be made more accessible and smaller. The course will assume no background in compilers.

About the course

We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler that could produce efficient programs.

John Backus, the “Father of Fortran”

This is a course on compilation. Compilers bridge the gap betweeen programming languages and computers. In other words compilers instill meaning into a programming language. This course focuses on understanding the fundamental components that go into building modern compilers that must care about both correctness and performance. The latter part of the course discusses the basic ideas behind the magic that automatically translates sequential programs into parallel programs. Such “parallelizing” compilers are gaining importance as parallelism becomes pervasive. The course emphasizes on optimizations, rather than front-end (parsing) and back-end (object code generation), and in particular on high-level, rather than low-level optimizations. The concepts will be illustrated using simple imperative constructs, keeping in mind that the dominant programming languages as well as hardware architectures follow an imperative style of programming,

Goals

At the end of the course you will:

Prerequisites

You are expected to know at least two programming languages and be fluent in at least one of those (meaning, you should have written multiple non-trivial programs in that language). You may program in any language of your choice, however, no support is guaranteed for any language other C++. This is unfortunate, but I am limited by the availability of time. We might also use special-purpose language(s) to implement parts of the compiler—the course will introduce any such language(s). You are not required to have any prior background in compilers, but prior knowledge of the fundamentals of programming languages and compilation will certainly help. Familiarity with Unix / Linux is highly recommended.

Course-load

The course will involve at least five programming assignments. There will be one mid-term exam and one final exam.

B629, Arun Chauhan, Department of Computer Science, Indiana University