自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Gopher的Rust第一課:建立Rust開發(fā)環(huán)境

開發(fā) 前端
ust.vim是Rust團隊官方維護的vim插件,用于提供Rust文件檢測、語法高亮顯示、代碼格式化等,它需要Vim 8或更高版本才能實現(xiàn)完整功能。

經(jīng)過上一章的對Rust誕生演化的了解以及設(shè)計哲學的探討后,如果你依然決定繼續(xù)Rust編程學習之旅,那么歡迎你和我一起正式走進Rust學習和實踐的課堂。

編程不是“紙上談兵”,它是一門實踐的藝術(shù)。編程語言的學習離不開動手實踐,因此學習任何一門編程語言的第一步都是要擁有一個這門編程語言的開發(fā)環(huán)境,這樣我們才可以動手編碼,理論與實踐結(jié)合,不僅加速學習效率,還能取得更好的學習效果。

在這一章中我們就先來學習下如何安裝和配置Rust開發(fā)環(huán)境。如果你的機器上還沒有Rust開發(fā)環(huán)境,那么就請跟我一起選擇一種適合你的Rust安裝方法吧。

第一步,我們先來挑一個合適的Rust版本。

2.1 選擇Rust版本

2.1.1 Go與Rust發(fā)布版本與節(jié)奏的對比

《Go語言第一課專欄》[1]講解如何建立Go開發(fā)環(huán)境時,我首先講解的也是選擇Go版本。我們知道Go一年發(fā)布兩次大版本,分別是每年的2月和8月,并且Go核心團隊只對最近的兩個大版本提供support。在處于support時間窗口中的時候,Go核心團隊會發(fā)布一些補丁版本,修正及少量的嚴重問題或安全漏洞。比如Go 1.22版本[2]是2024年2月份發(fā)布的,到2024年4月中旬,Go 1.22的最新補丁版本已經(jīng)到了Go 1.22.2了。下圖展示了Go版本發(fā)布的節(jié)奏以及support的窗口:

圖片圖片

在Go中,我們可以選擇最新穩(wěn)定版(比如圖中的Go 1.22.2)和次新穩(wěn)定版(比如圖中的1.21.8),這兩個是Go社區(qū)選擇最多的。此外,也可以選擇某個特定的穩(wěn)定版(因某種特殊原因,被阻塞在該版本上)以及tip版,其中tip版(master分支上的最新commit版本)主要用于體驗最新的、尚未發(fā)布的功能特性或問題修復(fù),或是contributor多使用tip版。

Rust的版本發(fā)布節(jié)奏與Go完全不同,因此Rust版本的選擇邏輯與Go相比也就有所不同。下圖展示了Rust的版本發(fā)布方法與節(jié)奏:

圖片圖片

我們看到:Rust采用“6周一個穩(wěn)定版”的滾動發(fā)布節(jié)奏,并且有三類版本:穩(wěn)定版(stable)、公測版(beta)和nightly版,分別對應(yīng)的是stable分支、beta分支和master分支。三個版本間是關(guān)聯(lián)緊密的。

以圖中的rust 1.77.0的發(fā)布[3]為例,rust 1.77.0穩(wěn)定版本的發(fā)布動作是這樣的:

  • 基于當前beta分支(其實就是1.77.0 beta)創(chuàng)建新的stable分支,并tag 1.77.0;
  • 基于當前master分支(nightly版本)創(chuàng)建新的beta分支,并在新的beta分支上公測1.78.0版本,為六周后的1.78.0穩(wěn)定版做準備;
  • 而master分支上繼續(xù)開發(fā)v1.79.0的新特性,并每天發(fā)布Nightly版本。

之后,原1.76.0穩(wěn)定版便會從support窗口刪除,1.77.0進入Support窗口。如果新發(fā)布的1.77.0有緊急或安全問題需要修復(fù),則通過補丁(patch)版本進行,比如rust 1.77.1、1.77.2等。

