01_Rust開發環境準備

彬彬zhidao發表於2024-11-11

安裝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'

相關文章