安裝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
更新
更新 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'
。