Teaching
Fall 2008
CS 4240 (Compilers, Interpreters and Program Analyzers)
This course will (probably) cover lexing, parsing, and
some elementary code generation techniques. There will
likely be more of a focus on applications of the course
material to the internet than previous semesters, which
focused strictly on generating assembly
code. Additionally, programming assignment will be done
using an imperative programming language (e.g., C++ or
Java) instead of the functional language (ML) that was
previously used. Assumed prerequisites are good
programming/debugging skills and knowledge of basic data
structures (queues, hash tables, etc.).
CS 8803 (Dynamic Compilation and Managed Runtimes)
We will look at the design, challenges, and opportunities
of dynamic compilation and virtual machines, primarily
from the perspective of program optimization. Topics
include interpretation and translation techniques, case
studies of actual dynamic compilers in use (e.g., Java
VMs, Microsoft's Common Language Interface, and Adobe's
Flash Player), and architectural support to enhance
dynamic translation. We will also cover several recent
research papers on these topics and students will be
expected to complete a significant course
project. Prerequisites: knowledge of computer architecture
(caching, branch prediction, virtual memory), and some
experience with assembly code (any architecture). Compiler
experience (i.e., 6241) will definitely help, but I will
not assume this prior knowledge.
Spring 2008
CS 6241 (Compiler Design)
This course covers modern backend compilation topics such as control and dataflow analysis, region formation, predication, scheduling (cyclic and acyclic), and a survey of modern research challenges in compilation (e.g., parallelization, memory system optimization, handling unusual architectures).
CS 8001 (Computer Architecture Seminar)
