Rust权威指南笔记——第1章 入门指南

220 阅读3分钟

安装Rust

学习Rust的第一步自然是安装它。我们会通过一个叫做rustup的 命令行工具来完成Rust的下载与安装,这个工具还被用来管理不同的 Rust发行版本及其附带的工具链

在Linux或macOS环境中安装Rust

请打开命令行终端,并且输入命令:
curl https://sh.rustup.rs -sSf | sh

这条命令会下载并执行一个脚本来安装rustup工具,进而安装最 新的Rust稳定版本。该脚本可能会在执行过程中请求输入你的密码。 一旦安装成功,你将能够看到如下所示的输出:
Rust is installed now. Great!

假如你想要立即开始使用Rust而不用重新启动终端,那么你可以在终端中运行如下所示的命令来让配置立即生效:
source $HOME/.cargo/env

在Windows环境中安装Rust

下载安装器:www.rust-lang.org/zh-CN/tools…

以管理员身份运行该程序并遵循屏幕上的指示。

按1,回车,等待下载安装完成会自动关闭窗口
重新打开命令行窗口,输入
rustc --version看到如下输出,即为安装成功

您可能需要安装 Microsoft C++ 生成工具

更新与卸载

在使用rustup成功地安装了Rust后,你可以非常简单地通过如下所示的命令来更新Rust版本:
rustup update

当然,你也可以通过如下所示的命令卸载rustup及Rust工具链:
rustup self uninstall

本地文档

安装工具在执行的过程中会在本地生成一份离线的文档,你可以 通过命令rustup doc在网页浏览器中打开它。

编写“Hello, World!”

推荐使用vscode进行开发,安装插件:rust-analyzer

新建main.rs 文件,并键入如下代码。

// main.rs
fn main() {
    println!("Hello, world!");
}

第一个值得注意的部分如下所示:

fn main() {
}

这部分代码定义了Rust中的一个函数。这里的main函数会比较特殊:当你运行一个可执行Rust程序的时候,所有的代码都会从这个入 口函数开始运行。这段代码的第一行声明了一个名为main的、没有任 何参数和返回值的函数。如果某天你需要给函数声明参数的话,那么就必须把它们放置在圆括号()中。

另外,那对花括号{}被用来标记函数体,Rust要求所有的函数体 都要被花括号包裹起来。按照惯例,我们推荐把左花括号与函数声明 置于同一行并以空格分隔。

假如你希望在不同的项目中保持同样的编码风格,那么rustfmt可以帮助你将代码自动格式化为约定的风格。如果Rust版本大于等于1.24,你可以直接在命令行输入rustfmt --version查看Rustfmt的版本

再来看一看main函数体中的代码:

println!("Hello, world!");

这一行代码完成了整个程序的所有工作:将字符串输出到终端 上。这里有4个需要注意的细节。

首先,标准Rust风格使用4个空格而 不是Tab来实现缩进。

其次,我们调用了一个被叫作println! 的宏。假如我们调用的是 一个普通函数,那么这里会以去掉 ! 符号的println来进行标记。我们会在第19章对Rust宏进行深入地讨论,现在你只需要记住,Rust中所 有以 ! 结尾的调用都意味着你正在使用一个宏而不是普通函数。

再次,你可以看到"Hello, world!"字符串本身。我们把这个字符 串作为参数传入了println!,并最终将它显示到了终端屏幕上。

最后,我们使用了一个分号(; )作为这一行的结尾,它表明当前的表达式已经结束,而下一个表达式将要开始。大部分的Rust代码行都会以分号来结尾。

编译:

rustc main.rs

运行

./main // windows下.\main.exe

输出如下:
Hello, world!

包管理和构建工具cargo

在终端输入如下所示的命令来检查Cargo是否已经被安装妥当:

$ cargo --version

当你看到上面的命令输出了一串版本号时,那么就表示一切正 常,Cargo可以正常使用了。但如果你看到了类似于command not found的错误提示信息,那么你需要重新安装一下rust。

当安装rust时,Cargo默认会一起被安装

使用Cargo创建一个项目

进入rust_learn目录, 运行如下所示的命令:

$ cargo new hello_cargo
$ cd hello_cargo

第一条命令会创建一个名为hello_cargo 的项目。由于我们将这 个项目命名为hello_cargo ,所以Cargo会以同样的名字创建项目目录 并放置它生成的文件。 现在,让我们进入hello_cargo 文件夹,你可以看到Cargo刚刚生成的两个文件与一个目录:一个名为Cargo.toml 的文件,以及一个名 为main.rs 的源代码文件,该源代码文件被放置在src 目录下。与此同时,Cargo还会初始化一个新的Git仓库并生成默认的.gitignore 文件。

Cargo.toml

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

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

[dependencies]

Cargo使用TOML(Tom's Obvious, Minimal Language)作为标准的配置格式,正如这里的Cargo.toml 一样。 首行文本中的[package]是一个区域标签,它表明接下来的语句会被用于配置当前的程序包。随着我们在这个文件中增加更多的信息,你还会见识到更多其他的区域 (section)。

紧随标签后的3行语句提供了Cargo编译这个程序时需要的配置信 息,它们分别是程序名、版本号及作者信息。在Cargo生成Cargo.toml 的过程中,它会尝试着从环境变量中获得你的名字与电子邮箱,但如果这些生成的信息与实际情况不符,你也可以直接修改并保存这个文件。我们会在附录E中讨论这里的edition字段。

最后一行文本中的[dependencies]同样是一个区域标签,它表明随后的区域会被用来声明项目的依赖。在Rust中,我们把代码的集合 称作包(crate) 。

crate是Rust中最小的编译单元,package是单个或多个crate的集 合,crate和package都可以被叫作包,因为单个crate也是一个package,但 package通常倾向于多个crate的组合。

使用Cargo构建和运行项目

在当前的hello_cargo 项目目录下,Cargo可以通过下面的命 令来完成构建任务:

$ cargo build
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 1.83s

与之前不同,这个命令会将可执行程序生成在路径

target/debug/hello_ cargo ( 或 者 Windows 系 统 下 的 target\debug\hello_cargo.exe )

下。你可以通过如下所示的命令运行这个可执行程序试试看:

$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
Hello, world!

我们也可以简单地使用cargo run命令来依次完成编译和运行任务:

$ cargo run
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.55s
Running `target\debug\hello_cargo.exe`
Hello, Cargo!

另外,Cargo还提供了一个叫作cargo check的命令,你可以使用 这个命令来快速检查当前的代码是否可以通过编译,而不需要花费额外的时间去真正生成可执行程序:

$ cargo check
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in
0.07s

发布项目

你可以使用命令cargo build -- release在优化模式下构建并生成可执行程序。它生成的可执行文件会被放置在target/release 目录下,而不是之前的target/debug 目录 下。这种模式会以更长的编译时间为代价来优化代码,从而使代码拥有更好的运行时性能。