Quick Facts
Course | B629—Practical Compiling for Modern Machines (Topics in Programming Languages) |
---|---|
Credits | 3 |
Location | LH 115 |
Times | Mon & Wed, 2:30 PM-3:45 PM |
Instructor | Arun Chauhan |
Office Hours | By appointment |
Textbook | Keith Cooper and Linda Torczon, Engineering a Compiler. Morgan Kaufmann Publishers, 2003. |
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.
Consider this:
- Have you heard of the recently announced browser called Chrome by Google? (Look it up!) Fast Javascript execution is a big motivation behind this browser, as also behind Apple's Squirrel Fish project. Why this sudden interest in Javascript? What are the implications for language designers and implementers?
- Have you heard of the so-called multi-core crisis? The real crisis is not in designing and implementing multi-core processors, but in programming them. What causes this crisis and are software tools, including compilers, up to the challenge of programming these machines?
- Have you heard of the rapidly emerging language called Ruby? Meta-programming is a powerful feature in this object-oriented scripting language, which throws some difficult challenges in implementing it. What makes languages like Ruby popular and what is the role of compilers and compiler techniques in implementing such languages?
- Earlier this year, the Defence Advanced Research Projects Agencey ARPA issued a call for proposals for a multi-million dollar project to develop a compiler. Why does DARPA want to invest millions of dollars in developing a compiler, when numerous compilers already exist—commercial as well as open-source?
Goals
This course aims to provide:
- A basic understanding of the architecture of modern practical compilers;
- Knowledge of the fundamental algorithms and data structures used in implementing a compiler;
- Exposure to the issues arising in compiling for modern multi-core architectures;
- A look into the fundamental issues facing the growing class of scripting languages;
- A peek into the novel demands on compilers today, and the challenges they face in meeting those demands;
- And do this through first hand experience on at least one aspect of modern compilers through a semester-long project.
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 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 one semester-long project. There will be one mid-term exam and one final exam.
In a departure from the past offerings, there will be no programming assignments. Instead, there will be one semester-long project, with intermediate milestones. The course will assume no background in compilers.
Another important addition to the course this year is discussion of scripting languages that are rapidly becoming popular, virtual machines—the execution mechanism used by most modern scripting languages, and the role of compilers in these languages.