[TOC]
开发环境安装
无论使用何种系统, 均可以根据 Rust 官方网站提供的 rustup-init 工具完成 Rust 的安装. rustup-init 下载地址:
https://www.rust-lang.org/zh-CN/tools/install.
网站会自动识别你的操作系统并给出提示, 遵循网站提示一步一步执行即可.
当安装完成后, 可使用以下命令进行测试, 如果正确输出版本号则表明安装已经成功.
代码语言:javascript复制$ rustc --version
- Tips:如果你使用的是 Linux 系统, 那么在 rustup-init 运行完成后它会在命令行中提示你将软件安装目录加入 PATH 环境变量中. 对于 Windows 系统来说不需要这一步.
开发工具
使用 vscode 并配置 rust-analyzer 插件在目前看来是一个比较好的选择.
- 安装 vscode
- 在 vscode 的插件市场中, 安装 rust-analyzer 插件
rust-analyzer 包含代码提示, 代码检查, 自动补全等多种功能. 你可能会注意到在插件市场中存在一个标了小星星的名字就叫 Rust 的插件, 它的下载量与安装量都远远高于 rust-analyzer, 那么为什么不选择使用它呢? 因为这个排名第一的 Rust 插件底层使用的是名为 rls 的 Rust 前端, 由于 rls 本身性能过于捉急, 在 2020 年的时候社区推出了 rust-analyzer 项目并旨在全面替换掉 rls. 在体验上, rust-analyzer 要远远好于 rls.
Hello World
Cargo 是 Rust 默认的项目管理工具, 它几乎会贯穿你的整个 Rust 开发周期, 包括项目的创建, 引入第三方库, 编译, 测试和运行等. 使用如下命令可以创建一个新的 Rust 工程,rust-learn为工程名称:
代码语言:javascript复制$ cargo new rust-learn
- Cargo 默认会携带
--bin
参数, 这意味着该项目是一个二进制程序. 如果要创建一个库, 我们需要传递--lib
.
生成的项目目录结构如下:
代码语言:javascript复制.
├── Cargo.toml
└── src
└── main.rs
- Cargo.toml 是项目的描述文件, 它里面保存了项目的依赖库, 项目的名称, 版本号等信息
- src 是源码目录
- src/main.rs 是项目的入口点
Cargo.toml的内容:
代码语言:javascript复制[package]
name = "rust-learn" # 项目名称
version = "0.1.0" # 版本号
edition = "2018" # 最新的rust edition版本,即语法稳定版本
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
# 依赖声明
[dependencies]
main.rs的内容:
代码语言:javascript复制fn main() {
println!("Hello, world!");
}
使用如下命令可以编译并运行项目:
代码语言:javascript复制$ cd rust-learn
$ cargo run
Compiling rust-learn v0.1.0 (W:WorkSpaceRustrust-learn)
Finished dev [unoptimized debuginfo] target(s) in 0.79s
Running `targetdebugrust-learn.exe`
Hello, world!
Cargo 里面有许多有用的命令, 一些常用的命令包括:
cargo new
生成新的项目模板cargo build
构建项目, 生成可执行文件或依赖cargo run
构建并运行项目cargo test
运行测试用例cargo check
检查项目代码, 由于 Rust 编译较慢, 因此在开发中常用 check 代替 build 命令cargo doc
生成项目文档cargo publish
将库发布到 crates.io
除了以上 cargo 自带的命令外, cargo 还支持安装额外的扩展命令, 例如格式化工具. rustfmt 是一个可以自定义风格的 rust 代码格式化工具, 使用如下命令安装它:
代码语言:javascript复制$ rustup component add rustfmt
在项目根目录输入以下命令, 会自动格式化项目内的全部 Rust 源文件:
代码语言:javascript复制$ cargo fmt