CS343 - Advanced Topics in Compilers

Spring 2010

Class Abstract

Compiler research for a long time was moribund, stuck on narrow topics such as register allocation and instruction scheduling. In contrast, the last decade has seen an explosion of interesting work using compilers to accomplish something cool. This class will cover a selection of such research papers, ranging across static and dynamic bug finding, binary analysis, reverse engineering, programming via sketching, and other topics that seem worth knowing. The class is discussion oriented. You will read (typically) one paper before each class thoroughly, which will be dissected during the class period. By the end of the course you will be able to read a technical paper and extract its essence as well as noticing when the authors have sinned by omission in their experiments or wording.

Papers will be somewhat bimodal. We will often start with an older one to set the stage (since they are simpler), and then a later one so you can see what the current thinking is.

In addition, students will form groups of 1-3 and do a final project of their design which they will present.

Staff | Logistics | Schedule



Staff


Instructor

 

Dawson Engler

Office

Gates 314

Office hours

TBD


TA

 

Suhabe Bugrara

Office

Gates 324

Office hours

TBD


Logistics

Lectures

Tues, Thurs 2:15 to 3:30 in 380-380C

Prerequisites

cs243 or permission from instructor

Staff mailing list

cs343-spr0910-staff@lists.stanford.edu

Midterm

May 11th

Project Presentations

June 9th

Final exam

June 1st


Tentative Schedule

Date Topic Lecture notes
Mar 30 (Tue) Checking System Rules Using System-Specific Programmer-Written Compiler Extensions pdf
April 1 (Thu) A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World pdf
April 6 (Tue) A Static Analyzer for Finding Dynamic Programming Errors
Supplemental Reading: User Interaction Issues in Defect Detection Tools
Supplemental Reading: Analysis is Necessary, but far from Sufficient
April 8 (Thu) Guest Lecture: Overflow Checking in Firefox, Brian Hackett, Mozilla pdf
April 13 (Tue) Purify: Fast Detection of Memory Leaks and Access Errors
April 15 (Thu) ATOM: A System for Building Customized Program Analysis Tools
ATOM Source Files
April 20 (Tue) Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation
April 22 (Thu) Dynamo: A Transparent Dynamic Optimization System
April 27 (Tue) Guest Lecture: Failure Oblivious Computing, Martin Rinard, MIT
April 29 (Thu) Optional Reading: A Practical System for Intermodule Code Optimization at Link-Time
Efficient Implementation of the Smalltalk-80 System
DPF: Fast, Flexible Message Demultiplexing using Dynamic Code Generation
May 4 (Tue) Design of the Java HotSpot client compiler for Java 6
May 6 (Thu) Guest Lecture: The GO Programming Language, Russ Cox, Google
May 11 (Tue) Midterm
May 13 (Thu) Guest Lecture: A Closer Look at GPUs, Kayvon Fatahalian, Stanford
May 18 (Tue) Superoptimizer: a look at the smallest program
Optimizing an ANSI C interpreter with superoperators
May 20 (Thu) Guest Lecture: Sequoia: Programming the Memory Hierarchy
Compilation for Explicitly Managed Memory Hierarchies, Alex Aiken, Stanford
May 25 (Tue) Native Client: A Sandbox for Portable, Untrusted x86 Native Code
May 27 (Thu)
June 1 (Tue)

Honor Code