Quick Facts
Course | P523—Programming Language Implementation |
---|---|
Credits | 3 |
Location | Lindley Hall 008 |
Times | Tue & Thu, 11:15 AM-12:30 PM |
Instructor | Arun Chauhan |
Office Hours | By appointment |
Textbook | Keith Cooper and
Linda Torczon,
Engineering
a Compiler, 2nd edition.
Morgan Kaufmann Publishers, 2011. E-book version |
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 they 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 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 4-5 programming assignments, the last of which may be a project. There will be a mid-term and a final exam. There may be a few unannounced pop quizzes. The course will assume no background in compilers.
In addition to the textbook, the course will also spend a significant amount of time covering advanced topics, such as parallelizing compilers, memory-hierarchy optimizations, and high-level languages from supplementary sources.