1. 概述
Rust是由Mozilla员工Graydon Hoare于2006年作为个人项目而创造,Mozilla于2009年开始赞助该项目。2012年,第一个Rust编译器发布,2015年第一个Rust1.0稳定版本发布,目前,Rust已加发展到1.51版本。
2021年2月8日,Rust基金会成立,Rust商标及所有权移交给基金会。基金会创始白金成员包括亚马逊、微软、谷歌、华为和Mozilla,白金会员Facebook。
截止到2021年5月,Rust在TOIBE编程语言排行榜上排名24%,占比0.66%。
2. Rust功能
2.1. 语言主要特性
- 类型推导
Rust支持表达式类型推断,可根据代码自动推动表达式类型。
举例:
let a = 1; //a是i32类型
let x = 9.0; //x是f64类型
- 零成本抽象
Rust中增加抽象定义,不会影响运行性能。
- 模式匹配
通过match关键字,可以很方便的对变量的值、范围、部分内容等进行匹配操作,支持匹配数字、字符串、函数调用等,支持逻辑与或匹配。匹配的作用可以简单理解为C语言的Switch语法功能的增强。
举例:
let a = 3;
match a {
1 => println!("a is 1"),
2...5 => println!(" 2<=a<=5"),
6 | 8 => println!(" a=6 or a=8"),
_ => println!("其它")
}
- 所有权
内存所有权是Rust内存安全的核心基础。内存在一个时刻,所有权只能属于一个变量,超出作用域后,会被自动释放。所有权支持转移和借用。该机制可以有效解决空指针、野指针、内存泄漏、内存重复释放等内存问题。
举例:
let a = vec![1, 2, 3,4, 5];
...
let b = a; //所有权转移到b,通过a无法再访问
- 错误处理
Rust支持统一并简洁的错误处理方式。错误码统一,且支持同时返回值及错误码。
Rust将错误区分未可恢复错误及不可恢复错误,支持可恢复错误传递。
举例:
use std::fs::File;
fn main() {
let f = File::open("hello.txt");
let f = match f {
Ok(file) => file, // 成功处理
Err(error) => println!("Problem opening the file: {:?}", error), //错误处理
};
panic!("run here panic!"); // 不可恢错误
}
- 切片(Slice)