Rust语言

Rust是一门系统编程语言 ,专注于安全 ,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似 ,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。 Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。
Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续四年(2016,2017,2018,2019)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。
中文名Rust语言外文名The Rust Programming Language性 质注重安全、性能和并发性开发者Mozilla最新版本2020年6月18日 1.44.1

设计特色

Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言 ,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。

标准Rust性能

标准Rust性能与标准C++性能不相上下。

语法

Rust的具体语法和CC++类似,都是由花括号限定代码块,还有一样的控制流关键字,例如if,else,while,和for。然而也并非所有的C或者C++关键字被实现了。某些Rust函数(比如关键字match用于模式匹配)对于那些精通这些语言的人就没那么熟悉了。尽管与C/C++极其相似,Rust在深层语法上跟元语言家族的语言像是Haskell更接近。基本上一个函数体的每个部分都是表达式,甚至是控制流操作符。例如,那个普通的if表达式也取代了C的三元表达式。一个函数不需要以return表达式结束,在这种情况下函数最后的表达式就是返回值。

内存安全

Rust语言系统设计于保证内存安全,它在安全代码里不允许空指针,悬垂指针和数据竞争。数值只能用一系列固定形式来初始化,要求所有输入已经被初始化。在其它语言中复制函数指针或者有效或者为空,比如在链表和二叉树等数据结构中,Rust核心库提供Option类型,用来测试指针是否有值。Rust同时引入添加语法来管理生命周期,而且编译器通过租借检查器来说明相关理由。

内存管理

Rust不像Go,Java以及.NET Framework那样使用自动垃圾回收系统。不同的是Rust通过RAII来管理内存和资源,还可选引用计数。Rust以低开销提供资源确定性管理。Rust也支持值的栈分配并不表现暗箱。
Rust里也有引用概念(用&符号),不包含运行时引用计数。使得此类指针的安全性已获得租用检查器的编译时验证,阻止悬垂指针和其它形式的未定义行为。

所有权

Rust有一个所有权系统,所有的值都有一个唯一的属主,值的有效范围跟属主的有效范围一样。值可以通过不可变引用&T传递,可变引用&mut T传递,T值递。在任何时候,或者有多个不可变引用,或者只有一个可变引用。Rust编译器在编译时执行这些规则同时检查所有引用的有效性。

类型和多态

Rust的类型系统支持一种类似类型类的机制,叫“traits”,是被Haskell激发灵感的。这是一种用于特定同质法的设施,通过给类型变量声明添加约束来实现。其它来自Haskell的特性,如更高类型多态还没有支持。
Rust为以let关键字声明的变量而产生类型推导特性。这样的变量不需要赋初值来判断类型。如果某个分支代码没能给变量赋初值将会产生一个编译时错误。对变量进行多次赋值要使用mut关键字标记。
函数可以接收泛型参数,但通常要求泛型实现某种特性或者几种特性。在这种函数里面,这种泛型值只能通过这些特性来使用。这就是说一个泛型函数在定义的时候就能完成类型检查。这是对标C++模板,那种本质鸭式,只能在以具体类型实例化后完成检查。C++概念解决同样的问题,并且有希望能成为C++20标准的一部分。
然而,Rust泛型的实现与C++模板的典型实现类似:每次实例化都会生成一份单独的代码这被称作单态,和经常在Java和Haskell中使用的类型擦除方案类比。单态的好处是为每一个具体用例提供优化代码,缺点是增长了运行时和很多结果文件。
Rust里面的对象系统是基于实现,特性和结构化类型的。实现扮演的角色跟其它语言中的类相似,以关键字impl来定义。继承和多态是由特性提供;它们允许方法被定义或者混合在实现里面。结构类型用于定义字段。实现和特性自己无法定义字段,而且只有特性能够提供继承。至于其它好处,这个阻止了多继承中的菱形继承问题,像C++一样。换句话说,Rust支持接口继承,但是通过复合替代实现继承;参见继承复合。

参考

社区:Rust社区Wiki
https://learnku.com/rust/wikis
B站:Into Rust (1) - 为什么你应该使用 Rust 语言?
https://www.bilibili.com/video/BV1cW411X7wM
B站:Into Rust (2) - Hello, World
https://www.bilibili.com/video/bv1up4y197av/?spm_id_from=333.788.b_636f6d6d656e74.4
B站:Into Rust (3) - 所有权
https://www.bilibili.com/video/bv1Np4y197Da/?spm_id_from=333.788.b_636f6d6d656e74.4
B站:Into Rust (4) - 共享借用
https://www.bilibili.com/video/bv1GV411d7rm/?spm_id_from=333.788.b_636f6d6d656e74.8
B站:Into Rust (5) - 可变借用
https://www.bilibili.com/video/bv1bk4y1r7TW/?spm_id_from=333.788.b_636f6d6d656e74.4
B站:Rust编程视频教程(基础)
https://www.bilibili.com/video/BV1xJ411B79h
https://github.com/anonymousGiga/learn_rust
B站:Rust编程视频教程(进阶)
https://www.bilibili.com/video/BV1FJ411Y71o
博客园:Tokio,Rust异步编程实践之路
https://www.cnblogs.com/hymenz/p/9334297.html
RUNOOB.COM:Rust 教程
https://www.runoob.com/rust/rust-tutorial.html
语雀:Rust三天简易教程(v1.0)
https://www.yuque.com/progfun/rust/tss53d
语雀:Rust lang
https://www.yuque.com/fir8/rust
知乎:Rust Study RoadMap
https://zhuanlan.zhihu.com/p/146472398