观看B站软件工艺师杨旭的rust教程学习记录,有删减有补充
文件按名为main.rs
,main是函数入口,rust默认推断为void main
,!
代表println是一个宏,函数没有!
fn main(){
println!("{}"," Hello world!");
}
编译(仅适合小项目,一般用Cargo)
rustc main.rs
执行
#win
.\main.exe
#Linux
./main
查看cargo版本cargo --version
创建rust项目
cargo new hello_rust
运行项目
cargo run
检查代码但不生成可执行文件,速度比构建快,能干过编译器就是好代码
cargo check
构建项目,生成的可执行文件在/target/debug/build
cargo build
为发布构建,编译时进行优化但编译时间更长,生成的可执行文件在/target/release/build
cargo build --release
详细命令
cargo build
:采用dev配置
cargo build --release
:采用release配置
在Cargo.toml中添加profile可以覆盖配置
[prifile.dev]
opt-level = 0 #开发时使用最低优化级别
[profile.release]
opt-level = 3 #发布时使用最高优化级别
生成更小的可执行文件
[profile.release]
opt-level = "z" # 优化代码尺寸
lto = true # 启用链接时优化
codegen-units = 1 # 降低代码生成单元数,增加优化时间但减少二进制大小
strip = "debuginfo" # 移除调试信息
生成更快的可执行文件
[profile.release]
opt-level = 3 # 最大程度优化代码速度
lto = "fat" # 启用最大程度的链接时优化
codegen-units = 1 # 降低代码生成单元数,增加优化时间但提升性能
其他配置
https://crates.io/
在Cargo.toml
添加需要的库,^
代表与指定版本兼容的版本,如
[dependencies]
rand = "^0.8.5"
更新cargo.lock
版本
cargo update
猜数游戏
use rand::Rng;
use std::cmp::Ordering;
use std::io; //trait
fn main() {
println!("猜数!");
//生成1~100的随机数
let secret_number = rand::thread_rng().gen_range(1..101);
println!("神秘数值是{}", secret_number);
loop {
println!("猜一个数");
let mut guess = String::new();
//等价于std::io
io::stdin().read_line(&mut guess).expect("无法读取行");
//去掉两边的空白并转换为整数,变量遮蔽shadow,match处理错误
let guess: u32 = match guess.trim().parse() {
Ok(num) => num, //成功就返回num
Err(_) => continue, //_代表不关心它的值是什么
};
println!("你猜的数字是:{}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("太小"),
Ordering::Greater => println!("太大"),
Ordering::Equal => {
println!("猜对了");
break;
}
}
}
}
let
声明变量mut
关键字使变量可变fn main() {
let a = 5;
let mut b = 4;
b = 6;
println!("a:{},b:{}", a, b);//a:5,b:6
}
常量声明后不可变
const
关键字声明,它的类型必须标注mut
,常量永远不可变命名规范:Rust常量使用全大写字母,每个单词之间使用_
分开,如MAX_VALUE
const MAX_VALUE: u32 = 1_000;
fn main() {
const MIN_VALUE: u32 = 1_000;
println!("最大值:{}\n最小值{}"