Rust這種“穩(wěn)定一版,公測一版,開發(fā)一版”的“三路并發(fā)”的滾動開發(fā)節(jié)奏,顯然要比Go的“穩(wěn)定一版,開發(fā)一版”的“兩路并發(fā)”節(jié)奏要快上很多。不過,頻繁的更新可能對某些用戶來說是一個挑戰(zhàn),需要他們不斷學習和適應(yīng)新的變化。另外,較快的演進速度也可能導(dǎo)致一些不穩(wěn)定因素,需要開發(fā)者更加謹慎地使用新功能特性。

2.1.2 Rust的三類版本

選擇Rust版本根據(jù)自己的角色和面對的場合來進行:

  • 對于大多數(shù)Rust開發(fā)者而言,最新的穩(wěn)定版(stable)是最好和最明智的選擇;
  • 也有少部分因為各種特殊原因,可能阻塞在某個特定的穩(wěn)定版上;
  • Beta版contributor,或是想提前嘗鮮下一個穩(wěn)定版新特性的開發(fā)人員,可以臨時使用beta版本;
  • Nightly版,主要針對的也是contributor,或是想臨時嘗鮮最新不穩(wěn)定功能特性的開發(fā)人員。

Rust提供的安裝和升級工具rustup[4]可以靈活的在三類版本間切換:

rustup default beta
rustup default nightly
rustup default stable

切換后,rustup會自動同步該類版本到最新版:

$rustup default beta
info: syncing channel updates for 'beta-x86_64-apple-darwin'
info: latest update on 2024-04-11, rust version 1.78.0-beta.6 (27011d5dc 2024-04-09)
... ...

確定了要使用的Rust版本后,我們接下來就來看看究竟如何安裝Rust。

2.2 安裝Rust

2.2.1 使用rustup安裝

和Go盡可以通過安裝包或下載預(yù)編譯二進制包進行首次安裝不同,Rust官方提供了統(tǒng)一的Rust安裝、管理和升級工具- rustup[5]。 Rust官方在Linux和macOS上提供了“curl | sh”的一鍵式安裝命令:

$curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

我們以Linux下安裝rustup為例,看一下執(zhí)行上面命令的過程和最終結(jié)果:

$curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /root/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory is located at:

  /root/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

  /root/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /root/.profile
  /root/.bashrc

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with standard installation (default - just press enter)
2) Customize installation
3) Cancel installation

> // 敲擊回車

info: profile set to 'default'
info: default host triple is x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2024-04-09, rust version 1.77.2 (25ef9e3d8 2024-04-09)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 14.9 MiB /  14.9 MiB (100 %)   3.7 MiB/s in  3s ETA:  0s
info: installing component 'rust-std'
 24.3 MiB /  24.3 MiB (100 %)   8.2 MiB/s in  2s ETA:  0s
info: installing component 'rustc'
 60.3 MiB /  60.3 MiB (100 %)   9.6 MiB/s in  6s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu installed - rustc 1.77.2 (25ef9e3d8 2024-04-09)


Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, you need to source
the corresponding env file under $HOME/.cargo.

This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env"            # For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish"  # For fish

接下來按照提示執(zhí)行下面命令,使得Rust相關(guān)的環(huán)境變量生效:

$. "$HOME/.cargo/env"
$which rustup
/root/.cargo/bin/rustup

. "$HOME/.cargo/env"這行代碼也被追加到/root/.bashrc文件中,如果新啟動一個terminal窗口,這行shell配置也會被執(zhí)行,即rustup的環(huán)境變量也生效。

查看一下安裝的rustup的版本:

