由来

“Rust”最初是Mozilla公司的 Graydon Hoare的私人项目。
2009年Mozilla开始赞助此项目,并有若干 Mozilla 员工参与 Rust 语言的设计和研发。
2013年8月,Graydon Hoare卸任 Rust 技术负责人职位,由Brian Anderson接任。
2015年5月15日,Rust 1.0版本正式发布。
2017年9月,Brian Anderson离开Mozilla,项目核心团队由 Aaron Turon和 Niko Matsakis接管共同领导,另外,Aaron Turon是 Mozilla的Rust团队的负责人。

Rust的目标是打造运行快且可靠的语言。

Rust连续5年,在Stack Overflow开发者「最受喜爱编程语言」评选中获得第一名。

语言特性

特别注重安全和稳定性的语言

高性能

是指语言本身提供的高性能。除了语言外还会有很多因素营销运行和响应速度,比如服务器配置,网络带宽,架构设计。

它是没有运行时的。运行时是指在运行时才将源代码或中间码,通过解释器翻译成机器码执行。Rust的是编译型语言,编译成机器码,运行时直接运行。C/C++编译型,Java,Python,PHP等属于运行时。Java也有编译过程,但生成的是中间码。Python和PHP没有编译过程,但实际上在运行时也会生成中间码,减少解释时间。拥有解释器的最大优点就在于跨平台,一份源代码,可以在各种平台上运行,只要解释器支持就可以。那Rust怎么解决这个问题?编译器跨平台,代码还是一份,可以编译成不同平台机器码。Go语言是这种解决方案。C/C++也是如此,但比较麻烦的是代码层面可能需要做兼容性处理。编译型语言执行时,就不要需要系统安装相对应的语言解释环境啦,运行速度也快一大截。

它是无GC的。早期的语言都是无GC的,在内存管理方面,完全是靠人为去申请和释放。比如C/C++。但这暴露了一个问题,由于开发人员素质良莠不齐,以及相互协作的不充分,经常出现内存处理不当,导致程序内存溢出,出现安全漏洞、程序崩溃等问题,虽然现在已经很很多好的经验和工程方法避免这类事情发生,但依然会时长发生。在后来的高级语言、解释性语言中,都加入了GC垃圾回收机制,比如Java,Go,Python,PHP。开发人员不需要关注内存的释放,会由系统来进行处理,将判定不在使用的内存进行回收,交还给操作系统。但由于交给解释器去处理,导致影响了程序运行速度。那Rust没有GC机制,运行速度是会加快,那如何解决内存回收的问题?Rust把这个问题再编译阶段进行了解决,在语言层面增加所有权的概念,使用类型的生命周期和引用借用进行约束,解决了这个问题。这个是与其它语言很大不同的地方,是Rust解决安全问题的一个最重要的设计思想。

可靠性

这里也是指语言方面的可靠性。除了语言方面,还会有其他方面影响程序运行的稳定性。比如框架的设计,架构的设计,是否有好的扩展性,监控是否合理,能够及时预警。出现异常情况,如何保证对外的服务正常。比如线路出现问题,如何切换;服务器出问题如何处理;第三方出问题如何解决。

丰富的类型和所有权机制,保证内存方面是安全的,保证多线程方面是安全的。在编译时,进行检查,保证生成的机器码在运行时不会出现内存访问、泄漏和竞争的问题。

类型包括基础类型和集合数据类型,以及自定义的数据类型。通过泛型和trait特性,对类型进行抽象,保证了类型是Rust语言的基础,同时也可以进行任何概念的抽象。

所有权机制是类型实例的所有权,因此整个语言也是安全的,可靠的。

生产力

开发效率。开发效率有很多影响因素,语言的语法、包管理、丰富的第三方库,规范,框架,测试,出色的文档,友好的编译器和清晰的错误提示信息,构建工具,社区支持等。

语言语法来看,是综合了现代比较流行语言的使用特点,尤其是函数式编程方面。在表达语义和使用方面,还是非常清晰和简洁的。但学习的时候,还是要抛开原有语言的经验,去学习Rust语言类型,表达式,分支,循环这些基础的设计思路,才能更好的理解,灵活运用。

包管理和构建工具方面,Rust使用了Cargo工具来进行管理。非常方便好用。从开发调式、编译构建,到单元集成测试,再到依赖包管理,包发布,都可以用Cargo进行,不仅提升开发效率,工程上也更加规范。

出色的文档
包括官方的语言入门文档,包括标准库文档,都非常易读和理解。

第三方库也非常丰富
由于Rust语言的流行,吸引了众多开发者,https://crates.io/ 中已经有4W多个crate,涉及类比包括有命令行、非标准库、开发工具、API绑定、网络编程、web编程、数据结构、嵌入式开发、异步、算法等。

社区支持也尤其重要
遇到一些未知问题,可以及时反馈和修正。
https://users.rust-lang.org/
Rust语言本身就是在社区基础上发展起来的,每个语言的特点、发展方便,都可以在社区进行讨论。寻求帮助或者提出建议都可以在社区发帖讨论。

应用领域

Rust应用在很多领域。由于它是高性能和可靠的,因此可以用在基础设施上,比如我们现在经常见到的一些C/C++编写的软件,Nginx,MySQL,也可以写计算密集型的处理,比如图片、音视频的处理、编解码的处理,也可以写web、游戏等方面的应用,也可以写网络方面的应用,也可以写嵌入式方面的应用,也可以写区块链这样的应用。

命令行

ripgrep

Database

noria
tikv

Cryptocurrencies

libra
Polkadot

web

Plume
lemmy

游戏

zemeroth
Veloren

社区的重点发展方向

命令行
WebAssembly
网络(web)
嵌入式

发表评论

电子邮件地址不会被公开。 必填项已用*标注