This schedule should be considered tentative and subject to change, at least until it actually takes place!

Week Day Date Notes and readings HW
1 Tue, Aug 25

Intro; Rust integers and strings, functions, expressions

Thu, Aug 27

Structs and enums (incl Option and Result); refs and ownership basics; methods and encapsulation

Fri, Aug 28

Lab on rust setup, basics of cargo, running Rust codes, tests

2 Tue, Sep 01

Stack, heap, global; struct/enum layouts; common heap data structures

Thu, Sep 03

Heap objects and smart pointers; ownership, lifetimes, borrowing

Fri, Sep 04

Lab on reasoning about ownership and borrowing

3 Tue, Sep 08

Option and Result; error handling; polymorphism via traits and generics

Thu, Sep 10

Iterators traits and chaining; impl Trait; dynamic traits and vtables

Fri, Sep 11

Lab on intro to GCP + ug cluster

4 Tue, Sep 15

Profiling and optimization; de-slugging example

Thu, Sep 17

Modern memory architecture

Fri, Sep 18

Lab on profiling tools and memory layout tuning

5 Tue, Sep 22

Shared heap data structures, locality and data structure tuning

Thu, Sep 24

Compilation, linking, loading, build systems; Rust modules and crates

Fri, Sep 25

Lab on foreign function interfaces for C + viewing assembly

6 Tue, Sep 29

The Unix file interface and implementations; pipes; virtualization

Thu, Oct 01

The virtual memory abstraction; segments; mmap and memory-mapped I/O

Fri, Oct 02

Lab on memory-mapped I/O

7 Tue, Oct 06

Processes and IPC (shared memory and Unix-domain sockets); signals

Thu, Oct 08

Processes and IPC cont; processes vs threads

Fri, Oct 09

Lab - process management, building Unix pipelines

8 Tue, Oct 13 Fall break
Thu, Oct 15

Intro to TCP socket programming in Rust

(Bindel away)

Fri, Oct 16

Lab - ping-pong programs and measurement

9 Tue, Oct 20

Message-based concurrent programming in Rust, Actor model

Thu, Oct 22

Rust scoped threads, ownership and closures, Send and Sync traits, etc

Fri, Oct 23

Lab - a small multi-threaded web service

10 Tue, Oct 27

Shared memory concurrent programming, races, Arcs, Mutexes, RwLock

Thu, Oct 29

Atomics; condition variables and monitors

Fri, Oct 30

Lab - practice with shared memory data structures

11 Tue, Nov 03

Conditions for deadlock and livelock

Thu, Nov 05

Multi-threaded network programming - RPC, RESTful APIs

Fri, Nov 06

Lab - building a web service with actix-web

12 Tue, Nov 10

Programming with async/await and futures

Thu, Nov 12

Run-times and work-stealing, dealing with expensive tasks

Fri, Nov 13

Lab - playing with async-await

13 Tue, Nov 17

Behind the scenes with events, select loops, and state machines

(Bindel away)

Thu, Nov 19

Performance, reliability, consistency, and network services

(Bindel away)

Fri, Nov 20

Lab - performance modeling and testing of a sample service

14 Tue, Nov 24

Model checking and testing

Thu, Nov 26 Thanksgiving
Fri, Nov 27 Thanksgiving
15 Tue, Dec 01

Special topics

Thu, Dec 03

Review for final (systems programming)

Fri, Dec 04

Review for final (Rust)