$rustup -V
rustup 1.27.0 (bbb9276d2 2024-03-08)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.77.2 (25ef9e3d8 2024-04-09)`

同時我們看到:首次安裝rustup時,如果選擇“standard installation”,rustup會為我們安裝一個最新的Rust stable版本,這里是1.77.2,我們可以通過rustup show命令查看已安裝的rust工具鏈:

$rustup show
Default host: x86_64-unknown-linux-gnu
rustup home:  /root/.rustup

stable-x86_64-unknown-linux-gnu (default)
rustc 1.77.2 (25ef9e3d8 2024-04-09)

除此之外,rustup還在你的系統(tǒng)中都做了啥呢?我們下面來探索一下。

2.2.1.1 安裝后的探索

根據(jù)rustup在安裝過程中的提示,有兩個路徑是需要重點關(guān)注的。

一個就是PATH變量下,我們來看看.cargo下都有哪些目錄和文件:

$tree -F .cargo
.cargo
|-- bin/
|   |-- cargo*
|   |-- cargo-clippy*
|   |-- cargo-fmt*
|   |-- cargo-miri*
|   |-- clippy-driver*
|   |-- rls*
|   |-- rust-analyzer*
|   |-- rustc*
|   |-- rustdoc*
|   |-- rustfmt*
|   |-- rust-gdb*
|   |-- rust-gdbgui*
|   |-- rust-lldb*
|   `-- rustup*
`-- env

.cargo下主要的目錄就是bin,這里存放了日常rust開發(fā)時在命令行使用的所有cli命令,包括cargo(構(gòu)建管理工具)、rustc(編譯器)、rustdoc、rustfmt以及rustup自身等。

另外一個更值得關(guān)注的目錄就是$HOME/.rustup目錄,這個目錄下的內(nèi)容較多,我們通過tree命令查看的結(jié)果如下:

$tree -F -L 3  .rustup
.rustup
|-- downloads/
|-- settings.toml
|-- tmp/
|-- toolchains/
|   `-- stable-x86_64-unknown-linux-gnu/
|       |-- bin/
|       |-- etc/
|       |-- lib/
|       |-- libexec/
|       `-- share/
`-- update-hashes/
    `-- stable-x86_64-unknown-linux-gnu

settings.toml是一個rustup配置文件,它的內(nèi)容如下:

$cat .rustup/settings.toml 
default_toolchain = "stable-x86_64-unknown-linux-gnu"
profile = "default"
version = "12"

[overrides]

這里的default_toolchain指示了當前默認使用的工具鏈版本為stable-x86_64-unknown-linux-gnu。這個版本也是一個target,Rust支持的不同平臺上的target以及含義如下圖:

圖片圖片

.rustup下的另外一個值得注意的目錄是toolchains,它下面存放了安裝到本地的所有版本的toolchain,上面由于只安裝了stable的最新版本,因此當前toolchains下只有一個stable-x86_64-unknown-linux-gnu目錄。

值得注意的是.rustup中存儲了rust工具鏈的所有內(nèi)容,因此它的空間占用也著實可觀:

$ du -sh .rustup
1.2G .rustup

現(xiàn)在我們來切換默認版本到beta:

$rustup default beta
info: syncing channel updates for 'beta-x86_64-unknown-linux-gnu'
info: latest update on 2024-04-11, rust version 1.78.0-beta.6 (27011d5dc 2024-04-09)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 15.1 MiB /  15.1 MiB (100 %)   3.4 MiB/s in  3s ETA:  0s
info: installing component 'rust-std'
 24.2 MiB /  24.2 MiB (100 %)   9.3 MiB/s in  2s ETA:  0s
info: installing component 'rustc'
 63.5 MiB /  63.5 MiB (100 %)   9.6 MiB/s in  6s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'beta-x86_64-unknown-linux-gnu'

  beta-x86_64-unknown-linux-gnu installed - rustc 1.78.0-beta.6 (27011d5dc 2024-04-09)

我們看到rustup會自動下載安裝最新的beta版本,安裝后,我們再執(zhí)行rustc -V來查看當前版本,我們發(fā)現(xiàn)結(jié)果已經(jīng)變?yōu)榱讼旅孢@樣:

$ rustc -V
rustc 1.78.0-beta.6 (27011d5dc 2024-04-09)

這里值得注意的是,雖然我們執(zhí)行的rustc是.cargo/bin/rustc,但.cargo/bin/rustc有些類似于一個指針,真正執(zhí)行的是其“指向”的某個工具鏈版本的rustc,我們可以使用rustup which rustc來查看究竟執(zhí)行的是哪個rustc:

$ rustup which rustc
/root/.rustup/toolchains/beta-x86_64-unknown-linux-gnu/bin/rustc

此時,.rustup目錄下面發(fā)生了怎樣的變化呢?我們來看看:

$ tree -F -L 3  .rustup
.rustup
|-- downloads/
|-- settings.toml
|-- tmp/
|-- toolchains/
|   |-- beta-x86_64-unknown-linux-gnu/
|   |   |-- bin/
|   |   |-- etc/
|   |   |-- lib/
|   |   |-- libexec/
|   |   `-- share/
|   `-- stable-x86_64-unknown-linux-gnu/
|       |-- bin/
|       |-- etc/
|       |-- lib/
|       |-- libexec/
|       `-- share/
`-- update-hashes/
    |-- beta-x86_64-unknown-linux-gnu
    `-- stable-x86_64-unknown-linux-gnu

