Syllabus

This is the material planned for this quarter.

All credit goes to Ryan Eberhardt, Armin Namavari, and Julio Ballista for their work developing and refining the contents of this course in the past. I’ll be using their materials with minimal modification.

Lecture material

Memory safety and Rust basics

How do you architect good code?

Avoiding multiprocessing pitfalls

Avoiding multithreading pitfalls

Putting this all into practice: Networked systems

Projects

Simple debugger: Have you ever wondered how GDB works under the hood? You’ll use multiprocessing skills you’ve acquired from CS 110 and CS 110L to implement a simple version of your own!

High-performance server: Optimizing for speed is a key task in large distributed systems. Amazon found that a 0.1s increase in latency reduced sales by 1%, and Google found that an 0.4s increase in latency reduced searches by 0.7%. In this project, you’ll use a variety of techniques from CS 110 and CS 110L to build a fast but robust web server.

Schedule

Updated 2/9/2022

Week 1:

Week 1 exercise: Get familiar with some common C/C++ program analysis tools, including what they don’t catch.

Week 2:

Week 2 exercise: “Hello World!” program to get familiar with basic Rust syntax

Week 3:

Week 3 exercise: Error handling and I/O in Rust: build a basic tool to inspect file descriptors (concurrent with CS110 concepts)

Week 4:

Week 5:

Week 5 exercise: Practice with traits & generics

Project 1 released: Build a debugger in Rust. Working in groups is encouraged! (This may seem intimidating, but we promise that you will have all of the tools to do it.)

Week 6:

Week 7:

Week 7 exercise: “simple farm, but with multithreading” (similar to CS110 assignment)

Project 2 released: Build your own load balancer for a distributed system. (Again, this may sound intimidating, but it’s really not! And you’re invited to work in groups if you’d like to.)

Week 8:

Week 9:

Week 10: