Rust 简介
Rust语言是由Mozilla研究院的Graydon Hoare在2006年开始开发的,目标是设计一种类似C++,但是更安全、高效的系统级编程语言。2010年,Rust发布了第一个版本,之后,Rust社区不断壮大,在2018年发布了1.0版本,发布后不久,口碑就一路高飞猛进,从 16 年起,连续 6 年成为 Stack Overflow 用户评选出来的最受喜爱的语言,被广泛认为是未来编程语言发展的重要趋势。
Rust得到了很多国外厂商认可,被广泛应用在工业界,例如Dropbox、Firefox、Fuchsia、Docker等公司和项目中。不过我认为他会大量使用在中间层,而C/C++会去做更底层的部分,而Java会更向应用层发展。
但是rust对初学者并不友好,即便是有编程基础的人,对诸如变量的所有权、生命周期这些rust新提出的概念也需要时间感受理解。所以他有一个陡峭的学习曲线。
Rust 特点
a. 安全性:Rust语言通过静态类型系统、内存管理等机制保证程序的安全性,避免常见的缓冲区溢出、数组越界等问题。下述代码中,Rust 编译器会报错,因为在 y 和 z 指向 x 的时候 x 是不可变的,不能进行修改。而在 C++ 编译器可能不会报错,而要等到运行期才会报错。
fn main() {
let mut x = 10;
let y = &x;
let z = &x;
*y += 1;
*z += 1;
println!("x = {}", x);
}
b. 性能:Rust语言提供了高效的编译和运行时机制,编译时采用了LLVM,可以生成高效的机器码,媲美C++和C语言。运行时,Rust使用了内存安全机制来保证程序的稳定性和性能。
c. 类型安全:Rust语言通过静态类型系统来保证类型安全,避免了在运行时发生错误。在 Rust 中,类型不匹配将会在编译时报错,而在 C++ 和 C 中可能会在运行时才出现错误。例如,Rust使用了像借用检查和所有权系统之类的机制来防止数据竞争和使用未初始化的内存,这些都有助于减少程序中常见的安全漏洞。
举个例子,在C++中下面代码是有问题的,因为函数get_num()返回了局部变量x的地址,而x在函数结束后就不存在了。但在Rust中上述代码是不能编译的,因为Rust编译器会检测到这里的x是不可变的,不能在main()中试图修改它。以下是C++和Rust代码对比:
C++代码:
int* get_num() {
int x = 10;
return &x;
}
int main() {
int* p = get_num();
*p = 6;
return *p;
}
Rust代码:
fn get_num() -> &i32 {
let x = 10;
&x
}
fn main() {
let p = get_num();
*p = 6;
*p
}
d. 并发编程:Rust语言提供了丰富的并发编程支持,比C++和C语言更容易。
fn main() {
let mut x = 0;
let handle = thread::spawn(|| {
x += 1;
});
handle.join().unwrap();
println!("x = {}", x);
}
e. 生态系统:Rust语言拥有强大的生态系统,提供了丰富的库和工具,如 reqwest可以让我们方便地进行网络请求。
extern crate reqwest;
use reqwest::Client;
fn main() {
let client = Client::new();
let res = client.get("https://www.rust-lang.org").send().unwrap();
println!("status: {}", res.status());
}
所以,Rust虽然学习曲线陡峭,但是拥有很多高效实用的特性帮助我们解决工程中的问题,性能还媲美C++/C这种中低级语言,只要我们肯花时间,就一定能驾驭他,接下来我们一起努力吧
领取专属 10元无门槛券
私享最新 技术干货