我們看到toolchains下面多了一個beta-x86_64-unknown-linux-gnu目錄,存放的就是剛剛安裝的beta最新版本工具鏈。

現(xiàn)在我們在用rustup show命令查看已安裝的rust工具鏈,其結(jié)果如下:

$rustup show
Default host: x86_64-unknown-linux-gnu
rustup home:  /root/.rustup

installed toolchains
--------------------

stable-x86_64-unknown-linux-gnu
beta-x86_64-unknown-linux-gnu (default)

active toolchain
----------------

beta-x86_64-unknown-linux-gnu (default)
rustc 1.78.0-beta.6 (27011d5dc 2024-04-09)

現(xiàn)在,我們切換回stable版本,由于stable版本之前已經(jīng)安裝完畢,也就無需下載和安裝過程了:

$rustup default stable
info: using existing install for 'stable-x86_64-unknown-linux-gnu'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu unchanged - rustc 1.77.2 (25ef9e3d8 2024-04-09)

2.2.1.2 安裝和使用特定版本rust工具鏈

我們還可以使用rustup安裝特定版本的rust工具鏈,比如通過下面的命令,我們安裝stable版本的1.66.0:

$ rustup install 1.66.0
info: syncing channel updates for '1.66.0-x86_64-unknown-linux-gnu'
info: latest update on 2022-12-15, rust version 1.66.0 (69f9c33d7 2022-12-12)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 19.0 MiB /  19.0 MiB (100 %)   4.4 MiB/s in  3s ETA:  0s
info: installing component 'rust-std'
 29.7 MiB /  29.7 MiB (100 %)   8.1 MiB/s in  3s ETA:  0s
info: installing component 'rustc'
 68.0 MiB /  68.0 MiB (100 %)  10.2 MiB/s in  6s ETA:  0s
info: installing component 'rustfmt'

  1.66.0-x86_64-unknown-linux-gnu installed - rustc 1.66.0 (69f9c33d7 2022-12-12)

info: checking for self-update

安裝ok后,我們再來看看.rustup目錄下的變化:

$tree -F -L 3  .rustup
.rustup
|-- downloads/
|-- settings.toml
|-- tmp/
|-- toolchains/
|   |-- 1.66.0-x86_64-unknown-linux-gnu/
|   |   |-- bin/
|   |   |-- etc/
|   |   |-- lib/
|   |   |-- libexec/
|   |   `-- share/
|   |-- beta-x86_64-unknown-linux-gnu/
|   |   |-- bin/
|   |   |-- etc/
|   |   |-- lib/
|   |   |-- libexec/
|   |   `-- share/
|   `-- stable-x86_64-unknown-linux-gnu/
|       |-- bin/
|       |-- etc/
|       |-- lib/
|       |-- libexec/
|       `-- share/
`-- update-hashes/
    |-- 1.66.0-x86_64-unknown-linux-gnu
    |-- beta-x86_64-unknown-linux-gnu
    `-- stable-x86_64-unknown-linux-gnu

我們看到toolchains下面多了一個1.66.0-x86_64-unknown-linux-gnu,那我們?nèi)绾问褂眯孪螺d的1.66.0 stable版本呢?有幾種方法,下面逐一介紹一下。

我們可以使用rust工具鏈的“plus語法”在命令行上指定要使用的工具鏈,這個語法對cargo、rustc等工具鏈中的命令行程序都適用:

$ rustc +1.66.0 -V
rustc 1.66.0 (69f9c33d7 2022-12-12)
$ rustc +1.65.0 -V
error: toolchain '1.65.0-x86_64-unknown-linux-gnu' is not installed

$ cargo +1.66.0 -V
cargo 1.66.0 (d65d197ad 2022-11-15)
$ cargo +1.65.0 -V
error: toolchain '1.65.0-x86_64-unknown-linux-gnu' is not installed

