1、简介
Rust 是一门赋予每个人构建可靠且高效软件能力的语言。
1.1 为什么选择Rust
高性能
Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
可靠性
Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
生产力
Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
1.2 用 Rust 构建应用
命令行
使用 Rust 强大的生态系统快速实现命令行工具。Rust 可助您放心维护,轻松分发应用程序。
WebAssembly
使用 Rust 来逐个增强您的 JavaScript 模块。发布到 npm,使用 webpack 打包,即可感受到惊人的速度提升。
网络
可预见的性能,极小的资源占用,坚如磐石的可靠性。Rust 极其适合网络服务。
嵌入式
针对资源匮乏的设备?需要底层控制而又不失上层抽象的便利?Rust 包您满意!
2、安装 Rust
第一步是安装 Rust。我们会通过 rustup
下载 Rust,这是一个管理 Rust 版本和相关
工具的命令行工具。下载时需要联网。
在 Windows 上,前往 https://www.rust-lang.org/install.html 并按照说明安装 Rust。在安装过程的某个步骤,你会收到一个信息说明为什么需要安装 Visual Studio 2013 或其更新版本的 MSVC 构建工具。
要获取构建工具,你需要安装 Visual Studio 2022。当被问及需要安装什么工作负载(Workload)的时候,请确保勾选了以下内容:
- “使用 C++ 的桌面开发”(“Desktop Development with C++”)
- Windows 10(或 11)SDK
- 英语语言包,以及其他你所需要的语言包
在以下页面地址下载,进行安装:安装 Rust - Rust 程序设计语言
Windows 的 Linux 子系统(WSL)
如果您是 Windows 的 Linux 子系统(WSL)用户,要安装 Rust,请在终端中运行以下命令,然后根据屏幕上的指示完成。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
检查Rust 是最新的
Rust 的升级非常频繁。如果您安装 Rustup 后已有一段时间,那么很可能您的 Rust 版本已经过时了。运行 rustup update
获取最新版本的 Rust。
rustup update
查看当前Rust版本:
rustc --version
卸载Rust版本:
rustup self uninstall
Cargo:Rust 的构建工具和包管理器
您在安装 Rustup 时,也会安装 Rust 构建工具和包管理器的最新稳定版,即 Cargo。Cargo 可以做很多事情:
cargo build
可以构建项目cargo run
可以运行项目cargo test
可以测试项目cargo doc
可以为项目构建文档cargo publish
可以将库发布到 crates.io。
要检查您是否安装了 Rust 和 Cargo,可以在终端中运行:
cargo --version
3、配置PATH环境变量
在Rust开发环境中,所有工具都安装到~/.cargo/bin目录中,在这里您可以找到Rust工具链,包括rustc、cargo和rustup。
因此,Rust开发人员习惯于将此目录包含在他们的PATH环境变量中。在安装过程中,rustup将尝试配置PATH。由于平台、命令外壳和rustup中的错误之间的差异,对PATH的修改可能在控制台重新启动或用户注销之前不会生效,或者根本不会成功。
如果安装后,在控制台运行rustc--version失败,这是最有可能的原因。
4、开发工具对Rust的支持。
VSCode
您可以通过Extensions视图(Ctrl+Shift+X)从VS Code中查找并安装rust-analyzer扩展并搜索'rust-analyzer'。选择对应的版本进行安装。
主要功能有:
- 导入插入的代码补全
- 转到定义、实现、类型定义
- 查找所有引用,工作区符号搜索,符号重命名
- 悬停时的类型和文档
- 类型和参数名称的嵌入提示
- 语义句法高亮
- 大量辅助(代码操作)
- 从错误中应用建议
- ...还有更多,请查看手册查看全部内容
5、编写第一个Rust程序
接下来,新建一个源文件,命名为 main.rs。Rust 源文件总是以 .rs 扩展名结尾。如果文件名包含多个单词,那么按照命名习惯,应当使用下划线来分隔单词。例如命名为 hello_world.rs
fn main() { println!("Hello, world!"); }
然后开始编译和运行:
rustc main.rs
编译之后会多出2个新的文件,然后运行编译后的可执行文件(main.exe)。
./main.exe
分析这个 Rust 程序
fn main() { }
这几行定义了一个名叫 main
的函数。main
函数是一个特殊的函数:在可执行的 Rust 程序中,它总是最先运行的代码。第一行代码声明了一个叫做 main
的函数,它没有参数也没有返回值。如果有参数的话,它们的名称应该出现在小括号 ()
中。
函数体被包裹在 {}
中。Rust 要求所有函数体都要用花括号包裹起来。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
在 main
函数中有如下代码:
fn main() { println!("Hello, world!"); }
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。
第二,println!
调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println
(没有!
)。我们将在第十九章详细讨论宏。现在你只需记住,当看到符号 !
的时候,就意味着调用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。
第三,"Hello, world!"
是一个字符串。我们把这个字符串作为一个参数传递给 println!
,字符串将被打印到屏幕上。
第四,该行以分号结尾(;
),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以分号结尾。
6、使用 Cargo 创建项目
Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。
首先可以查看下,本地是否已安装cargo,如下所示:
cargo --version
然后,开始创建项目:
cargo new hello_cargo
进入 hello_cargo 目录并列出文件。将会看到 Cargo 生成了四个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件,一个.git文件夹,一个.gitignore文件。
Cargo.toml 文件这是 Cargo 配置文件的格式。文件内容如下所示:
[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项目
我们可以通过以下命令进行构建,如下所示:
cargo build
该命令会生成target目录,会创建一个可执行文件 target/debug/hello_cargo (在 Windows 上是 target\debug\hello_cargo.exe)
我们可以执行对应路径下的可执行文件,如下所示:
我们刚刚使用 cargo build
构建了项目,并使用 ./target/debug/hello_cargo
运行了程序,也可以使用 cargo run
在一个命令中同时编译并运行生成的可执行文件:
cargo run
Cargo 还提供了一个叫 cargo check
的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:
为什么你会不需要可执行文件呢?通常 cargo check
要比 cargo build
快得多,因为它省略了生成可执行文件的步骤。如果你在编写代码时持续的进行检查,cargo check
可以让你快速了解现在的代码能不能正常通过编译!为此很多 Rustaceans 编写代码时定期运行 cargo check
确保它们可以编译。当准备好使用可执行文件时才运行 cargo build
。
发布(release)构建
当项目最终准备好发布时,可以使用 cargo build --release
来优化编译项目。这会在 target/release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 cargo build --release
并使用 target/release 下的可执行文件进行测试。
cargo build --release
然后运行,release目录下的可执行文件就行,如下图所示: