Hello Cargo
2023-07-07
2分钟阅读时长
Hello Rust
Editor
主流编辑器均支持 Rust 语言。此处仅讨论 Emacs
中如何获得 Rust 支持。
首先,可以通过 melpa
安装 rust-mode
,基本配置如下:
(use-package rust-mode
:ensure t
:mode ("\\.rs\\'" . rust-mode)
:hook
(rust-mode . (lambda () (setq tab-width 4)))
)
其次,Rust 代码风格不支持 tab
,而是将缩进映射为 4 个空格,可以默认禁用 tab
,例如作如下配置:
(setq-default tab-width 4
indent-tabs-mode nil)
Hello World
Rust 命名风格:
- Rust 文件通常以
.rs
结尾。 - 如果文件名中使用了多个单词,应 使用下划线隔开 。
- 左括号与函数声明建议在同一行,且带有一个空格。
fn main() {
println!("Hello, world!");
}
Hello Cargo
What's cargo
Cargo 是 Rust 的构建系统和包管理器。
官方建议 Rustacean 使用 Cargo 来管理他们的 Rust 项目,用于:
- 创建项目
- 构建代码
- 下载依赖库
- 编译依赖库
- 运行测试
- 代码检查
创建项目的命令如下:
cargo new hello_cargo
cd hello_cargo
- 一般地,
cargo
会初始化git
仓库,并带有.gitignore
文件。 - 特别地,在
Git
仓库中运行cargo
命令不会生成子仓库,除非使用cargo new --vcs=git
无视此限制。
Cargo config
Cargo 配置的项目一般包含一个 cargo.toml
文件,用于描述 cargo 的配置。它是 TOML (Tom's Obvious, Minimal Language) 格式。
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
[dependencies]
注释:
[package]
,是一个表块(section)标题,表明下面的语句用来配置一个包(package)。edition
,指的是 Rust 语言的版本。每 6 周 Rust 发布一个小更新,每 2-3 年 Rust 生成一个新的版本。[dependencies]
,指明项目所依赖的任何包,它们被称为crate
。
Cargo dependency
包与 Crate 的概念
- crate 是 Rust 代码编译单元,它可以是库或者二进制
- 包对应一个项目/代码仓库,它可以包含一个或多个 crate
- 有关更详细的内容,见 Package And Crate 小节
新增外部依赖的方式:
[dependencies]
rand = "0.8.5"
Cargo 理解语义化版本(Semantic Versioning,有时也称为 SemVer)
- 语义化是一种定义版本号的标准
-
小版本与大版本
- 0.X 是大版本
- 0.X.Y 是小版本
- 小版本具有兼容的公有 API
- 0.8.5 实际上是 ^0.8.5 的简写,它表示任何至少包含 0.8.5 但低于 0.9.0 的版本
- 0.9.0 或更高版本则不再确保 API 相同
Cargo command
cargo build
命令会在target/debug/hello_cargo
下创建一个可执行文件。cargo run
命令会一次性完成编译并执行过程。cargo check
命令用于快速检查代码,它 不 产生可执行文件。-
cargo fix
命令用于修复代码常见问题- 语言本身版本升级带来的 API 变化
- 依赖版本过时时自动更新
- 自动应用一些 lint 规则建议,如代码风格与错误处理
- 特别注意,对于依赖包的 API 变化,本命令 无法修改
cargo doc --open
命令构建本地依赖提供的文档