注:cargo[6]是Rust語言的官方構(gòu)建系統(tǒng)和包管理器,它提供了一組命令行工具,可以自動化構(gòu)建、測試和發(fā)布Rust項目。它還支持自動解析和下載依賴項,使得管理項目的依賴關(guān)系變得簡單和可靠。Cargo是Rust生態(tài)系統(tǒng)中重要的工具之一,為開發(fā)者提供了高效和方便的開發(fā)體驗。在后面的章節(jié)中我會詳細介紹cargo。

對于要使用特定版本進行構(gòu)建的rust項目,我們可以通過rustup override來指定版本號。下面就是一個這樣的例子:

$cargo new hellorust
     Created binary (application) `hellorust` package
$cd hellorust/
$rustup override set 1.66.0
info: override toolchain for '/root/test/rust/hellorust' set to '1.66.0-x86_64-unknown-linux-gnu'

我們用cargo創(chuàng)建了一個新的hellorust項目,在hellorust項目下,我們執(zhí)行rustup override來指定該項目使用1.66.0版本進行構(gòu)建。

之后,我們分別在該項目目錄下以及其他目錄下執(zhí)行rustc,我們看到輸出結(jié)果如下:

~/test/rust/hellorust$ rustc -V
rustc 1.66.0 (69f9c33d7 2022-12-12)
$ cd ..
~/test/rust$ rustc -V
rustc 1.77.2 (25ef9e3d8 2024-04-09)

rustc override的原理其實是在 $HOME/.rustup/settings.toml文件中添加了一些內(nèi)容:

$cat .rustup/settings.toml 
default_toolchain = "stable-x86_64-unknown-linux-gnu"
profile = "default"
version = "12"

[overrides]
"/root/test/rust/hellorust" = "1.66.0-x86_64-unknown-linux-gnu"

我們看到在overrides下新增了一條規(guī)則,指定了hellorust項目需要使用1.66.0-x86_64-unknown-linux-gnu這個工具鏈。

不過這種與本地路徑緊耦合的配置方案并不是適合大范圍協(xié)作,無法提交到git倉庫中分享給其他人。

Rust還提供了另外一種override toolchain版本的方法,我們可以在hellorust項目的根目錄下放置一個名為rust-toolchain.toml的文件,其內(nèi)容如下:

// rust-toolchain.toml

[toolchain]
channel = "1.66.0"

我們先執(zhí)行rustup override unset將上面設(shè)置的override規(guī)則取消掉:

$rustup override unset
info: override toolchain for '/root/test/rust/hellorust' removed

然后toolchain.toml就會生效了:

// 在hellorust路徑下
$rustc -V
rustc 1.66.0 (69f9c33d7 2022-12-12)

顯然,這里涉及到了override的優(yōu)先級順序問題。Rust規(guī)定版本override的優(yōu)先級順序由高到低依次是:

  1. plus語法:“rustc +1.66.0 -V”
  2. RUSTUP_TOOLCHAIN環(huán)境變量 (default: none)
  3. rustup override命令
  4. rust-toolchain.toml
  5. 默認toolchain

2.2.1.3 在Windows上安裝Rust

上述通過“curl|ssh”安裝rustup,并通過rustup安裝Rust工具鏈的方法是在Linux和macOS上安裝Rust的主流方法,但在習慣于圖形化安裝的Windows上,略有變通。在Windows上,我們可以下載和安裝一個名為rustup-init.exe的程序[7],它等價于其他os上的rustup,但可以交互式的引導(dǎo)用戶安裝。

由于手旁沒有Windows環(huán)境,具體的安裝過程這里就不詳細說明了。

2.2.2 離線安裝包安裝

和Go一樣,Rust也提供了離線安裝包的安裝方式,在離線安裝包下載頁面[8]可以找到各個平臺的多種文件格式(目前包括.tar.xz、.msi和.pkg)的離線安裝包。

習慣在Windows上開發(fā)Rust程序的開發(fā)者可以直接下載和使用.msi來安裝Rust開發(fā)環(huán)境。

2.3 更新和卸載Rust

使用rustup來更新和卸載Rust非常簡單方便。

以更新stable版本為例,通過下面命令,我們就可以將本地的stable版本更新到最新stable版本。以我的macOS為例,我通過rustup將stable版本更新為最新的Rust 1.77.2:

$rustup update stable
info: syncing channel updates for 'stable-x86_64-apple-darwin'
info: latest update on 2024-04-09, rust version 1.77.2 (25ef9e3d8 2024-04-09)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 14.9 MiB /  14.9 MiB (100 %)   9.3 MiB/s in  1s ETA:  0s
info: downloading component 'rust-std'
 25.4 MiB /  25.4 MiB (100 %) 764.8 KiB/s in 12s ETA:  0s
info: downloading component 'rustc'
 54.9 MiB /  54.9 MiB (100 %)   8.6 MiB/s in  7s ETA:  0s
info: downloading component 'rustfmt'
  1.8 MiB /   1.8 MiB (100 %) 564.9 KiB/s in  3s ETA:  0s
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 14.9 MiB /  14.9 MiB (100 %)   4.2 MiB/s in  3s ETA:  0s
info: installing component 'rust-std'
 25.4 MiB /  25.4 MiB (100 %)  13.8 MiB/s in  2s ETA:  0s
info: installing component 'rustc'
 54.9 MiB /  54.9 MiB (100 %)  13.9 MiB/s in  4s ETA:  0s
info: installing component 'rustfmt'

  stable-x86_64-apple-darwin updated - rustc 1.77.2 (25ef9e3d8 2024-04-09) (from rustc 1.75.0 (82e1608df 2023-12-21))
... ...

通過更新的日志,我們看到rust的相關(guān)工具組件(比如cargo、rustfmt等)也得到了一并的更新。

Rust通過rustup提供了卸載Rust環(huán)境的命令:

$rustup self uninstall

Thanks for hacking in Rust!

This will uninstall all Rust toolchains and data, and remove
$HOME/.cargo/bin from your PATH environment variable.

Continue? (y/N) _

我們看到:rustup會在控制臺上與你進行一個確認繼續(xù)的交互,確認你真的要卸載。如果你輸入y并按Enter鍵繼續(xù),那么rustup會移除所有與Rust相關(guān)的文件,包括工具鏈、庫、環(huán)境變量等。

如果你需要保留一些Rust版本,可以先運行rustup toolchain list,查看已安裝的版本。然后用rustup toolchain uninstall命令單獨卸載不需要的版本:

$rustup toolchain uninstall 1.64-x86_64-apple-darwin
info: uninstalling toolchain '1.64-x86_64-apple-darwin'
info: toolchain '1.64-x86_64-apple-darwin' uninstalled

2.4 配置Rust

《Go語言第一課專欄》[9]講解安裝Go之后的配置時,我們主要提到了國內(nèi)開發(fā)者要配置一個合適的GOPROXY。而Rust的各個站點都在合規(guī)訪問范圍內(nèi),我們安裝Rust后無需做任何配置即可敞開使用Rust。

不過也有開發(fā)者覺得通過Rust官方下載crate慢,希望更換國內(nèi)源,這種換源主要涉及的是cargo這個工具,我們后續(xù)學習Cargo時再來說明如何換源以及換哪個穩(wěn)定的國內(nèi)源。

2.5 在線體驗Rust

Go提供了在線的Go playground[10]可供尚未在本地安裝Go環(huán)境的開發(fā)者體驗Go語法,Go playground提供了三個版本:最新穩(wěn)定版、次新穩(wěn)定版以及tip版本,并且可以將代碼通過短連接分享給其他開發(fā)者,十分方便。

這方面Rust也不逞多讓,提供了功能足夠豐富的Rust Playground[11]

圖片圖片

在這里,我們可以選擇Rust的版本:stable、beta還是nightly;可以選擇編譯模式,是debug還是release;可以選擇Rust edition;可以選擇執(zhí)行一些工具,比如rustfmt;可以選擇執(zhí)行的命令:Run、Build、Test、MIR等。

不過,Rust、Go的playground畢竟只是用于在線體驗的站點,他們具有共同的一些局限,比如:不支持第三方依賴,無法做復(fù)雜的多源文件項目的體驗。

