Guanzhou Hu

Feeling comfortably numb

Find me on GitHub
https://github.com/josehu07

CV | LinkedIn | Google Scholar

guanzhou.hu (at) wisc.edu
josehu (at) cs.wisc.edu

To all my loved ones and my friends ♥
GitHub Pages — Theme by orderedlist

About the Design of the Rust Language and Its Pros & Cons

03 Sep 2019 - Guanzhou Hu

Rust 作为一门新兴的 system programming 语言,其设计参考了各 system programming 语言的优劣势,以安全、同时快速为目标,开创了 compile-time 实现几乎一切安全检查的新颖的编程语言模式。可以说,Rust 承载了作者 Graydon Hoare 和新互联网时代逐渐关注起安全的众多开发者们的理想,也吸引了如 M 校前沿系统研究者们的关注(参考 PDOS 博士生 Jon Gjengset)。

对 Rust 的一些值得一看的评论

  1. “对 Rust 语言的分析”:https://www.yinwang.org/blog-cn/2016/09/18/rust
  2. “回应王垠的《对 Rust 语言的分析》”:https://www.jianshu.com/p/31087b6b2b86
  3. “怎样看待 Rust 语言”:https://www.zhihu.com/question/20032903

Rust 最与众不同的特征 - Memory Management

Rust 语言在 system programming 领域之所以显得特别与众不同,最重要的一点就是整个 Memory Management 环节的设计:基于 Ownership + Borrowing + Lifetime 的 compile-time 内存管理。之所以说其与众不同,是因为这与其他任何传统 system programming 语言内存管理的机制选择完全不同:

而 Rust 也是在 MM 这一方面才体现出其最重要的设计理念:安全,同时快速。即能在编译时检查出几乎所有安全问题,保证得到的代码 run-time error 尽可能少(所以才有 Rust program 只要通过了编译就基本是语义正确的笑言),同时又没有 GC 等等的运行时 overhead,对于编写 system-level 的项目来说是一种重大的进步。当然,这种选择也带来一些弊端,下文也会提及。

Rust 的优点

个人认为 Rust 有如下 5 条优点,是作为最新的 system programming 语言,参考已有语言的缺陷和自己的哲学,综合而来的:

  1. 基于 Ownership、Borrowing、Lifetime 的内存管理机制,如上节所述,是 Rust 最独特的特征,是实现 compile-time 安全性、尽可能减少 run-time error,同时保证运行高效的根基
  2. 基于 Option & Result 的空值和错误处理,保证了代码清晰的情况下,对空值和错误全面而安全地处理,也是 Rust 减少 run-time error 的重要保障之一
  3. 基于 Traits 的简洁而强大的 Generic 范型系统,语法简洁、清晰,没有冗余(带上复杂 Lifetime 之后似乎称不上清晰了…,但还是好过很多语言),也是 Rust 减少 run-time error 的重要保障之一
  4. 优秀的 Macro 宏定义机制,作为一门 system programming 语言,实现了相对比较强大的 meta-programming 能力,使代码简洁易懂,减少常用功能的代码冗余
  5. 完整、易用的工具链 & 凝聚力异常高的社区,使用 Cargo 做项目依赖管理,统一管理的社区 Crates hub(https://crates.io/),以及清晰的教程、完整而易读的文档

可以说,Rust 是一个好学生,学习到已有 system language 的各种不足,如 C/C++ 虽自由却让人头疼的 segfaults,Java 饱受诟病的 VM 和运行时 GC 的低效等,从而创造出一种新的语言设计哲学,走出一条与众不同的个性化的路线。正因如此,Rust 虽然不简单、领域相对小众,也能长居 Stackoverflow 最受喜爱的语言调查的榜首1

Rust 的缺点

同样的,好学生往往有自己的偏执的一面,不会是完美的,也有许多的缺陷。

References

Please comment below anything you wanna say! 😉