文章目录
用了一个rust代码,记录下。
一、Rust简介
Rust 是一种系统级编程语言,由 Mozilla(火狐那个) 开发,并于
2010
年首次公开发布。它的设计旨在提供高性能、并发性、安全性以及开发人员友好的语法。Rust 的特点包括但不限于以下几个方面:
特点:
- 安全性: - Rust 最引人注目的特性之一是其强大的安全性。它使用一套称为 “borrow checker” 的系统来在编译时检查数据访问的正确性,避免了内存溢出、空指针和数据竞争等常见的安全漏洞。
- 并发性: - Rust 提供了轻量级的线程(称为 “任务”)和基于消息传递的并发模型。Rust 的所有权和借用系统使得在编写并发代码时更加安全和容易。
- 性能: - Rust 的设计目标之一是提供与 C/C++ 相当的性能。它不会引入运行时开销,直接编译为本地机器码,使得 Rust 适用于对性能要求较高的应用程序。
- 内存管理: - Rust 通过所有权(ownership)和借用(borrowing)的概念,实现了内存安全和高效的内存管理。所有权规则确保了在任何时刻只有一个所有者能够访问内存,借用规则则允许多个只读引用或者单个可变引用。
- 功能丰富的标准库: - Rust 的标准库提供了丰富的功能,包括支持文件操作、网络通信、多线程、数据结构、加密等方面。
- 开发人员友好的工具: -
Cargo
是 Rust 的包管理和构建系统,提供了项目管理、依赖管理、测试等功能,极大地简化了项目的管理和构建流程。- Rust 的错误信息也是开发者称赞的地方之一,友好而详细的错误提示帮助开发者更快地定位和解决问题。
适用领域:
- 系统编程:Rust 最初就是为了取代 C 和 C++ 而设计的,因此非常适合系统级编程,包括操作系统、嵌入式开发等领域。
- 网络服务:由于其安全性和性能,Rust 在构建网络服务、服务器端应用程序方面表现出色,比如 WebAssembly、后端服务等。
- 游戏开发:Rust 适合游戏开发领域,其性能和并发性使其成为实现高性能游戏引擎的良好选择。
- 工具开发:由于 Rust 的稳定性、安全性和性能,它也被广泛用于开发系统工具、编译器、分析器等。
二、Rust 安装
安装 Rust 时,会安装 Rust 编程语言的工具链和相关的工具。包括 Rust 编译器(
rustc
)、包管理器
Cargo
、Rust 标准库以及一些辅助工具。具体来说,安装 Rust 会包括以下内容:
- Rust 编程语言工具链: -
rustc
:Rust 的编译器,负责将 Rust 代码编译成可执行程序或者库。-cargo
:Rust 的包管理器和构建工具,用于创建、构建、测试和发布 Rust 项目。 - Rust 标准库: - Rust 标准库包含了常用的数据结构、函数等,是 Rust 开发中常用的库之一。
- Rust 文档和示例: - 安装 Rust 后,可以通过
rustup doc
命令来打开 Rust 的文档,包括标准库的文档和 Rust 编程语言的指南。- Rust 还会自带一些示例程序,可以通过rustup doc --book
命令来查看官方示例和教程。 - Rustup 工具: -
rustup
是 Rust 的工具链管理器,用于安装、管理和更新 Rust 工具链和版本。它提供了便捷的方式来管理不同版本的 Rust 和工具链。 - 额外的工具: - 在安装 Rust 时,可能会默认安装一些辅助工具,比如
rustfmt
(Rust 代码格式化工具)和clippy
(Rust 代码 lint 工具)等。这些工具可以帮助你保持代码的风格统一和代码质量。
下载安装程序:https://www.rust-lang.org/tools/install
运行安装程序,出现:
输入1,回车即可默认安装,期间会下载资源文件。
安装完后查看版本信息:
rustc --versioncargo--version
Rust没有专门的IDE,你可以使用VS code或者IDEA的插件。
三、Rust 程序结构
项目结构:
my_project/
├── Cargo.toml # 项目的配置文件,包含了项目的元数据和依赖信息。
└── src/
├── main.rs # 主入口文件
├── lib.rs # 库的入口文件
├── my_module.rs # 自定义模块文件
└── my_module_test.rs # 测试文件
Rust 程序的程序结构包括了模块(
Modules
)、函数(
Functions
)、变量(
Variables
)、控制流(
Control Flow
)等部分。下面是 Rust 程序的基本结构和各个部分的详细介绍:
3.1 模块(Modules):
- Rust 中的模块用于组织代码,将相关的功能组织在一起。一个 Rust 程序通常由一个主模块(
main.rs
)和多个子模块组成。 - 使用
mod
关键字定义模块,模块可以嵌套。 - 示例:
// 定义一个模块modmy_module{// 在模块中定义函数pubfnhello(){println!("Hello from my_module!");}}// 在主函数中使用模块中的函数fnmain(){my_module::hello();}
3.2 函数(Functions):
- Rust 中的函数使用
fn
关键字定义,函数可以有参数和返回值。 - 函数的参数和返回值必须指定类型。
- 示例:
// 定义一个函数fnadd(a:i32, b:i32)->i32{ a + b}// 调用函数let result =add(5,10);println!("Result: {}", result);// 输出:Result: 15
3.3 变量(Variables):
- Rust 中的变量使用
let
关键字声明,变量默认是不可变的(immutable)。 - 使用
mut
关键字可以声明可变变量。 - 示例:
// 声明不可变变量let x =5;// x = 10; // 错误!不可变变量不能修改// 声明可变变量letmut y =10;y =15;// 可变变量可以修改
Rust 中常见的变量类型:
类型描述大小
i8
有符号 8 位整数1 字节
i16
有符号 16 位整数2 字节
i32
有符号 32 位整数(默认类型)4 字节
i64
有符号 64 位整数8 字节
u8
无符号 8 位整数1 字节
u16
无符号 16 位整数2 字节
u32
无符号 32 位整数4 字节
u64
无符号 64 位整数8 字节
isize
有符号整数,与指针大小相同平台相关
usize
无符号整数,与指针大小相同平台相关
f32
单精度浮点数4 字节
f64
双精度浮点数(默认类型)8 字节
bool
布尔类型,true 或 false1 字节
char
字符类型4 字节
()
空类型(Unit 类型,类似于 void)0 字节
str
字符串类型(不可变)不定长
String
字符串类型(可变,堆分配)不定长
&str
字符串切片引用(不可变)不定长
&String
字符串引用(不可变)不定长
Vec<T>
动态数组类型(可变长度数组)不定长
Option<T>
可选值类型,用于处理可能为
None
的值不定长
Result<T, E>
结果类型,用于处理可能出错的操作不定长
Tuple
元组类型,固定长度的不同类型值的组合不定长
Array
数组类型,固定长度的相同类型值的集合固定长度
3.4 控制流(Control Flow):
- Rust 中的控制流语句包括 if 表达式、循环和匹配模式(match)。if 表达式:
let number =7;if number <5{println!("Number is less than 5");}else{println!("Number is greater than or equal to 5");}
while 循环:letmut count =0;while count <5{println!("Count: {}", count); count +=1;}
for 循环:for number in1..=5{println!("Number: {}", number);}
match表达式:let x =5;match x {1=>println!("One"),2=>println!("Two"), _ =>println!("Other"),}
3.5 宏(Macros):
- Rust 中的宏允许你编写类似函数的代码来生成代码。
- Rust 内置了一些常用的宏,比如
println!
和vec!
等。 - 你也可以自定义宏。
- 示例:
macro_rules! greet {()=>{println!("Hello, World!");};}greet!();// 调用宏
3.6 完整示例:
// 定义一个模块modmy_module{// 在模块中定义函数pubfnhello(){println!("Hello from my_module!");}}// 定义一个函数fnadd(a:i32, b:i32)->i32{
a + b
}// 主函数fnmain(){my_module::hello();// 调用模块中的函数let result =add(5,10);// 调用函数println!("Result: {}", result);// 输出:Result: 15let x =5;// 定义不可变变量letmut y =10;// 定义可变变量
y =15;// 修改可变变量的值let number =7;if number <5{println!("Number is less than 5");}else{println!("Number is greater than or equal to 5");}letmut count =0;while count <5{println!("Count: {}", count);
count +=1;}for number in1..=5{println!("Number: {}", number);}let x =5;match x {1=>println!("One"),2=>println!("Two"),
_ =>println!("Other"),}macro_rules! greet {()=>{println!("Hello, World!");};}greet!();// 调用宏}
四、编译
以使用 Cargo 这个 Rust 的包管理器和构建工具来编译程序
打开终端(命令行),进入到项目目录。
运行:
cargo build
这会在项目目录下生成一个 target/ 目录,其中包含编译生成的可执行文件。
编译完成后,在终端中运行生成的可执行文件:
./target/debug/my_project
如果是库项目,需要将库文件引入其他 Rust 项目中,或者进行单元测试等。
如果需要进行发布版的编译(带有优化):
cargo build --release
这会在 target/ 目录下生成一个 release/ 目录,其中包含优化后的可执行文件。这个可执行文件在运行时可能会更快,但编译时间会更长。
附加命令
cargo run
: 编译并运行项目。如果你不需要单独编译,可以直接使用这个命令来编译和运行项目:cargo check
: 检查代码是否可以编译,但不生成可执行文件。这个命令可以用于快速检查代码的语法和类型错误:
注意事项
- 在使用 Cargo 编译 Rust 程序时,它会自动下载并管理依赖项。
- 如果你使用的是 IDE(如 Visual Studio Code),通常也会有相应的插件支持 Cargo 的编译和调试。
版权归原作者 感谢地心引力 所有, 如有侵权,请联系我们删除。