Rust学习笔记

本文最新更新于 2025/02/08 晚上

1、安装与配置

1.1 安装

官网下载

image-20241028185911269

双击打开会弹出命令行窗口,直接回车即可。

查看是否安装成功

1
rustup --version

查看rust版本环境

1
rustup show

安装生产版本

1
rustup install nightly

切换版本环境

1
2
3
rustup default nightly
or
rustup default stable

1.2 编译命令

文件编译

1
2
rustc 被编译文件名 -o 输出文件名
rustc main.rs -o hello

2、包管理

2.1 包管理工具Cargo

创建项目

1
2
cargo new project_name
cargo new --lib project_lib_name

构建项目

会出现一个名为target文件夹

1
2
cargo build
cargo build --release 这个性能较好
image-20241028191914203

检测

1
cargo check

运行/测试

1
2
cargo run
cargo test

项目结构

image-20241028190911111

2.2 Cargo.toml文件

  • package
    • 设置版本名
    • 版本等
  • dependencies
    • 设置依赖
    • [build-dependencies]列出了在构建项目时需要的依赖项
    • [dev-dependencies]列出了只在开发时需要的依赖项

2.3 加载库

填写依赖项后保存会自动加载依赖项

image-20241028192529489

推荐使用cargo-edit

安装cargo-edit

1
cargo install cargo-edit

添加库

1
cargo add dependency_name

安装指定版本

1
cargo add dependency_name@1.2.3

添加开发时用的依赖库

1
cargo add --dev dev_dependency_name

添加构建时用的依赖库

1
cargo add --build build_dependency_name

删除库

1
cargo rm dependency_name

2.4 设置国内源

推荐使用rsproxy

C:\Users\23984\.cargo\.config

但是我没有找到

3、基本类型

3.1 变量与不可变性

  1. 使用let声明变量
  2. 后置类型定义
  3. 变量使用蛇形命名法,枚举和结构体命名使用帕斯卡命名法
  4. 强制类型转换Casting a Value to a Different Type
  5. 使用mut关键词将变量置为可变
image-20241028194646626
image-20241028194723176

3.2 常量与静态变量

常量

  1. 常量的值在编译时已知,必须指定类型与值
  2. 与C不同,Rust的const常量值被直接嵌入到生成的底层机器代码中,而不是简单字符替换
  3. 常量名与静态变量名必须全部大写,单词之间加下划线
  4. 常来那个的作用域是块级作用域,只在声明他们的作用域内可见

static静态变量

  1. 在运行时分配内存
  2. 并不是不可变的,可使用unsafe修改
  3. 静态变量的生命周期为整个程序的运行时间
image-20241028200046092

3.3 基本数据类型

  • Integer types : 默认推断为i32
    • i8、i16、i32、i64、i128
  • Unsigned Integer types
    • u8、u16、u32、u64、u128
  • platform-specific integer type(由平台决定)
    • usize
    • isize
  • Float Types
    • f32与f64
    • 尽量用f64
  • Boolean Values
    • true
    • false
  • Character Types
    • Rust支持Unicode字符
    • 表示char类型使用单引号
1
2
3
4
5
println!("{}",u32::MAX);
println!("{}",u32::MIN);
println!("{}",usize::MAX);
println!("{}",usize::MIN);
println!("isize is {} bytes",std::mem::size_of::<isize>());
image-20241028200813404
image-20241028200822258

该2.4了

https://www.bilibili.com/video/BV15y421h7j7?spm_id_from=333.788.videopod.episodes&vd_source=33b50a4dd201d7564e6e63d321809ce9&p=7

3.4 元祖和数组

相同点:

  • 都是复合类型Compound Types,而Vec和Map都是集合类型Collection Types
  • 元组和数组长度都是固定的

不同点:

  • Tuples:不同类型的数据类型
  • Arrays:同一类型的数据类型

数组:

  • 创建方式

    • [a,b,c]

    • [value;size]

  • 获取元素arr[index]

  • 获取长度arr.len()

元组:

  • 获取数据:tup.index
  • 没有len()
  • 默认返回值Emoty Tuple()
  • 元组和数组都是可以直接打印的;println!("{:?}",arr);
  • 赋值默认都是copy操作;

string赋值时是move操作,会转移所有权,不能再打印。

image-20241029191648931

4、Ownership与结构体、枚举

4.1 Rust的内存管理模型

image-20241029191949573
image-20241029192441011

1、所有权系统

  • 每个值都有一个与之关联的变量,该变量是该值的所有者
  • 同一时间只能有一个所有者
  • 当所有者离开作用域时,它拥有的值将被丢弃

2、RAII原则

资源获取即初始化原则。当对象被创建时,它会获取必要的资源,并在生命周期结束时释放这些资源。

https://blog.csdn.net/CrystalLawson/article/details/138190719


Rust学习笔记
http://example.com/2025/02/08/037 Rust学习笔记/
作者
DB
发布于
2025年2月8日
许可协议