01_Rust开发环境准备

安装rust环境

windows安装

rustup 是 Rust 的安装程序,也是它的版本管理程序。使用rustup来进行安装。

我是在windows上进行安装。在 RUSTUP-INIT 下载系统相对应的 Rust 安装程序,一路默认即可。其中第一步中默认的需要安装Microsoft C++ Build Tools的C++环境。准备好 C++ 环境后开始安装 Rust。一路默认,就安装完成。

(我在下载的时候下载速度非常慢。)

下载速度慢解决方法

参考windows安装配置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

image-20241105162622553

更新

更新 Rust,在终端执行以下命令即可更新:

$ rustup update

卸载

要卸载 Rust 和 rustup,在终端执行以下命令即可卸载:

$ rustup self uninstall

检查安装是否成功

image-20241105163035328

运行 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 项目主要分为两个类型:binlib,前者是一个可运行的项目,后者是一个依赖库项目。

项目结构:

.
├── .git
├── .gitignore
├── Cargo.toml
└── src
    └── main.rs

运行项目

cargo run

image-20241105165640727

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 runcargo build 不可避免的会变慢,有没有更快的方式来验证代码的正确性呢?

cargo check 是我们在代码开发过程中最常用的命令,它的作用很简单:快速的检查一下代码能否编译通过。因此该命令速度会非常快,能节省大量的编译时间。

image-20241105171009500

cargo.toml 和 cargo.lock

cargo.toml 和 cargo.lock是cargo的核心文件,他的所有活动均基于此二者。

  • Cargo.tomlcargo 特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml
  • Cargo.lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单,因此我们一般不用修改它,只需要对着 Cargo.toml 文件撸就行了。

什么情况下该把 Cargo.lock 上传到 git 仓库里? 当你的项目是一个可运行的程序时,就上传 Cargo.lock,如果是一个依赖库项目,那么请把它添加到 .gitignore 中。

package 配置段落

package 中记录了项目的描述信息,典型的如下:

image-20241105172129111

name 字段定义了项目名称,version 字段定义当前版本,新项目默认是 0.1.0edition 字段定义了我们使用的 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'

posted @ 2024-11-11 18:49  彬彬zhidao  阅读(8)  评论(0编辑  收藏  举报