2.6 編輯器與IDE

對于開發(fā)人員來說,一門語言的開發(fā)環(huán)境不僅包含語言官方提供的編譯器以及其他工具鏈,代碼編輯器或IDE也是必不可少的。接下來,我們就來簡單說說使用什么編輯器或IDE來開發(fā)Rust代碼。

2023年Rust官方年度的用戶調(diào)查顯示,在編輯器/IDE使用排名中VSCode和VIM位列前二:

圖片圖片

Jetbrain推出的商業(yè)版RustRover[12]位居第三,正在迎頭趕上,但由于是商業(yè)版,這里就不詳細介紹了。下面我們分別介紹一下如何使用VSCode和VIM來開發(fā)Rust代碼,都需要安裝哪些插件。

2.6.1 使用VSCode開發(fā)Rust

使用上面介紹的rustup在本地安裝Rust環(huán)境后,rust的相關(guān)工具(cargo、rustc、rustfmt、rust-analyzer[13]等)就都已經(jīng)就緒!使用VSCode開發(fā)Rust只需再安裝一個擴展插件即可,它就是由Rust官方維護的rust-analyzer[14]

圖片圖片

該插件實現(xiàn)了Rust語言的Language Server Protocol,可以在開發(fā)者編寫Rust代碼時,提供代碼補全、轉(zhuǎn)到定義/實現(xiàn)/類型定義、查找所有引用、工作區(qū)符號搜索、符號重命名、懸停時的類型和文檔、類型和參數(shù)名稱的嵌入提示、語義語法高亮等功能。可以說,有了Rust-analyzer的幫助,開發(fā)者可以自由在Rust代碼中徜徉了。

更詳細的VSCode支持Rust開發(fā)的文檔,可以參考Rust in Visual Studio Code[15]

2.6.2 使用VIM開發(fā)Rust

和VSCode僅需安裝一個擴展插件相比,VIM的配置就相對復(fù)雜一些了。目前Rust+VIM的主流方案是rust.vim + coc.nvim + coc-rust-analyzer。

我們以安裝了vim-plug插件管理器[16]的VIM為例,下面是VIM的插件關(guān)系以及插件與Rust工具鏈的交互圖:

圖片圖片

首先,通過vim-plug安裝coc.nvim和rust.vim,我們需要在~/.vimrc中添加下面代碼:

call plug#begin()
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'rust-lang/rust.vim' "for rust
call plug#end()

然后在vim中執(zhí)行:PlugInstall安裝coc.nvim和rust.vim。

rust.vim是Rust團隊官方維護的vim插件,用于提供Rust文件檢測、語法高亮顯示、代碼格式化等,它需要Vim 8或更高版本才能實現(xiàn)完整功能。

coc.nvim[17]則是一個強大的Neovim (Vim的衍生版本)插件,主要用于提供代碼補全、語法檢查、代碼導(dǎo)航等功能,支持多種編程語言。它基于微軟的 Language Server Protocol (LSP),可以與各種語言服務(wù)器集成,從而為不同語言提供智能化的開發(fā)體驗。

安裝coc.nvim成功后,我們再在VIM中使用:CocInstall coc-rust-analyzer安裝coc.nvim的插件:coc-rust-analyzer[18],通過該插件可以實現(xiàn)與LSP實現(xiàn)rust-analyzer的交互,從而實現(xiàn)代碼補全、轉(zhuǎn)到定義/實現(xiàn)/類型定義、查找所有引用等功能。

此外,我們還需要配置一下coc.nvim,配置文件在~/.vim/coc-settings.json中:

{
    "languageserver" : {
   "rust": {
     "command": "rust-analyzer",
     "filetypes": ["rust"],
     "rootPatterns": ["Cargo.toml"]
   }
  }
}

安裝好上述插件并完成配置后,你同樣可以使用VIM在Rust代碼中徜徉!

2.7 小結(jié)

在這一章里,我們學習了如何建立Rust開發(fā)環(huán)境。

首先我了解到,Rust有stable(穩(wěn)定版)、beta(公測版)和nightly(每晚版)三種版本渠道,發(fā)布節(jié)奏是每6周一個新的穩(wěn)定版,與Go語言有所區(qū)別。對于大多數(shù)開發(fā)者來說,選擇最新的穩(wěn)定版是最明智的選擇。

