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
- Nice class! Practical homework made me to understand the lecture clearly. Paper presentions let students exposes to cutting-edge tech. in compiler fields. I look forward to your next class 8803.
- The class was very constructive and organized. The professor made things interested for students while teaching. The assignment and the project was very helpful. Overall that was my best class in this semester. I enjoyed it a lot.
- Enjoyed the Course a Lot
- The course & the instructor assumed a lot of prior knowledge from the student, and that made the learning curve pretty steep. The instructor did not seem to encourage interested students in learning the content and coming up to speed with the rest. This might have hampered the learning process in general & the enthusiasm of earnest students. Sometimes, things went too fast and the matter was difficult to comprehend. Having said that, it was in all, a course worth taking, and I definitely learnt a lot. The instructor constantly solicited feedback and was willing to make changes. Many students in the class were interested in compiler related research by the end of the term.
- The course was really hard for me but I think this was the best instructor. The material is hard and students are often confused. Having someone like Nate who is willing to assist students was awesome. I wouldn''t have wanted any other prof. to teach this course.
