前段时间一个偶然的机会了解到了 Rust 这门语言,随机就被它的Slogon俘获了:
A language empowering everyone to build reliable and efficient software.
Rust能提供:

  • 内存安全
  • 提供和C/C++同级别的高性能
  • 并发、异步、函数编程、强大的宏等特性

并且很重要的一点是整个Rust社区很友好,而且Rust的工程学用起来体验很好。随着了解的越多,被种草的程度就越深,虽然现在学习到的Rust知识还很少(Rust的中文资料相对较少),但基本确定了会一直学习下去的,希望在未来Rust的许多设计思想可以普及开来,比如内存安全的思想、软件工程学等等。

内存安全的意思,可以简单理解为编译通过的程序里不会在运行时出现空指针/悬垂指针。
我相信写过C/C++/JAVA代码的同学都有遇到过空指针异常的,而很多软件漏洞都是内存泄露/空指针造成的,如果你有过在某个深夜排查空指针异常Bug的经历,你就会明白内存安全是多么的具有吸引力!
想象一下你很有自信发布代码,因为你知道不会出现内存安全问题,是不是很期待?(特别是当你涉及交付产品给终端用户的时候就更能体会到这种感觉了,比如一些安全敏感的应用,如金融、医疗等等)

下面,就请跟随我的脚步,来简单的了解一下Rust这门语言,看看它和其他已有的语言和哪些不同,我们可以从这些差异点中进行学习借鉴。

选择Rust的三大理由

首先来看到Rust官网首页列出的选择Rust的三大理由:
why-choose-rust

高性能:Rust是一个没有GC的语言,并且几乎没有运行时开销,可以胜任对性能要求特别高的场景,不会因为GC而导致程序的“暂停”。同时Rust依靠独特的Ownership和Lifetimes的设计,使得其内存利用率极高,不会像JAVA程序那样把所有的内存吃光,相反,使用Rust编写的程序在保持高性能的同时还能做到内存资源占用少,在节省服务器资源的同时可以让我们更有信心应对更严酷的场景。

可靠性:Rust可靠性前面有提到一点,就是内存安全,其实Rust还可以保证线程安全,在进行多线程进行并发/异步的同时,不会出现Data Racing的问题,而Data Racing是其他编程语言中多线程并发绕不过的问题。而这些特性,都得益于Rust丰富的Type系统和Ownership机制。

生产力:上手Rust给我的体验是,这是一门工程学设计良好的语言。集构建、测试、文档、发布于一体的开发工具Cargocrates.io,更简约友好的命名规范,能减少大量样板代码的宏以及库函数。举2个例子来感受一下,函数声明,Go中使用func(){},而Rust则更进一步使用fn(){},也许你会觉得这只是几个字符的差别,但远远不止,它体现出Rust精简的设计思想。比如输出语句,Go中需要先导入import fmt然后再使用fmt.Println(),而Rust强大的宏更进一步无需导入任何包直接使用println!()就可以打印到控制台。诸如此类的还有许多,它体现出的是在开发过程中提升开发人员的效率,工程学友好,Rust刷新了我对这个词的理解。

Rust的发展历史和生态现状

Rust最开始是2006年Graydon Hoare设计的私人项目,其后在2009年Mozilla(Firefox的母公司)决定赞助这个项目,并在2010年首次对外公开。同年,Rust的编译器rustc的源代码由OCaml语言转移到用Rust语言(进行bootstrapping自举),并于2011年实际完成,这个可自我编译的编译器采用了LLVM作为它的后端。rustc的第一个公开版本发布是在2012年1月,Rust在2015年5月15日发布了它的第一个稳定版本Rust 1.0。截止到文本撰写时,Rust发布了它的最新的版本Rust 1.39.0,期待已久的async/await特性终于稳定了。

其中Rust在Mozilla被用来了整个重构重写了FireFox的核心组件,足以证明Rust能够胜任大型软件的开发重构工作。

Rust的发展方面,与之可以比对的是时下流行的Go语言。Rust和Go几乎是同时出来的语言,都是在2009年左右。Go语言伴随着Docker/Keburnetes容器编排、微服务技术潮流的兴起,可以说是增长势头迅猛。反观Rust,每一个特性设计都讨论好久,前期的版本变化太大,很多设计都推倒重来(比如是否要有GC),直到1.0版本出来后才趋于稳定(值得注意的是Golang 1.0的版本发布时间是2012年3月,Rust与之相比晚了3年多才发布1.0版本)。这在一定程度上延缓了Rust的普及,但也因此造就了Rust独特的设计理论、良好的社区文化以及友好的工程学体验。虽然没有Google这个好爹的背书,但是Rust无运行时开销的高性能和无畏安全的线程并发能力、工程学效率,我相信会越来越受到欢迎的。

下面引用Rust的一则报道加以补充:

目前,Rust发展势头正劲。此前,微软安全响应中心探索采用 Rust 的消息引发大量关注,在连续四年蝉联“最受开发者喜爱的编程语言”后,Rust 可能已经从“想要学习的语言”逐渐转变为许多开发者“正在学习的语言”。自从四年前首次发布稳定版以来,它已经得到了广泛的采用,谷歌,微软和 Mozilla 等公司都在使用 Rust。现在,AWS 也向 Rust 伸出了橄榄枝

至于Rust的生态方面,使用Rust几乎能做任何事情:可以编写底层应用操作系统,可以进行Web开发、嵌入式开发,还可以利用WebAssembly将Rust代码运行在浏览器中。来一张官网的图感受一下:
rust-app-develop
关于Rust 2018年的Road Map可以参见:Road Map。不过Rust现在的一些基础库还不够完善,还需要更多的开发者加入添砖加瓦。

未来的互联网,随着5G的普及,注重安全和高性能是必然趋势,而Rust正是这样的一门可以赋予每个人无畏的构建安全高性能的语言。借助Rust,我相信可以摆脱系统对架构集群的过度依赖,构建出安全、高性能、设计简约的轻型系统。下一篇文章,我将继续带领大家,来理解Rust中的数据类型。

最后,附上学习Rust的资源链接: