简介
这里简单介绍如何安装。
安装
在 Rust Install 中提供了相关的安装方式,在 Linux 中提供了一个简单的安装脚本,会适配不同的平台。
如果只能离线安装,那么可以参考 Other Rust Installation Methods 中对应的包,也就是 Standalone installers 段落中的内容,一般是 x86_64-unknown-linux-gnu
包,解压之后查看 README.md
有对应的离线安装方法,一般是:
----- 安装Rust
# bash install.sh
----- 卸载Rust
# /usr/local/lib/rustlib/uninstall.sh
默认会安装到 /usr/local
目录下,例如二进制文件在 /usr/local/bin
目录下,库文件在 /usr/local/lib
目录下等等,所以,需要将相关的路径添加到对应环境变量中,例如 PATH
。
安装完成后可以通过如下命令查看其版本号信息。
$ rustc --version
rustc 1.45.0 (5c1f21c3b 2020-07-13)
$ cargo --version
cargo 1.45.0 (744bd1fbb 2020-06-15)
注意,编译时是需要 gcc
工具链中的 cc
命令。
Hello World
简单打印相关的信息。
$ cat main.rs
fn main() {
println!("Hello World!!!");
}
$ rustc main.rs
$ ./main
Hello World!!!
RustUp
除了上述的二进制安装方式之外,官方推荐的是 RustUp 这个工具,不仅可以维护多个版本,还可以按需在不同版本之间切换。
国内源配置
国外的源都比较慢,这里增加如下字节的配置,详细可以参考 rsproxy.cn 的介绍。
$ cat ~/.cargo/config
[source.crates-io]
replace-with = 'rsproxy'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[http]
check-revoke = false # 是否检查SSL证书废除
proxy="http://user_name:user_password@proxy.example.com:8090"
[https]
proxy="http://user_name:user_password@proxy.example.com:8090"
[net]
git-fetch-with-cli = true
----- 使用国内镜像加速 Rustup 工具链
$ cat ~/.bashrc
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_SERVER="https://rsproxy.cn/rustup"
注意,如果在 [net]
中配置了 git-fetch-with-cli=true
也就是通过 git 客户端下载,那么就需要注意 http.proxy
和 https.proxy
两个参数。
另外,当代理的用户名密码有特殊字符时需要进行配置,详见 HTTP/HTTPS 代理协议 中的介绍。
其它还可以参考 中科大、清华 的代理,配置完之后可以通过如下命令安装。
curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh
一般是通过 rustup-init.sh
脚本安装,默认安装到 ~/.cargo
目录下,安装完成后通过 source ~/.cargo/env
加载相关的环境变量即可,也就是将 ~/.cargo/bin
添加到 PATH
环境变量中,默认也会添加到 ~/.bashrc
文件中,可以通过 rustc --version
以及 cargo --version
查看版本以及是否安装成功。
常用命令
----- 安装stable的最新版本,一般每六周发布一次
$ rustup update
----- 更新rustup自己、删除
$ rustup self update
$ rustup self uninstall
----- 安装日更版
$ rustup toolchain install nightly
----- 删除指定版本
$ rustup toolchain uninstall 1.22.1
----- 查看当前支持的版本,并切换
$ rustup toolchain list
$ rustup default nightly
其它
默认会安装到 ~/.cargo
和 ~/.rustup
目录下,可以在安装前通过 CARGO_HOME
和 RUSTUP_HOME
分别进行配置。注意,此时配置文件路径同时修改为 $CARGO_HOME/config
文件。
另外,在 1.38
版本之后,需要将 config
修改为 config.toml
文件。
Rustup 工具集除了上述的默认配置外,还可以参考 Overrides 中的介绍。
编译优化
通过 cargo build --timings
或者 cargo +nightly build -Ztimings
可以查看项目的编译耗时,结果在 target/cargo-timings
目录下,其中橙色是 build.rs
自定义编译,薰衣草色是 codegen
耗时。
依赖管理,默认会将所有的依赖进行编译,即使实际代码没有使用,可以通过 cargo-udeps
或者 cargo-machete
,区别是前者检查会进行编译,对于 CI 不太友好,而后者通过正则处理,有时候可能会误判。
连接器
默认的 GCC gold
连接器耗时比较长,可以通过 LLVM lld
甚至 mold
进行优化。在 ~/.cargo/config.toml
中添加如下内容。
[target.x86_64-unknown-linux-gnu]
linker = "clang-17"
rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"]
在 Fedora 中可以通过 yum install clang17 mold
安装 clang
编译器。
其中具体的平台架构可以通过 rustup toolchain list
简单查看,相关配置通过 rustc +nightly -Zunstable-options --print all-target-specs-json
命令查看。
缓存
缓存中间结果,类似 ccache
的功能,可以通过 rust-cache
或者 sccache
实现,前者在 CI 中使用比较多,这里介绍后者,除了 Rust 之外,在 C/CPP 中也可以使用。
通过 cargo install sccache
安装,默认缓存在 ~/.cache/sccache
目录下,可以通过 SCCACHE_DIR
配置。使用时可以通过 export RUSTC_WRAPPER=/path/to/sccache
设置环境变量,或者在 Cargo.toml
以及本地的 config.toml
中添加如下内容。
[build]
rustc-wrapper = "/path/to/sccache"
可以通过 sccache --show-stats
查看缓存的统计。
其它
随着 Crate 数量越来越多,单纯的索引成本已经比较高,可以通过如下方式设置稀疏索引。
[registry.crates-io]
protocol = "sparse"
可以通过 RUSTFLAGS="-Cincremental=true" cargo run
环境变量,或者上述在 config.toml
类似的方式配置编译参数,不过增量编译不太好用。
常用工具
Cargo
很多自命令可以通过 cargo --list
查看,如下是常用的命令:
cargo tree
打印包的依赖树。cargo fmt
官方提供的格式化工具,
三方工具
除了自带的标准命令之外,还可以通过 cargo install
方式安装一些三方的插件,通常是命令行,以 cargo-xxx
方式命名,例如代码覆盖率工具 tarpaulin
可以通过如下方式安装。
cargo install cargo-tarpaulin
会安装到 $CARGO_HOME/bin
目录下,默认为 ~/.cargo/bin
目录。
tarpaulin
代码覆盖率工具,可以生成命令行、页面等结果。nextest
相比原生的测试输出要更加漂亮。tokei
代码统计工具,注意,安装后这个命令是独立运行的,例如tokei -t=Rust dir
。
三方库
criterion.rs
性能压测常用库,其中 Tokio 在使用。derive_builder
通过注解方式引入 Builder 模式,