从2015年Rust 发布1.0 版本以来,Rust 语言已经被广泛应用于各大公司及诸多领域。每一年,Rust 社区都会聚集在一起制订路线图,规划Rust 未来的发展。在2018 年,Rust 团队推出了新的大版本(edition)计划:
这个大版本和语义化版本是正交的。大版本的意义在于方便Rust 自身的进化。例如,想在Rust 中引入新的关键字try,但是如果只有语义化版本这一个维度,新的关键字可能会破坏现有的Rust 生态系统。所以,就需要引入一个大版本,在Rust 2018 版本中引入try 关键字。开发者选择“edition=2018”,就代表了开发者接受Rust 的这种内部变化,接受新的关键字try。大版本升级的只是表面的语法功能,Rust 的核心概念是不会改变的。
Rust 的编译器可以方便地管理版本的兼容性:
此外,大版本可能是每三年发布一次,那么下一次发布就是在2021 年。不过Rust 团队对此还保留修改权。
为了便于学习,笔者针对Rust 语言概念的层次结构进行了梳理,如下图所示。
上图将Rust 语言中的概念分成了4 个层次。
最底层是安全内存管理层,该层主要是涉及内存管理相关的概念。
倒数第二层是类型系统层,该层起到承上启下的作用。类型系统层承载了上层的所有权系统语义和混合编程范式,赋予了Rust语言高级的抽象表达能力和安全性。同时,还保留了对底层代码执行、数据表示和内存分配等操作的控制能力。
对于开发者而言,只需要掌握类型系统、所有权系统和混合式编程范式即可,不需要操心底层的内存是否安全,因为有编译器和类型系统帮忙处理。在这个语言架构之下,人和编译器共用同一套“心智模型”,这样可以极大地保证系统的安全和健壮性。
在后续的章节中,会依照该语言架构对Rust 语言自底向上进行分层探索,以帮助读者对Rust 语言的概念融会贯通。
Rust 语言自身作为一个开源项目,也是现代开源软件中的一颗璀璨的明珠。
在Rust 之前诞生的所有语言,都仅仅用于商用开发,但是Rust 语言改变了这一状况。对于Rust 语言来说,Rust 开源社区也是语言的一部分。同时,Rust 语言也是属于社区的。
Rust 团队由Mozilla 和非Mozilla 成员组成,截止2018年7月,Rust 项目贡献者已经超过了1900 人。Rust 团队分为核心组和其他领域工作组,针对Rust 2018 的目标,Rust 团队被分为了嵌入式工作组、CLI 工作组、网络工作组以及WebAssembly 工作组,另外还有生态系统工作组和社区工作组等。
这些领域中的设计都会先经过一个RFC 流程,对于一些不需要经过RFC流程的更改,只需要给Rust 项目库提交PullRequest 即可。所有的过程都是对社区透明的,并且贡献者都可参与评审,当然,最终决策权归核心组及相关领域工作组所有。
Rust 团队维护三个发行分支:稳定版(Stable)、测试版(Beta)和开发版(Nightly)。其中稳定版和测试版每6 周发布一次。标记为不稳定(Unstable)和特性开关(Feature Gate)的语言特性或标准库特性只能在开发版中使用。
根据社区的流行度调查报告,截至2018 年7 月,由Pull Request 统计的GitHub Octoverse报告显示,Rust 语言的总PR 数排名第15 位,呈上升趋势。从活跃的项目数来看,Rust 语言一共有2604 个活跃项目。
目前在商业领域,Rust 的重磅商业用户增长迅速,其中包括:
除了以上罗列的公司,还有很多其他公司,可以在官方Rust 之友页面上找到,包括百度、三星、Mozilla 等。Rust 覆盖了数据库、游戏、云计算、安全、科学、医疗保健和区块链等领域,相关的工作岗位越来越多。Rust 的前景越来越明朗,未来Rust 将大有可为。
在进一步学习之前,我们有必要了解一下Rust 代码是如何执行的。Rust是跨平台语言,一次编译,到处运行,这得益于LLVM。Rust 编译器是一个LLVM 编译前端,它将代码编译为LLVM IR,然后经过LLVM 编译为相应的平台目标。
Rust 源码经过分词和解析,生成AST(抽象语法树)。然后把AST 进一步简化处理为HIR(High-levelIR),目的是让编译器更方便地做类型检查。HIR 会进一步被编译为MIR(Middle IR),这是一种中间表示,它在Rust1.12 版本中被引入,主要用于以下目的。
最终,MIR 会被翻译为LLVM IR,然后被LLVM 的处理编译为能在各个平台上运行的目标机器码。
Rust 的产生看似偶然,其实是必然。未来的互联网注重安全和高性能是必然的趋势。GH看到了这一点,Mozilla 也看到了这一点,所以两者才能一拍即合,创造出Rust。
Rust 从2006 年诞生之日开始,目标就很明确——追求安全、并发和高性能的现代系统级编程语言。为了达成这一目标,Rust 语言遵循着内存安全、零成本抽象和实用性三大设计哲学。借助现代化的类型系统,赋予了Rust 语言高级的抽象表达能力,与此同时又保留了对底层的控制能力。开发者和Rust 编译器共享着同一套“心智模型”,相互信任,相互协作,最大化地保证系统的安全和健壮性。
Rust 语言有别于传统语言的另一点在于,其将开源社区视为语言的一部分。Rust 本身就是开源项目中的典范,非常值得学习。希望读者可以建立对Rust 语言的系统性认知,在以后的学习中起到提纲挈领的作用,不至于迷失在细节中。