Quick Facts
Course | B629—Practical Compiling for Modern Machines (Topics in Programming Languages) |
---|---|
Credits | 3 |
Location | Informatics (E) 122 |
Times | Mon & Wed, |
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:
-
Should Programming become the fourth R of literacy?
Some people have started arguing that in addition to Reading, 'Riting, and 'Rithmetic, 'Rogramming should be considered the fourth R of widely accepted prerequisites of literacy. Indeed, there is a raging debate on what computing means and whether it is as core a subject as mathematics. What would it take to make programming so fundamentally powerful that it becomes an integral part of every day literacy? -
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? -
Which is the language used to implement Twitter?
The answer might surprise you. It is not C++, not Java, not even PHP or Perl. It is Ruby and (starting recently) Scala! Why did the choose these languages? What makes these languages interesting and what is the role of compilers and compiler techniques in implementing such languages? -
Why does the US Department of Defense want a brand new C compiler developed?
Last year, the Defence Advanced Research Projects Agencey ARPA issued a call for proposals for a multi-million dollar project to develop a compiler, mainly for C. Why does DARPA want to invest millions of dollars in developing a compiler, when numerous compilers already exist—commercial as well as open-source?
We will attempt to answer these questions in this course.
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 final 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
There will be 3-4 programming assignments, the last of which may be a project. Project topics will be chosen based, partly, on their potential to spawn research papers. There will be one mid-term exam and one final exam. The course will assume no background in compilers.
An important recent addition to the course 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.