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.
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.
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,
At the end of the course you will:
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.
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