Date Topics Skills Module Videos and Slides Worksheet
  • Administrativa
  • Introduction
  • Syntax
  • Formal Semantics
slide set 1 (animated)
  • Memory
  • 2OPM Assembly
  • The UNIX Run-Time System
  • Foundations of Programming Language Implementations
  • Compiler Frontends
Foundations: Memory (slides)
2OPM Assembly (1/3): Introduction (slides)
2OPM Assembly (2/3): Advanced Operations (slides)
The UNIX Run-Time System (slides)
2OPM Assembly (3/3): Subroutines (slides)
Overview: Executing High-Level Languages (slides)
Overview: Compilers (slides)
  • Scopes and Bindings
  • Variables
  • Expressions
  • Control Structures
  • Statements (1/2)
Names and Bindings (slides)
Names and Scopes (slides)
Variables (slides)
Expressions (slides)
Statements and Assignments (slides)
Control Structures (slides)
  • Iterative Control Structures
  • Subroutines
  • Parameter Passing
  • Closures
Iterative Control Structures (slides)
Implementing Iterative Control Structures (slides)
Subprograms (slides)
Nested Subprograms (slides)
Parameter Passing (slides)
Implementing Parameter Passing (slides)
Closures and Thunks (slides)
  • Types: Foundations
  • Ad-Hoc Polymorphism
  • Parametric Polymorphism
Types: Introduction (slides)
Primitive Types (slides)
Product Types (slides)
Function Types (slides)
Type-Checking (slides)
Sum Types (slides)
Polymorphism (slides)
Parametric Polymorphism (slides)
Reference Types (slides)
Container Types (slides)
  • Object-Orientation
  • Subtyping
  • Type Inference
Type Inference (slides)
Implementing Dynamic Typing (slides)
Boxing and Unboxing (slides)
Object Orientation (slides)
Inheritance (slides)
Subtyping (slides)
Dynamic Dispatch (slides)
Dynamic Dispatch via Virtual Method Tables (slides)
Dynamic Dispatch via Selector Tables (slides)
  • Advanced Subtyping
  • Automatic Memory Management
Type-Safe Subtyping and Object Orientation (slides)
Variance of Type Parameters (slides)
Automatic Memory Management (slides)
Implementing Tracing Garbage Collectors (slides)
Copying Garbage Collection (slides)
Generational Garbage Collection (slides)
  • Static Program Analysis
  • Intermediate Representations
  • Data Flow Analysis
Optimisation and Static Analysis (slides)
Overview: Program Analysis (slides)
Type and Effect Systems (slides)
Overview: Data Flow Analysis (slides)
Basic Intermediate Representations (slides)
Foundations of Data Flow Analysis (slides)
Computing Data Flow Analysis (slides)
  • Data Flow Analysis: Distributive Frameworks
  • Call Graphs
  • Qualities of Program Analysis
  • Interprocedural Data Flow Analysis
  • Procedure Summaries
Data Flow Analysis: Precision (slides)
Data Flow Analysis: Distributive Frameworks (slides)
Qualities of Program Analysis (slides)
Call Graphs (slides)
Data Flow Analysis: Interprocedural (slides)
Data Flow Analysis: Procedure Summaries (slides)
  • Points-To Analysis
  • Lattices
Points-To Analysis: Motivation (slides)
Points-To Analysis: Introduction (slides)
Steensgaard's Points-To Analysis (slides)
Andersen's Points-To Analysis (slides)
Lattice Theory (slides)
  • Abstract Interpretation
  • Applications of Static Analysis
Array-out-of-Bounds Checking (slides)
Abstract Interpretation (slides)
Abstract Interpretation: Galois Connections (slides)
Catalogue of Galois Connections (slides)
Refactoring (slides)
Static Bug Checking (slides)
  • Dynamic Program Analysis
  • Applications of Program Analysis
Dynamic Program Analysis (slides)
Events, Measurements, Samples (slides)
Measurement Challenges (slides)
Performance Counters (slides)
Just-In-Time Compilation (slides)
Dynamic Compilation and Optimisation (slides)
Profile-Directed Optimisation (slides)
  • Advanced Dynamic Optimisations
  • Reflection
  • Meta-Programming
On-Stack Replacement (slides)
Guarded Inlining (slides)
Combining Static & Dynamic Analysis (slides)
Reflection (slides)
Meta-Programming (slides)
Meta-Programming in Racket (slides)
  • Continuations
  • Exceptions