FAQ

  1. What are the prerequisites for the course?
    The official prerequisites are listed with the official course description. Unofficially, you should be familiar with at least two programming languages and be expert in at least one. A basic exposure (formal or informal) to compilation and concurrent programming will be helpful, but not necessary. If you have never heard of the term “parsing” or “syntax” then you might have a difficult time. If you have doubts contact the instructor.
  2. Do I need to know Scheme?
    In a word, no. However, see the answers to the previous question and the next question.
  3. Do I need to know language X?
    It depends. The more programming languages you know the better perspective you are likely to have of the issues that we discuss. Even though there is no requirement to know a specific language it would be greatly helpful if you knew at least one C-like (Algol-type) language.
  4. Do I need to know Unix / Linux?
    Knowledge of Unix or Linux is not absolutely required, but highly recommended. However, you are not expected to be kernel hackers :).
  5. Do I need to know algorithms?
    The answer depends on what you mean by algorithms. You should know how to analyze algorithms for time and space complexity and how to read and write algorithms in pseudo-code. You do not need to be an expert in algorithmic graph theory or complexity theory.
  6. Do I need to know computer architecture?
    You should certainly have a basic understanding of computer architecture (e.g., What is a register? What is a cache?). However, you do not need to know advanced architectural techniques.
  7. How is this course different from P423 / P523?
    While P423 / P523 focuses on the basic concepts of compilation and optimizations such as register allocation and instruction scheduling, this graduate-level course emphasizes on algorithmic infrastructure that goes into building practical optimizing compilers. The course also covers advanced “source-level” program transformations, including automatic parallelization.
  8. May I audit the course?
    Auditing is strongly discouraged, especially in a course like this where a substantial part of your grade is based on the course project and assignments. It is hard to learn about practical compiling without getting involved in the details of at least some aspects of a compiler. If you believe you have strong reasons to audit the course, see the instructor.
  9. How many programming assignments will there be?
    There will be 3-4 programming assignments and one project chosen by you. See policies.
  10. How much will the project count toward my final grade?
    About 30%.
  11. Will the project be done in groups? Can I choose my group partners?
    It will depend on the project and class size. See the course policies for details.
  12. How will the project be graded?
    See the course policies.