EECS 3/495:

Concurrent Programming in Rust

Syllabus – Winter 2016

Tech M120, TuTh, 11:00–12:20 PM

Instructor & office hours

Jesse Tov jesse@eecs Ford 2-215 TuTh 9:30–10:50, Th 15:00-17:00, and gladly by appointment

General information

Abstract

Modern, safe programming languages such as Java and Python have become increasingly accepted for application-level programming, but for systems programming, which often requires precise, low-level control of system resources, programmers still turn to C and C++. The new programming language Rust, under development by Mozilla, promises the best of both worlds: the type safety of Java with the speed and expressiveness of C++. Through discussions, lectures, and programming exercises, students will learn how to program in Rust and to use its resource ownership model effectively. Rust is especially well suited for our particular focus, concurrent programming, so students will use Rust as a vehicle for exploring both classic concurrency problems and more contemporary concerns.

Prerequisites

This course assumes proficiency in C++ and some programming maturity.

Exams

We will have one in-class examination on Thursday, February 11.

There will be no final exam.

Resources

Information

There is no required textbook. However, you are likely to find some online references useful:

Please post your questions on our Piazza discussion board.

Software

We will use Rust 1.6, currently in beta. (Be sure to get 1.6, not 1.5.) On OS X or Linux, you can install Rust beta with a single shell command (which I alias as rustup):

    curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=beta

We also will use C++ 2014, the current version of the C++ programming language; earlier versions of C++ may not work for all the code we write. The instructor will be using CLion, a cross-platform IDE. CLion ordinarily costs money, but student licenses are available for free. Any other conforming C++14 toolchain should work.

Class schedule

This table specifies the course schedule; topics are tentative.

January
TuTh
5 Introduction [rainfall spec] 7 Rust basics
12 Rust basics, continued 14 Rainfall solution [code]
19 Mutual exclusion [slides] 21 More mutual exclusion [slides]
26 Ownership and borrowing [slides]; 28 ...continued... [code]
February
TuTh
2 Concurrent objects and linearizability [slides] 4 Concurrency in Rust [code]
9 Concurrency in Rust, continued [code] 11 Concurrency in Rust, continued [code]
16 Spin locks 18 A better concurrent list-set [slides, code]
23 A lock-free list-set [code] 25 Presentation prep
March
TuTh
1 Final presentations 3 Final presentations
8 Final presentations 10 TBA

Course policies

Collaboration and academic integrity

You may not collaborate with anyone on the exam. You may not use any electronic tools, including phones, tablets, netbooks, laptops, desktop computers, etc. If in doubt, ask the instructor.

Most homework assignments will be completed with a partner or team. You should work with your official partner or team, as specified, on homework assignments. You may discuss your work with anyone, but all work you submit must yours, or when appropriate, your team’s. However, the best place to discuss anything related to the course is on our Piazza discussion board. Of course, you may always ask the instructor for help; when working with a partner, it’s best to ask for help together.

Students who cheat will be reported to the appropriate dean.

If you are unclear on any of these policies, please ask the instructor.

Homework

In general, you should submit your homework according to the instructions on the web page for the individual assignments.

Late work

Acceptance of late work is at the discretion of the instructor. Generally, I would rather have you do the work and learn something rather than skip it.

Grades

Your grade will be based on your performance on four programming assignments (15% each), one final project (35%), and class participation (5%). There will be no final exam.

The mapping of raw point totals to letter grades is at the discretion of the instructor.