|
NYU, Graduate Division, Computer Science Course, CSCI-GA.3130-001 Honors Compilers Patrick Cousot pcousot Spring 2013 |
Although all compiler construction courses cover essentially the same material (including lexical analysis, grammars and parsing, semantic analysis and typing, declaration and storage management, static analysis, register allocation, code generation, fontend and backend optimization techniques), they may have very different scopes depending on the considered languages (imperative, object-oriented, functional, logical, domain-specific, etc), the considered machines (virtual machines, specialized hardware such as GPU or parallel machines, etc), the considered analysis, allocation and transformation methods (including supporting tools), the considered pedagogical objectives (from teaching of a well-established technology to explaining the scientific bases of this technology), and the teaching strategies (e.g. applied programming project to application of theory to software design).
A complete compiler is a large program for a student project which, unfortunately, often ends up in a mishmash of techniques for solving very specific problems posed by a particular source language and target machine, which is not propitious for a coherent view of the subject. Moreover very few students are likely to have to develop a compiler in their professional carrier, which does not mean that the understanding of compilers, at an appropriate level of abstraction, is not essential to all computer scientists, e.g. to grasp the impact of compilers on how computers are used or to apprehend computer safety and security.
The bias of this advanced compiler construction course is to view advanced compilation as an application of formal methods so that students will learn, beyond the basic ideas and concepts of compilation, rigorous mathematical concepts, abstractions, and methodologies that are useful in many areas of computer science where mathematical foundations and correctness is a major concern.
Examples are abstract interpretation, languages, grammars, lattices, fixpoints, inductive definitions, parsing, semantics, bisimulations, program transformation and equivalence, abstract machines, correctness, proof methods, verifying compilers, proof assistants, theorem provers, etc.
Class Hours:
Tuesday and Thursday, 3:30PM—4:45PM, WWH 312
First class:
Tuesday, January 29th, 2013
Office Hours:
By email appointment on Thursday, 2:00PM—3:15PM, CIWW 405
Textbook:
None, all information (including course notes) is provided online by the instructor.
Many books are available for the personal use of students such as
Trends in compilation can be tracked by looking at the proceedings of the annual International Conference on Compiler Construction (CC), see CC 2013 and previous proceedings at DBLP
Homework:
The reading of the course notes, including auxiliary material, when explicitly mentionned, is mandatory. The homework exercices are facultative
and given for encouraging the improvement of one's knowledge and self-training in the
perspective of the exams.
Personal project:
Midterm exam:
Thursday, March 14th, 2013. Questions on all previous classes.
Spring recess:
Monday, March 18th —
Sunday, March 24th, 2013.
Last day of class:
Thursday, May 9th, 2013.
Final exam:
Thursday, May 16th, 2013. Questions on all previous classes.
Course requirements:
Personal project, midterm and final exams. Class attendance and facultative homework highly recommended.
Academic integrity:
See the NYU computer science department commitment to academic integrity and the Academic Integrity of the College of Arts and Science
Grading:
Personnal project (25%),
midterm exam (25%),
and final exam (50%).
The course content is online
© P. Cousot