# CS110L: Safety in Systems Programming

## 课程简介

- 所属大学：Stanford
- 先修要求：最好有一定的编程背景并对计算机系统有初步的认识。
- 编程语言：Rust
- 课程难度：🌟🌟🌟
- 预计学时：30 小时

在这门课中你将会学习 Rust 这门神奇的语言。

如果你学过 C 并接触过一些系统编程的话，应该对 C 的内存泄漏以及指针的危险有所耳闻，但 C 的底层特性以及高效仍然让它在系统级编程中无法被例如 Java 等自带垃圾收集机制的高级语言所替代。而 Rust 的目标则是希望在 C 的高效基础上，弥补其安全不足的缺点。因此 Rust 在设计之初，就有带有很多系统编程的观点。学习 Rust，也能让你之后能用 C 语言编写出更安全更优雅的系统级代码（例如操作系统等）。

这门课的后半部分关注在并发（concurrency）这一主题上，你将会系统地掌握多进程、多线程、基于事件驱动的并发等若干并发技术，并在第二个 Project 中比较它们各自的优劣。Rust 中 “futures” 的概念非常有趣和优雅，这些基础知识对你后续对计算机系统相关课程的学习很有帮助。另外，清华大学的操统实验 rCore 就是基于 Rust 编写的，具体参见[文档](https://rcore-os.github.io/rCore-Tutorial-Book-v3/index.html)。

## 课程资源

- 课程网站：<https://reberhardt.com/cs110l/spring-2020/>
- 课程视频：<https://youtu.be/j7AQrtLevUE>
- 课程教材：无
- 课程作业：共 6 个 Lab 和 2 个 Project，作业文档和代码框架详见课程网站。其中两个 Project 非常有趣，分别是：
  1. 用 Rust 实现一个类似于 GDB 的 debugger
  2. 用 Rust 实现一个负载均衡器

> [CS 242: Programming Languages, Fall2019](https://stanford-cs242.github.io/f19/) week6 到 week9 关于 Rust 内容的讲解非常细致， 可以作为该课程的讲义补充。 另外， Ryan 在 <https://reberhardt.com/cs110l/spring-2021/> 中补充了 2020 版本缺失的关于 Futures Trait 内容的视频。

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS110L - GitHub](https://github.com/PKUFlyingPig/CS110L) 中。

在2022年 CS110L 没有开源作业源码的背景下，Rust 快速演进导致2020版本课程项目中所使用的库过于老旧。对此，[@fung-hwang](https://github.com/fung-hwang) 尝试进行了适配（时间为2022.11)。其适配过程和作业实现都汇总在 [fung-hwang/CS110L-2020spr - GitHub](https://github.com/fung-hwang/CS110L-2020spr) 中。也许当你开始本课程时 Rust 和这些库又发生了变化，但你仍可以参考并从中获得启发。
