Rust是一门内存安全同时有着不输于C++性能的系统编程语言。粗略地总结一下今天学习的内容。
环境安装
在Rust官方网站下载rustup后根据提示完成安装即可。
Hello, wold
我们在记事本中写入如下代码:
fn main() {
println!("Hello, world!");
}
\quad
fn用来声明一个新函数,空格后面跟着的为函数名,()内为函数参数,其中main函数为程序入口。函数体用{}包围。
\quad
函数体中,println! 调用的是一个宏(marco)而不是函数,如果是函数则没有!。
\quad
把文件保存为 .rs格式后,打开cmd或PowerShell,进入该文件所在目录,执行rustc xxx.rs命令进行编译,然后再执行 ./xxx来运行该程序。
Cargo
\quad
Cargo是 Rust的构建系统和包管理器。请尽量使用Cargo来管理Rust项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做依赖(dependencies))。
\quad
在projects目录下,执行cargo new hello命令,新建名为hello的目录,进入hello目录并列出文件,将会看到Cargo生成了两个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。它也在hello目录初始化了一个 git 仓库,以及一个 .gitignore 文件。
\quad
执行cargo build命令,会对该项目进行编译。
\quad
执行cargo run命令,会对该项目编译并运行。
\quad
Cargo还提供了一个叫cargo check的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件。
猜数字
官方文档提供的第二个示例。
use std::io; //提供标准输入的库
use std::cmp::Ordering; //提供cmp方法和Ordering类型
use rand::Rng; //Rng是一个trait,暂时不懂,它提供随机数生成器应实现的方法
fn main() {
println!("猜猜看!");
let secret_num = rand::thread_rng().gen_range(1, 101);
println!("The secret num is {}", secret_num);
loop {
println!("请输入你的猜测");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Failed to read line");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("You guessed: {}", guess);
match guess.cmp(&secret_num) {
Ordering::Less => println!("猜小了"),
Ordering::Greater => println!("猜大了"),
Ordering::Equal => {
println!("猜对了!");
break;
}
}
}
}
我们可以在Rust语法身上看到很多熟悉的影子,比如C++的双冒号,Javascript的let。
use:引入到当前作用域,类似C++的using
std::io:std是标准库,io库来自std库,双冒号语法类似C++
let:用于创建变量,在rust中变量默认是不可变的(这确实惊到我了)
let mut:创建可变的变量
println!("{}", var):里面的花括号是占位符,后面是参数列表
loop:创建一个无限循环
String::new():String是一个类型,new()是它的关联函数,不依赖于实例对象,用于创建对象
match:条件分支
&mut guess:引用变量guess,因为要读取输入的内容到guess里所以要加mut