Teaching

Fall 2009

CS 4240 (Compilers, Interpreters, and Program Analyzers)
Similar to the last time I taught it, but without details on lexing and parsing. Project consisted of constructing a compiler for a significant subset of Lua.


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.

CS 1100 (Freshman Leap Seminar)
Freshman Leap is a one-credit course that introduces new CS students to a variety of foundational, motivational and topical subjects for the computationalist. This is realized in two ways: a series of introductions on ThreadsTM, the mechanism by which one obtains a BS in CS in the College of Computing; and a series of small group discussions led by one or more faculty members.

Spring 2008

CS 8001 (Computer Architecture Seminar)

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).

Student Comments

plants