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