当你开始学习 Rust 时,很快就会遇到 Cargo
,它是 Rust 生态系统中用于构建和运行 Rust 应用程序的标准工具。在 《Rust 易学教程》 首篇中,我会简要概述一下 Cargo 是什么,以及它如何适应更广泛的生态系统。
安装
请按照 https://rustup.rs/ 上的说明操作。在终端中运行以下命令,然后按照说明操作。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
这将提供 Cargo 构建工具(Cargo)和 Rust 编译器(rustc
)。同时,你还将获得 rustup
,它是一个命令行程序,你可以使用它安装不同的编译器版本。
在安装 Rust 之后,你应该配置你的编辑器或IDE来使用 Rust。大多数编辑器通过与rust-analyzer
来实现这一点,rust-analyzer
为VS Code、Emacs、Vim/Neovim和许多其他编辑器提供自动完成和跳转到定义功能。还有一个你可能没听说的 IDE 叫做[RustRover](https://www.jetbrains.com/rust/)
。
在 Debian/Ubuntu 上,你也可以通过 apt 安装 Cargo、Rust 源代码和 Rust 格式化程序。然而,这会让你得到一个过时的 Rust 版本,并可能导致意想不到的行为。命令如下:
sudo apt install cargo rust-src rustfmt
Rust 生态
Rust 的生态系统由许多工具组成,其中主要的是:
rustc
: Rust 编译器,将.rs
文件转换为二进制文件和其他中间格式。cargo:
Rust 依赖管理器和构建工具。Cargo 知道如何下载依赖项(通常托管在https://crates.io
上),并且在构建项目时将它们传递给 rust。Cargo 还带有一个内置的测试运行器,用于执行单元测试。rustup
:Rust 工具链安装程序和更新程序。此工具用于在发布新版本的 Rust 时安装和更新 Rust 和 cargo。此外,rust 还可以下载标准库的文档。你可以同时安装多个版本的 Rust,并且 Rust 可以让你根据需要在它们之间进行切换。
- Rust 有一个快速的发布计划,每六周发布一个新版本。新版本保持了与旧版本的向后兼容性,而且它们还支持新功能。
- 有三个发布渠道: “stable”, “beta”, 和 “nightly”。
- 新功能是 “nightly” 测试,“beta” 是每六周 “stable”一次。
- 还可以从其他注册表、git、文件夹等中解析依赖项。
- Rust 也有版本: 当前的版本是 Rust 2021。之前的版本是 Rust 2015 和 Rust 2018
- 允许版本对语言进行向后不兼容的更改。
- 为了防止破坏代码,版本是可选择的: 你可以通过 Cargo.toml 文件为你的 crate 选择版本。
- 为了避免分裂生态系统,Rust 编译器可以混合为不同版本编写的代码。
- 值得一提的是,不通过 cargo 直接使用编译器是非常罕见的,大多数用户从不这样做。
- Cargo本身是一个非常强大和全面的工具。它具有许多高级功能,包括但不限于:
- Project/package structure
- workspaces
- 开发依赖和运行时依赖管理/缓存
- 构建脚本
- 全局安装
- 它还可以通过子命令插件(如cargo clippy)进行扩展。
更多阅读,请参考官方的 Cargo 手册。
Rust 代码示例
《Rust 易学教程》 中,我们将主要通过可以通过浏览器执行的示例来探索 Rust 语言。这样能使得配置更容易,并确保每个人都有一致的体验。
但我仍然鼓励你安装 Cargo: 它将使你更容易进行练习。在教程的最后一部分,我们将做一个更大的练习,向你展示如何使用依赖关系,为此需要使用到 Cargo。
fn main() {
println!("Edit me!");
}
使用 Cargo 在本地运行代码
如果你想在自己的电脑上试验这些代码,你需要首先安装Rust。按照 Rust Book 中的说明进行操作。在撰写本教程时,最新的稳定 Rust 版本号如下:
% rustc --version
rustc 1.69.0 (84c898d65 2023-04-16)
% cargo --version
cargo 1.69.0 (6e9a83356 2023-04-12)
你也可以使用任何更高的版本,因为 Rust 保持向后兼容性。
在此基础上,按照以下步骤从本文中的一个示例构建 Rust 二进制文件:
- 单击要复制的示例上的“复制到剪贴板”按钮。
- 使用
cargo new exercise
为你的代码创建一个新的exercise/
目录:
$ cargo new exercise
Created binary (application) `exercise` package
- 导航到
exercise/
并使用cargo run
来构建和运行二进制文件:
$ cd exercise
$ cargo run
Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)
Finished dev [unoptimized + debuginfo] target(s) in 0.75s
Running `target/debug/exercise`
Hello, world!
- 用你自己的代码替换
src/main.rs
中的代码。例如:
fn main() {
println!("Edit me!");
}
- 使用
cargo run
来构建并运行更新后的二进制文件:
$ cargo run
Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)
Finished dev [unoptimized + debuginfo] target(s) in 0.24s
Running `target/debug/exercise`
Edit me!
- 使用
cargo check
快速检查项目的错误,使用cargo build
编译它而不运行它。对于正常的调试构建,将在target/debug/
中找到输出。使用cargo build -release
在target/release/
中生成一个优化的release build
。 - 你可以通过编辑
Cargo.toml
为你的项目添加依赖项。当运行cargo
命令时,它将自动为你下载并编译缺少的依赖项。