Rust&Arch Linux之旅

Rust&Arch Linux之旅

Rust是一门编译语言,效率媲美C或C++

但是,Rust没有GC,所以安全度极高

Rust可以做哪些事情?

  1. 使用rust编写操作系统,游戏引擎
  2. 构建高性能的Web应用程序,网络服务
  3. 嵌入式领域

Rust环境搭建

1.安装rustup-init

2.运行rustup-init

第一个Rust应用程序

1
2
3
fn main() {
println!("Hello, world!");
}

编译运行即可。

fn关键字定义函数,main入口点/主函数println是一个,Rust中的宏以!结尾。类似与函数(函数的plus版,十分滴强大)

有4个注意点,是必须要关注的

  1. rust的缩进是4个空格,而不是tab;
  2. println!后面那个!表示,这是一个rust宏。如果它已经被一个函数替代了,那么就不应该加那个感叹号。你应该知道这么一件事,如果后面有个!,那么这个玩意就是一个rust宏。在rust19里面会有更多的关于宏的细节;
  3. 你看到的这个"helloworld"字符串,字符串必须用""而不是'';
  4. 结束必须写;,不然就给你报错(╬▔皿▔)╯

cargo

cargo是Rust的一个高级的包管理器和构建器,可用来创建一个项目之类的。

创建的Cargpo.toml文件,是你选择的一些东西,比如依赖之类的。

1
2
3
cargo build
cargo run
cargo check

从一个简单的猜数游戏开始这场Journey

1.用cargo新建一个项目
1
2
cargo new guessing_game
cd guessing_game

可以注意到,rust项目的文件名是由小写字母和下划线组成的

2.来看看自动生成的Cargo.toml文件
1
2
3
4
5
6
7
8
9
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

除此之外,还有一个main.rs文件,写东西的时候可以写这里面,可以编译运行试试看。

3.正式开始这个游戏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use std::io;

fn main() {
println!("let's guess a number!");

println!("Please input your gusee.");

let mut guess = String::new();

io::stdin()
.read_line(&mut guess)
.expect("Falied to read line");
println!("Your guessed:{guess}");

}

这一段代码包含了非常多的信息,因此作为一名新手菜鸡,得来一行一行的看这玩意。

为了可以获取到用户上输入以及打印这个猜数的结果(也就是程序与用户进行交互),我们需要使用这个io输入/输出库。

这个io库来自于标准库,被称为std:

1
use std::io;

默认滴,Rust有一整套的标准的库,这套库被叫做prelude,你可以看看这个文档,里面有关于它的详细的介绍。https://doc.rust-lang.org/std/prelude/index.html

第二行代码,main方法是每一个项目中的入口点。

1
fn main(){

这个fn语法声明一个新的函数,这个小括号是空的,表示里面没参数,并且这个一对大括号是这个函数的主体。

这个println!前面已经说了,是一个,用来打印字符串在屏幕上面滴。

1
2
3
println!("let's guess a number!");

println!("Please input your gusee.");

而且,这个println!宏会自动滴换行。print!不会换行

接下来,创建一个变量来接受一下来自用户的输入。由于rust的所有的变量都是不可变的,也就是,你一旦创建,默认就不可变,你不能再改变它的值了。但是,用户的输入肯定是可变的,那么,就需要使用mut关键字来使得这个变量可变。就像这样:

1
let mut guess = String::new();

我们使用let来声明创造一个变量。rust可以自动的识别你的变量的类型,但是不是那么的智能。

String::new()函数会返回一个新的实例绑定guess

::语法这这里表明这个new是这个String类的相关函数,就是这个实例的方法。这个new方法会创建一个新的、空的字符串。

这个stdin的函数来自与这个io模块,它允许我们处理用户的输入

Rust中的数据类型

Rust并不强制要求指定数据类型,编译器会自动帮你

声明一个变量:

1
2
3
4
5
6
7
8
9
10
11
fn main() {
let mut age=4;
let name="zhangsan";
let height=199.88;
let sex=true;

println!("年龄是:{}名字是{}身高是{}性别是{}",age,name,height,sex);
age=9;
println!("年龄是:{}名字是{}身高是{}性别是{}",age,name,height,sex);
}

rust有四种基本数据类型。

  • 整形
  • 浮点型
  • 布尔类型
  • 字符类型

猜数游戏升级

接下来写这样一个游戏,用户随机猜一个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use rand::Rng; // 引入随机数生成库

fn main() {
let secret_number = rand::thread_rng().gen_range(1..=100); // 生成1到100的随机数

loop {
println!("请猜一个1到100之间的整数:");
let mut guess = String::new();
std::io::stdin().read_line(&mut guess).expect("读取输入失败"); // 读取用户输入
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("无效的输入,请输入一个数字!");
continue;
},
};

match guess.cmp(&secret_number) {
std::cmp::Ordering::Less => println!("你猜的数字小了!"),
std::cmp::Ordering::Greater => println!("你猜的数字大了!"),
std::cmp::Ordering::Equal => {
println!("恭喜你,猜对了!正确答案就是:{}", secret_number);
break;
},
}
}
}
Contents
  1. 1. Rust&Arch Linux之旅
    1. 1.1. Rust环境搭建
    2. 1.2. 第一个Rust应用程序
    3. 1.3. cargo
    4. 1.4. 从一个简单的猜数游戏开始这场Journey
      1. 1.4.0.0.1. 1.用cargo新建一个项目
      2. 1.4.0.0.2. 2.来看看自动生成的Cargo.toml文件
      3. 1.4.0.0.3. 3.正式开始这个游戏
  • 1.5. Rust中的数据类型
  • 1.6. 猜数游戏升级
  • ,