Rust 速成课/概览

各位 Rust 的朋友们大家好, 我是 Yeah 老师. 那, 其实我想做 Rust 相关的课程也有一段时间了, 可能是在 2018 年左右, 呵呵, 可是后来, 因为 Rust 语言当时比较小众, 课程就不容易申请下来. 目前视频课程已经上线慕课: https://www.imooc.com/learn/1301.

Rust 在 2020 年

那, 今年(2020 年) Rust 其实发生了蛮大的几件事, 很有可能会影响 Rust 的未来很长一段时间的发展, 我们先来缕缕今年的大事件吧!

今年 1 月份和 8 月份的时候, Mozilla 裁员近三分之一, 他们裁剪了专门为 Rust 服务的开发人员以及 Servo 团队. Rust 这门语言最早是 Mozilla 名下的项目, 之后在 2015 年的时候, 随着 Rust 1.0 的发布, Rust 开始独立于 Mozilla 组织, 虽然说是独立的组织啦, 但是 Mozilla 一直是 Rust 金主. 这次裁员给 Rust 项目本身带来了很多不确定性和困惑, 但是就像一句古话所说, 塞翁失马, 焉知非福, 这次裁员带来的资金短缺很有可能永久改变 Rust: 变化就发生在几个月之后.

上面的话题有些不那么令人开心, 接下来看看振奋人心的消息吧! 从去年九月开始, Linux 内核维护者 Greg 表示愿意接受用 Rust 开发 Linux 驱动, 到今年七月的时候, Linus Torvalds 正式回应称可以默认启用 Rust 支持!

img

时间到了 2020 年的 12 月, AWS 也就是亚马逊, 全球最大的云计算商, 聘请了 Rust 的联合负责人 Felix Klock, AWS 开源团队表达了对 Rust 的热情, 并因此赞助了该项目, 同时表示他们甚至"开始雇用 Rust 和 Tokio 提交者, 以确保他们有必要的时间和资源来进一步改进 Rust".

为什么要学 Rust

我们必须面对一个问题, 为什么我要马上去学 Rust?

从行业角度讲, Rust 的市场目前还是蓝海, 它是一种没有恶性竞争, 充满利润和诱惑的卖方市场. 一个亘古不变的真理, 任何一个技术都有红利期, 而红利只有少数人能吃到. 如果你正确的学习它, 我可以保证, 你将获得很多工作机会.

从自身角度讲, 我觉得, 一个合格的计算机工程师至少得掌握 2 门语言, 一门高级语言和一门低级语言. 高级语言有很多, Java, Python, Golang, JavaScript 我觉得都 OK, 它们是帮助你实现功能的工具. 对于低级语言来讲, 它们是帮助你学习和真正理解"计算机术"的工具. 与大多数人的认知相反, 我认为计算机并不是一个快速变化的行业, 快速变化的是技术的表现形式而非技术本身. 我可以举一个简单的例子, 就是编译器, 自从半个世纪前编译器的基本原理被确定下来后, 理论方面的知识已经很少有大的更新了. 学习低级语言的过程就是学习技术本身的过程. 虽然这是门 Rust 课程啦, 但我是必须必须要说明, Rust 作为一门低级语言很不错, 但是 C 语言和汇编语言同样很好.

Rust 的特点

OK, 似乎扯得有点远了, 那我们回到正题吧. 我们聊聊 Rust 的特点. Rust 是一种系统编程语言, 所以我们就不拿它来对比类似 Java 这种高级语言了, 毕竟这有点欺负人了. 那 Rust 的比较对象, 我就暂时选定 C++ 好了, 希望 C++ 爱好者不要打我啊.

  • 惊人的运行速度. 这其实是一句废话, 所有系统编程语言的速度都很惊人.
  • 保证内存安全. 悬挂指针? 内存越界? 统统不存在的好吧.
  • 线程安全. 听说你两个线程可以同时读写一个对象? 抱歉, Rust 里这种代码根本不会被编译通过.
  • 泛型. 比 C++ 的 Template 不知道高到哪里去了.
  • 模式匹配.
  • 类型推断. C++ 目前也有, 但个人体感不如 Rust.
  • 高效的 C 绑定. 这意味着可以在 Rust 中高效调用 C 代码.

课程安排

这门课程主要是给对 Rust 感兴趣的人开设的入门课, 我会通过两个小时左右的时间, 介绍 Rust 的基本语法和概念, 在完成本课程后, 读者应当能阅读简单的 Rust 代码并使用 Rust 解决一些经典问题, 例如实现二叉树, 链表, 排序等.

我需要给各位打一剂预防针, 我自己入门 Rust 整整花了一个月时间, 到真正使用 Rust 写复杂的系统应用花了 3 个月时间. Rust 是一门学习曲线十分陡峭的语言, 本门课程的目的是使那个悬崖尽可能来的晚一点, 让读者可以在入门阶段先经历一小段平滑的上升期, 感受到 Rust 的乐趣. 课程大体以介绍例子和编写简单的 Demo 为主, 无论你的基础水平如何, 都能从中找到相应的乐趣.