0%

rust初次实践

1. 介绍

1.1 历史发展

Rust的开发最早可以追溯到2006年,当时Mozilla的员工Graydon Hoare开始了这个项目,作为个人兴趣。2015年5月,Rust 1.0正式发布。

1.2 能用来干什么

系统编程:

  • Rust可以用来编写操作系统内核、驱动程序和嵌入式系统,因为它提供了对硬件和系统资源的精细控制。

Web开发:

  • Rust在Web开发中的应用越来越广泛,尤其是通过框架如Rocket、Actix和Axum。Rust编写的Web应用可以同时具有高性能和安全性。

CLI工具:

  • Rust被广泛用于开发命令行工具,因为它可以编写快速且可靠的工具。例如,许多流行的命令行应用,如ripgrep、exa等,都是用Rust编写的。

游戏开发:

  • Rust可以用于游戏开发,尤其是需要高性能和低延迟的场景。Amethyst等游戏引擎就是基于Rust的。

区块链和加密货币:

  • Rust在区块链和加密货币领域也有应用,特别是在需要高性能和安全性保证的智能合约和去中心化应用中。

嵌入式系统:

  • Rust适合用于嵌入式系统编程,因为它能够在资源受限的环境中提供安全和高效的代码。

1.3 语言特点

内存安全:

  • Rust通过所有权(ownership)系统管理内存,消除了许多C和C++中常见的内存错误问题。编译器在编译时检查内存使用,确保在编译时发现潜在的错误。

并发性:

  • Rust对并发编程提供了良好的支持,拥有安全的线程模型,避免了数据竞争和其他并发编程中的常见问题。

高性能:

  • Rust的性能接近C和C++,因为它是静态类型语言,并且编译成高效的机器代码,适合于需要高性能的场景。

零成本抽象:

  • Rust提供了高级的编程抽象(如泛型、闭包等),但这些抽象在运行时不增加额外的性能开销。

优秀的工具链:

  • Rust提供了强大的工具,如Cargo(包管理器和构建系统),使得项目管理、依赖管理和编译变得更加简单高效。

丰富的生态系统:

  • Rust拥有一个快速发展的生态系统,Crates.io上有大量的第三方库和工具,帮助开发者在各个领域进行开发。

2. 初探

2.1 安装使用

1
2
3
4
5
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

rustc --version # rustc 1.80.0 (051478957 2024-07-21)

rustup update # 更新rust

Rust 将被安装在 ~/.cargo/bin 目录下。

2.2 创建项目

1
2
3
cargo new hello-rust

cargo run # 输出hello world
  • Cargo.toml 为 Rust 的清单文件。其中包含了项目的元数据和依赖库。
  • https://crates.io/ 可以查找 Rust 包的仓库

2.3 项目初探

Cargo.toml 增加依赖

1
2
[dependencies]
ferris-says = "0.3.1"

代码

1
2
3
4
5
6
7
8
9
10
11
12
use ferris_says::say;
use std::io::{stdout, BufWriter};


fn main() {
let stdout = stdout();
let message = String::from("Hello study rust!");
let width = message.chars().count();

let mut writer = BufWriter::new(stdout.lock());
say(&message, width, &mut writer).unwrap();
}

执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cargo run



Compiling hello-rust v0.1.0 (/Users/liuwei/workspace/hello-rust)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.58s
Running `target/debug/hello-rust`
___________________
< Hello study rust! >
-------------------
\
\
_~^~^~_
\) / o o \ (/
'_ - _'
/ '-----' \

3. 头脑风暴

3.1 IDE

  • IDE 使用的 RustRover。

  • 关闭类型显示,在 Inlay Hints 设置中,找到 Rust,关闭。

  • Cmd + Option + L(macOS)来格式化代码。

3.2 猜数字游戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::io;
use std::any::type_name;
use std::fmt::Debug;
use rand::Rng;

fn main() {
// 1. 生成随机数
let mut rng = rand::thread_rng();
let random_number: i32 = rng.gen_range(1..=100);
println!("请输入一个 1-100 的数字");

// 2. 输入
loop {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let input_num = match input.trim().parse::<i32>() {
Ok(num) => num,
Err(_) => {
eprintln!("Invalid number");
return;
}
};
if input_num == random_number{
println!("恭喜你,猜对了! 随机数是: {}", random_number);
return;
}else if input_num > random_number{
println!("你输入的数字大于随机数");
}else{
println!("你输入的数字小于随机数");
}
}

// 3. 输出变量的类型
/*
// print_type_of(&input);
// print_type_of(&input_num);
"1232\n" 类型是: alloc::string::String
1232 类型是: i32
你输入的数字是: 1232
*/
}


fn print_type_of<T: Debug>(val: &T) {
println!("{:?} 类型是: {}", val, type_name::<T>());
}


4. 参考资料

可以加首页作者微信,咨询相关问题!