初识Rust语言
起因:公司里面看到一个关于Rust的分享,好奇听了一下。本文记录一些感兴趣的部分以及我的一些评论。
1. Rust的复合类型组合方式
a. struct {} / tuple ()
在几乎所有语言中都会见到的组合类型,没什么好说。
b. enum {}
枚举,同时也是union类型。
2. 关于null与Void
不支持null(认为是不好的设计),nullable类型实际上是 notnull类型 + None 的union类型。(即Option)
使用空enum {}的不可实例化特性来代表无返回。(对于写程序的人意义不大,可能是为了增强类型系统的一致性,便于编译器的实现?)
3. Rust的内存管理机制
ownership、move、borrow、lifetime
将“部分场景”下C++的内存管理最佳实践内化为语言的基本特性(即你必须时刻关注所有变量的生命周期是受到什么控制的)。但是显然Rust也没有办法使用限制如此强烈的内存管理机制来支持所有场景,于是使用smartpointers、unsafe来支持剩下的场景。前面的想法有多迷人,后面的补丁就有多遗憾。
4. 默认immutable
符合我个人的习惯,写C++的时候每见变量必先考虑:1. 能不能const,2. 能不能传引用。
5. share(borrow) immutable 不兼容
这个特性没有详细了解,smartpointers与此相关。
6. buffer overflow的防御
运行时特性,有额外开销。属于安全-性能间的tradeoff。
7. system language(可以用来写操作系统,意思展开如下)
a. 依赖
i. 不依赖虚拟机/可以编译到主流架构。
ii. 不必须依赖标准库(当然标准库不依赖于操作系统接口也可以)。
iii. 可内嵌汇编。
b. 高性能(编译优化)
i. 编译器:编译器的优化能力很重要,这个其实并不是语言本身的功劳,看具体编译器实现。
ii. 静态信息:语言提供的静态信息的丰富程度和语言标准(比如C的UB)会影响编译器优化的上限。
iii. 动态需求:语言提供的动态能力越丰富,额外开销越多,比如上面提到的越界检查,再比如其他语言的自省、动态类型等。
iv. 原生结构优化:集合类、迭代器等的原生支持可以让编译器对特定代码做更好的优化。否则程序行为依赖第三方代码的具体实现则难以做优化。
8. cargo包管理
暂不评论。
总结:Rust对我来说总体属于有启发性但是没有达到革命性的层次,使用意愿中等。另外让我回想起了王垠的《对Rust语言的分析》:)。

浙公网安备 33010602011771号