Rust编程语言
Rust编程语言是一种系统化的编程语言,支持函数式和命令式编程范式泛型等多范式语言。Rust在语法上类似于C,但是设计者希望在保证性能的同时提供更好的内存安全性。 Rust最初是由Mozilla研究院的Graydon Hoare设计和创建的,后来在Dave HermanBrendan Eich等人的贡献下逐渐完善。Rust的设计师们通过他们在开发伺服网站浏览器的布局引擎中积累的经验,对Rust语言和Rust编译器进行了优化。
Rust compiler is in MIT license and Apache License 2 license 2.0双重协议声明下的自由开源软件。 Rust已经连续七年了(2016,2017,2018,2019,2020, 2021, 2022)在stack 溢出开发者调查中“最喜欢的编程语言”在评选项目中赢得桂冠。
研发背景 编辑本段
Rust language在2006年作为Mozilla员工Graydon Hoare的私人项目出现,Mozilla在2009年开始赞助这个项目。第一个版本号为的Rust编译器发布于2012年1月。Rust 1.0是第一个稳定版本,2015年5月15日发布。
版本记录 编辑本段
Mozilla在2014年10月宣布发布Rust编译器和工具的0.12版。
版本12有超过1900个更改和错误修复,包括:重写了入门文档(Now its called Rust Guide guide)继续改进包管理器货物等。
2015年1月,Rust发布-1.alpha版本。
2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本。
2015年6月25日,Rust发布了1.1版本。同时发布1.2测试版本
2016年11月14日,Rust发布了1.版本13,同时发布1.14测试版本。
2018年1月4日,Rust发布1.23版本
2018年9月25日,Rust发布了1.29.1版本
2020年6月18日,Rust发布了1.44.1版本
Rust 1.1 稳定版
编译速度相对于1.版本0已升级了32%
编译器提示信息更加完善,参数-Explain可以对编译错误的类型提供更详细的解释
std::fs模块中添加了许多稳定的API
初步支持静态link C运行时MUSL,在Linux环境下编译的程序可以实现零依赖(你不能再依赖glibc了)
Cargo增加了一个新命令cargo rustc,支持向rustc传递任意参数
Rust 1.2 测试版
编译速度在1.1版本,然后升级30%
可以再次使用并行编译,默认不开启如果开启,可以提升33%的编译速度(数据来自4核编译器rustc C)
货物性能改进(编译伺服时启动速度提高10倍),它可以在多个包之间共享依赖包缓存
对MSVC的初步支持(Microsoft Visual C)未来的Windows环境不需要MinGW/MySYS/GCC了
Rust 1.2 稳定版 将在六周后发布,届时将发布 1.3 测试版
Rust 1.13
一个新的操作符,Rust获得了一个新的操作符,它可以通过减少所涉及的视觉污染来更好地处理错误。
稳定语句的性质、修复空元组 结构/Variable #derive]、Fix 'if' 条件生存期规则、避免加载和解析未配置的非内联模块
设计特色 编辑本段
Rust致力于成为一种优雅的编程语言,解决高并发和高安全性系统的问题,适用于大规模场景,即创建和维护能够保持大规模系统完好无损的边界。这导致它强调安全性内存布局控制和并发性。
标准性能 编辑本段
标准防锈性能与标准c性能相当。
语法介绍 编辑本段
Rust的具体语法和CC类似,大括号定义代码块,同样的控制流关键字,比如ifelsewhilefor。但是,并不是所有的C或C关键字都实现了。一些Rust函数(例如,关键字match用于模式匹配)对于精通这些语言的人来说,就没那么熟悉了。尽管与C/c很像,Rust在深层语法上更接近Haskell等元语言家族语言。基本上,函数体的每一部分都是一个表达式,甚至是一个控制流操作符。比如普通的if表达式也代替了c的三进制表达式。函数不需要以返回表达式结束,在这种情况下,函数的最后一个表达式就是返回值。
内存安全 编辑本段
Rust语言系统是为了保证内存安全而设计的,在安全代码中不允许空指针悬空指针和数据竞争。值只能以一系列固定的形式初始化,要求所有输入都已初始化。在其他语言中,复制函数指针要么有效,要么为空比如在链表二叉树等数据结构中,Rust core库提供了选项类型来测试指针是否有值。Rust还引入了加法语法来管理生命周期,编译器通过租用检查器来解释原因。
内存管理 编辑本段
Rust不像Go,Java和.net 框架,使用自动垃圾收集系统。不同的是Rust通过RAII管理内存和资源,还可以选择引用计数。Rust以较低的开销提供了资源的确定性管理。Rust还支持值的堆栈分配,不代表黑盒。
Rust里还有指称的概念(用&符号)不包含运行时引用计数的。因此,租约检查器在编译时已经验证了这种指针的安全性,防止了悬空指针和其他形式的未定义行为。
版权系统 编辑本段
Rust有一个所有权体系,所有的值都有一个唯一的所有者,值的有效范围和所有者是一样的。值可以通过不可变引用t可变引用mut T和t传递。在任何时候,要么有多个不可变的引用,要么只有一个可变的引用。Rust编译器在编译时执行这些规则,并检查所有引用的有效性。
类型多态 编辑本段
生锈与腐蚀的类型系统支持一种类似于类型类的机制,称为“traits”受到了哈斯克尔的启发。这是一个针对特定同质方法的工具,通过向类型变量声明添加约束来实现。Haskell的其他特性,比如更高类型的多态性,还不被支持。
Rust为用let关键字声明的变量生成类型导数。这样的变量不需要初始值来判断类型。如果一个分支代码没有给一个变量赋值,就会产生一个编译时错误。当变量被多次赋值时,使用mut关键字来标记变量。
函数可以接收泛型参数,但泛型通常需要实现某些特征或几个特征。在该函数中,该通用值只能通过这些功能使用。这意味着泛型函数在定义时可以完成类型检查。这是基准C模板,本质上像鸭子,只能在特定类型中实例化后检查。概念C解决了同样的问题,并有希望成为C 20标准的一部分。
然而,Rust泛型的实现类似于C模板的典型实现:每个实例化都会生成一个单独的代码,称为singleton,类似于Java和Haskell中常用的类型擦除方案。singleton的优点是为每个具体用例提供优化代码,缺点是增加了运行时间和很多结果文件。
Rust中的对象系统基于实现特征和结构化类型。实现扮演的角色类似于其他语言中的类,由关键字impl定义。特性提供了继承和多态;它们允许在实现中定义或混合方法。结构类型用于定义字段。实现和属性本身不能定义字段,只有属性才能提供继承。至于其他好处,这防止了多重继承中的钻石继承问题,像c。换句话说,Rust支持接口继承,但是通过复合替换实现继承;参见继承复合。
附件列表
词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。