接著,我介紹了在Linux環(huán)境下使用rustup這個官方工具安裝Rust的方法。rustup提供了一鍵安裝命令,可以方便地安裝不同渠道的Rust版本。

安裝完成后,rustup在主機的主目錄下創(chuàng)建了.cargo和.rustup兩個目錄。.cargo/bin存放了cargo、rustc等命令行工具,.rustup/toolchains則存放了安裝的Rust工具鏈。

我們還學會了如何使用rustup在不同版本間切換,并演練了如何安裝指定版本的Rust。另外,通過rustup的"plus語法",可以在單個命令中臨時使用特定的Rust版本。當然Rust提供了不止一種方法,還有rust-toolchain.toml文件、環(huán)境變量等方法,請注意這些方法的優(yōu)先級順序。

最后,我們還介紹了如何利用Rust playground在線體驗Rust編碼,以及Rust編碼使用的兩種最常使用的IDE和編輯器:VSCode和VIM,針對這兩個工具,我分別介紹了Rust開發(fā)環(huán)境的配置方法。

相信大家通過本章內(nèi)容,已經(jīng)可以成功搭建了Rust開發(fā)環(huán)境了,這為后續(xù)的Rust編程學習打下了堅實的基礎(chǔ)。

參考資料

[1] 《Go語言第一課專欄》: http://gk.link/a/10AVZ

[2] Go 1.22版本: https://tonybai.com/2024/02/18/some-changes-in-go-1-22/

[3] rust 1.77.0的發(fā)布: https://blog.rust-lang.org/2024/03/21/Rust-1.77.0.html

[4] rustup: https://rustup.rs/

[5] rustup: https://rustup.rs

[6] cargo: https://doc.rust-lang.org/cargo/

[7] rustup-init.exe的程序: https://static.rust-lang.org/rustup/dist/i686-pc-windows-gnu/rustup-init.exe

[8] 離線安裝包下載頁面: https://forge.rust-lang.org/infra/other-installation-methods.html#standalone-installers

[9] 《Go語言第一課專欄》: http://gk.link/a/10AVZ

[10] Go提供了在線的Go playground: https://go.dev/play/

[11] Rust Playground: https://play.rust-lang.org

[12] RustRover: https://www.jetbrains.com/rust/

[13] rust-analyzer: https://github.com/rust-lang/rust-analyzer

[14] rust-analyzer: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer

[15] Rust in Visual Studio Code: https://code.visualstudio.com/docs/languages/rust

[16] vim-plug插件管理器: https://github.com/junegunn/vim-plug

[17] coc.nvim: https://github.com/neoclide/coc.nvim

[18] coc-rust-analyzer: https://github.com/fannheyward/coc-rust-analyzer

[19] Gopher部落知識星球: https://public.zsxq.com/groups/51284458844544

責任編輯:武曉燕 來源: TonyBai
相關(guān)推薦

2024-06-27 11:08:45

2024-04-22 08:06:34

Rust語言

2024-06-07 08:59:35

2024-01-18 15:24:06

Rust開發(fā)鴻蒙OH4.0

2023-05-29 16:25:59

Rust函數(shù)

2024-11-08 09:19:28

2022-12-30 11:05:40

Rust代碼

2024-06-04 10:49:05

Rust插件開發(fā)工具

2021-02-16 11:04:26

RustGo華為

2023-05-14 18:56:50

Rust數(shù)據(jù)類型

2025-01-03 09:12:11

2023-05-23 18:11:12

Rust數(shù)組元組

2024-05-23 08:12:45

Rust前端開發(fā)JavaScrip

2023-09-25 15:30:14

云原生云計算

2024-04-01 11:43:51

Rust開發(fā)插件

2021-03-19 08:58:19

Rust共享愿景文檔開發(fā)者

2020-03-13 14:20:02

代碼開發(fā) Rust

2021-10-26 21:50:10

Rust嵌入式開發(fā)

2023-06-15 17:00:11

Rust循環(huán)

2021-02-24 07:42:34

PythonRust語言
點贊
收藏

51CTO技術(shù)棧公眾號