安装rust环境
windows安装
rustup
是 Rust 的安装程序,也是它的版本管理程序。使用rustup来进行安装。
我是在windows上进行安装。在 RUSTUP-INIT 下载系统相对应的 Rust 安装程序,一路默认即可。其中第一步中默认的需要安装Microsoft C++ Build Tools的C++环境。准备好 C++ 环境后开始安装 Rust。一路默认,就安装完成。
(我在下载的时候下载速度非常慢。)
下载速度慢解决方法
设置环境变量
RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
RUSTUP_HOME=D:\rust\.rustup
CARGO_HOME=D:\rust\.cargo
更新
更新 Rust,在终端执行以下命令即可更新:
$ rustup update
卸载
要卸载 Rust 和 rustup
,在终端执行以下命令即可卸载:
$ rustup self uninstall
检查安装是否成功
运行 rustup doc
让浏览器打开本地文档。
使用vscode编辑器开发
安装rust的插件
rust-analyzer
安装完成后,在第一次打开 Rust 项目时,需要安装一些依赖,具体的状态在左下角会进行提示,包括下载、代码构建、building 等。
当插件使用默认设置时,每一次保存代码,都会出进行一次重新编译。
Even Better TOML
,支持 .toml 文件完整特性Error Lens
, 更好的获得错误展示One Dark Pro
, 非常好看的 VSCode 主题CodeLLDB
, Debugger 程序
认识Cargo
Rust
吸收了多个语言的包管理优点,提供了包管理工具Cargo
。
cargo
提供了一系列的工具,从项目的建立、构建到测试、运行直至部署,为 Rust 项目的管理提供尽可能完整的手段。同时,与 Rust 语言及其编译器 rustc
紧密结合。
创建第一个新项目
$ cargo new hello_world
$ cd world_hello
cargo默认创建bin类型的项目。
Rust 项目主要分为两个类型:bin
和 lib
,前者是一个可运行的项目,后者是一个依赖库项目。
项目结构:
.
├── .git
├── .gitignore
├── Cargo.toml
└── src
└── main.rs
运行项目
cargo run
cargo run
首先对项目进行编译,然后再运行,因此它实际上等同于运行了两个指令,下面我们手动试一下编译和运行项目:
编译
$ cargo build
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
运行
$ ./target/debug/world_hello
Hello, world!
想要高性能的代码怎么办? 添加 --release
来编译:
cargo run --release
cargo build --release
试着运行一下我们高性能的 release
程序:
$ ./target/release/hello_world
Hello, world!
- 手动编译和运行项目
cargo check
当项目大了后,cargo run
和 cargo build
不可避免的会变慢,有没有更快的方式来验证代码的正确性呢?
cargo check
是我们在代码开发过程中最常用的命令,它的作用很简单:快速的检查一下代码能否编译通过。因此该命令速度会非常快,能节省大量的编译时间。
cargo.toml 和 cargo.lock
cargo.toml 和 cargo.lock是cargo的核心文件,他的所有活动均基于此二者。
Cargo.toml
是cargo
特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建Cargo.toml
。Cargo.lock
文件是cargo
工具根据同一项目的toml
文件生成的项目依赖详细清单,因此我们一般不用修改它,只需要对着Cargo.toml
文件撸就行了。
什么情况下该把 Cargo.lock
上传到 git 仓库里? 当你的项目是一个可运行的程序时,就上传 Cargo.lock
,如果是一个依赖库项目,那么请把它添加到 .gitignore
中。
package 配置段落
package
中记录了项目的描述信息,典型的如下:
name
字段定义了项目名称,version
字段定义当前版本,新项目默认是 0.1.0
,edition
字段定义了我们使用的 Rust 大版本。
定义项目依赖
使用 cargo
工具的最大优势就在于,能够对该项目的各种依赖项进行方便、统一和灵活的管理。
在 Cargo.toml
中,主要通过各种依赖段落来描述该项目的各种依赖项:
- 基于 Rust 官方仓库
crates.io
,通过版本说明来描述 - 基于项目源代码的 git 仓库地址,通过 URL 来描述
- 基于本地项目的绝对路径或者相对路径,通过类 Unix 模式的路径来描述
这三种形式具体写法如下:
[dependencies]
rand = "0.3"
hammer = { version = "0.5.0"}
color = { git = "https://github.com/bjz/color-rs" }
geometry = { path = "crates/geometry" }
下载依赖很慢
开启命令行或全局代理
或者是修改rust的下载镜像为国内的镜像地址。
为了使用 crates.io
之外的注册服务,我们需要对 $HOME/.cargo/config.toml
($CARGO_HOME 下) 文件进行配置,添加新的服务提供商,有两种方式可以实现:增加新的镜像地址和覆盖默认的镜像地址。
增加新的镜像地址
首先是在 crates.io
之外添加新的注册服务,在 $HOME/.cargo/config.toml
(如果文件不存在则手动创建一个)中添加以下内容:
[registries]
ustc = { index = "https://mirrors.ustc.edu.cn/crates.io-index/" }
这种方式只会新增一个新的镜像地址,因此在引入依赖的时候,需要指定该地址,例如在项目中引入 time
包,你需要在 Cargo.toml
中使用以下方式引入:
[dependencies]
time = { registry = "ustc" }
在重新配置后,初次构建可能要较久的时间,因为要下载更新 ustc
注册服务的索引文件,由于文件比较大,需要等待较长的时间。
此处有两点需要注意:
- cargo 1.68 版本开始支持稀疏索引,不再需要完整克隆 crates.io-index 仓库,可以加快获取包的速度,如:
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
- cargo search 无法使用镜像
覆盖默认的镜像地址
事实上,我们更推荐第二种方式,因为第一种方式在项目大了后,实在是很麻烦,全部修改后,万一以后不用这个镜像了,你又要全部修改成其它的。
而第二种方式,则不需要修改 Cargo.toml
文件,因为它是直接使用新注册服务来替代默认的 crates.io
。
在 $HOME/.cargo/config.toml
添加以下内容:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
首先,创建一个新的镜像源 [source.ustc]
,然后将默认的 crates-io
替换成新的镜像源: replace-with = 'ustc'
。