🦀 终极 Rust 编程语言超级教程 🚀
🦀终极 Rust 编程语言超级教程🚀
🦀终极 Rust 编程语言超级教程🚀
本指南旨在帮助您成为Rust 专家——无论您是初学入门,还是希望深入了解高级功能。我们将涵盖Rust 的方方面面,从最基础的语言到高级并发、内存管理、Web 开发等等。
🌟为什么要学习 Rust?
Rust 因其独特的组合而脱颖而出:
- 无需垃圾收集的内存安全: Rust 在编译时防止空指针取消引用和数据竞争。
- 高性能:编译为本机代码,使其与 C/C++ 一样快。
- 并发性:保证线程安全,使多线程编程变得轻而易举。
- 广泛的生态系统:从嵌入式系统到Web 汇编,Rust 用途广泛。
- 不断壮大的社区:得到 Mozilla、亚马逊和微软等大型组织的支持。
🛠️设置 Rust
安装 Rust
- 下载并安装 Rust
rustup
(跨平台安装程序):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 将其添加到您的环境中:
source $HOME/.cargo/env
- 验证安装:
rustc --version
cargo --version
🌱第 1 章:Rust 基础知识
让我们从Rust 的基础概念开始。
🔤 1.1 变量和常量
- 不可变变量(默认):
let x = 5;
println!("x: {}", x);
// x = 10; // Error: Cannot reassign
- 可变变量:
let mut y = 10;
y += 5;
println!("y: {}", y);
- 常量:
const PI: f64 = 3.14159265359;
println!("Value of PI: {}", PI);
📚 1.2 Rust 中的数据类型
Rust 有一个静态类型系统,具有显式和推断类型。
-
标量类型:
- 整数:
i8
,,i32
u64
- 浮点数:
f32
,f64
- 布尔值:
bool
- 特点:
char
- 整数:
-
化合物类型:
- 元组:
let tup = (500, 6.4, 'R'); let (x, y, z) = tup; println!("x: {}, y: {}, z: {}", x, y, z);
- 数组:
let arr = [1, 2, 3, 4, 5]; println!("First element: {}", arr[0]);
🔗第二章:所有权、借贷和生命周期
Rust 的所有权模型是其内存安全的基石。
📦 2.1 所有权规则
- Rust 中的每个值都有一个所有者。
- 一个值每次只能有一个所有者。
- 当所有者超出范围时,该值将被丢弃。
fn main() {
let s = String::from("hello");
takes_ownership(s);
// s is no longer valid here
}
fn takes_ownership(s: String) {
println!("{}", s);
}
➕ 2.2 借用和引用
借用允许多次引用而无需转移所有权。
fn main() {
let s = String::from("hello");
print_length(&s);
println!("Still valid: {}", s);
}
fn print_length(s: &String) {
println!("Length: {}", s.len());
}
🔒 2.3 可变引用
Rust一次只允许一个可变引用:
fn main() {
let mut s = String::from("hello");
change(&mut s);
println!("Changed: {}", s);
}
fn change(s: &mut String) {
s.push_str(", world!");
}
🔗 2.4 生命周期
生命周期可防止悬垂引用。
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
fn main() {
let s1 = "long string";
let s2 = "short";
println!("Longest: {}", longest(s1, s2));
}
📈第三章:高级概念
🔄 3.1 模式匹配
Rustmatch
是一个强大的构造:
fn main() {
let number = 6;
match number {
1 => println!("One"),
2..=5 => println!("Between Two and Five"),
_ => println!("Something else"),
}
}
🔧 3.2 错误处理
- 展开结果:
fn divide(x: i32, y: i32) -> Result<i32, String> {
if y == 0 {
Err(String::from("Cannot divide by zero"))
} else {
Ok(x / y)
}
}
fn main() {
match divide(10, 2) {
Ok(res) => println!("Result: {}", res),
Err(e) => println!("Error: {}", e),
}
}
🕸️第 4 章:Rust 中的并发
4.1 线程
Rust 的线程是内存安全的:
use std::thread;
fn main() {
let handle = thread::spawn(|| {
for i in 1..10 {
println!("Thread: {}", i);
}
});
handle.join().unwrap();
}
🌐第 5 章:现实世界的 Rust 项目
🚀 5.1 构建命令行工具
让我们构建一个简单的 CLI来计算文件中的单词数:
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
let filename = &args[1];
let content = fs::read_to_string(filename).unwrap();
let word_count = content.split_whitespace().count();
println!("Word count: {}", word_count);
}
🛠️ 5.2 使用 Rocket 进行 Web 开发
Rust 的Rocket框架非常适合构建 Web 应用程序:
#[macro_use] extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello, world!"
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
📜福利:Rust 学习路线图
- 了解所有权和借贷。
- 掌握 Rust 标准库。
- 学习并发和异步编程。
- 探索框架(Rocket、Actix)。
- 为开源项目做出贡献。
本指南仅仅是个开始。Rust 是一门强大的语言,它会伴随你一起成长。继续练习,构建项目,深入探索 Rust 生态系统。祝你编程愉快!🦀✨
文章来源:https://dev.to/hanzla-baig/the-ultimate-rust-programming-language-mega-tutorial-2l78