根據維基百科:
- Rust 是由 Mozilla 主導開發的通用、編譯型程式語言。設計準則為「安全、並發、實用」,支持函數式、並髮式、過程式以及面向對象的程序設計風格。Rust 的設計目標之一,是要使設計大型的網際網路客戶端和伺服器的任務變得更容易。因此更加強調安全性、存儲器配置、以及並發處理等方面的特性。
語言核心
Rust 核心庫
Rust 核心庫是 Rust 標準庫的基礎,無需依賴。它直接與 LLVM 原語對接,使 Rust 可以與平台和硬體無關。正是這種與 LLVM 的集成,使 Rust 比 Clang 編譯的同樣功能的 C 語言程序性能更高,使得用 libcore 設計的 Rust 軟體比 C 語言的更底層。為嵌入式平台設計軟體的開發者可通過 #![no_std]
放棄使用標準庫,只使用語言自帶的核心庫,以獲得更小的二進位文件和更好的性能。然而,由於大多數庫都需要標準庫,使用 #![no_std]
意味著來自 Rust 社區的軟體支持會受限。
Rust 標準庫
Rust 標準庫提供了方便的高級抽象,用於開發大多數可移植的 Rust 軟體。標準庫的特點包括 Vec
和 String
類型、大量的語言原語方法、大量的標準宏、I/O 和多線程支持、使用 Box
實現的堆分配,以及更多核心庫不具有的高級特性。
發布周期
與 Firefox 類似,Rust 使用每六周的發布周期。在每個新版本中,核心庫和標準庫都會得到改進,以支持更多的平台、提高性能,以及為穩定版本增加新特性。
安裝
安裝 Rust 主要有兩種方式:
- 直接安裝。如果你只使用 Rust 來運行或安裝軟體,推薦使用此方式。
- Rustup 安裝。如果你打算進行 Rust 編程,推薦使用此方式。
直接安裝
要從 Arch Linux 官方軟體庫中安裝最新的穩定版 Rust,安裝 rust包。這將安裝 rustc
編譯器和 Cargo。
除此之外還有開發版的 Rust 編譯器 rust-nightly-binAUR 和 rust-gitAUR 可用,分別用於預編譯的通用二進位文件、編譯器與系統庫的構建。
通過 rustup 安裝
為開發軟體,官方推薦的 Rust 安裝方法是使用 rustup 工具鏈管理器安裝。
使用 rustup 工具鏈管理器而不是倉庫中獨立的 Rust 軟體包的優點,主要是能為多個目標平台(Windows、macOS、Android)和架構(x86、x86_64、arm)安裝多個工具鏈(穩定版、測試版、開發版)。需要注意的是,安裝 rustup 並不會自動安裝 Rust 工具鏈,使用任何方法更新 rustup 也不會自動提供 Rust 的最新工具鏈版本。有關工具鏈的更多信息,請參見#用法或 rustup 工具鏈文檔。
Rustup 的安裝有兩種方式,一種是通過 Arch Linux 自帶的 pacman,另一種是通過 Rust 官方安裝腳本。
Arch Linux 軟體包
rustup包 在 Arch Linux 軟體倉庫中可用。注意,以這種方式安裝時,rustup self update
將不起作用,只能使用 pacman 更新 rustup。然而,這一變化並不適用於其他 rustup 功能,例如用於更新 Rust 工具鏈的 rustup update
。
使用此軟體包的優點是 Rust 可執行文件都在 /usr/bin
目錄內,而不是 ~/.cargo/bin
,因此避免了在 PATH
中添加其他目錄的麻煩。
/usr/bin/rustup
與 /usr/bin/rustc
、/usr/bin/cargo
等普通二進位文件之間的符號連結。如上所述,要使上述 Rust 命令能工作,用戶仍需手動安裝工具鏈。為安裝工具鏈,需要指定使用的版本號或使用穩定版(stable
)、測試版(beta
)、開發版(nightly
):
$ rustup default stable
上游安裝腳本
Rustup 也可通過 rustup 官方網頁下載並手動安裝。
使用下面命令下載:curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs -o rust.sh
,查看腳本:less ./rust.sh
,運行腳本以安裝 rustup:./rust.sh
。此腳本僅對當前登錄 Shell 的配置文件進行 PATH 修改。在註銷並重新登錄之前需要source ~/.cargo/env
。在此之後升級 rustup 需執行 rustup self update
。
該腳本自動安裝並激活默認工具鏈(rust包 所使用的工具鏈),因此無需手動安裝工具鏈即可使用 Rust。
curl some-url | sh
會帶來安全風險,因為它執行的是未知的、甚至可能在下載過程中被破壞的代碼。因此建議在執行腳本之前,手動下載並檢查。rustup
時請確保 ~/.cargo/bin
在 PATH
內。用法
可能需要手動安裝工具鏈,例如穩定版(stable
)、測試版(beta
)、開發版(nightly
)或特定版本(1.58.0
)。如果想要使用或測試另一個工具鏈,也需要如下操作:
$ rustup toolchain install toolchain
現在可通過 rustup run toolchain command
來執行 Rust 命令。然而,如果要直接使用這些命令,則需要激活該工具鏈:
$ rustup default toolchain
使用 rustc -V
檢查目前安裝的 Rust 版本:
$ rustc -V
rustc 1.58.0 (02072b482 2022-01-11)
error: linker `cc` not found.
Rustup 不會自動更新提供的工具鏈。如果用戶希望使用最新版本的 Rust、crates 以及其他相關包,他們可能需要偶爾使用 rustup update
來更新他們的工具鏈。有關更多信息,請參見 官方 rustup 文檔。
測試安裝結果
通過構建一個小程序來測試 Rust 是否已正確安裝,源碼如下所示:
~/hello.rs
fn main() { println!("Hello, World!"); }
可使用 rustc
編譯,然後運行:
$ rustc hello.rs && ./hello
Hello, World!
交叉編譯
使用 rustup
使用 rustup 可輕鬆地交叉編譯。rustup 支持許多交叉編譯目標,完整列表可通過執行 rustup target list
查看。
例如,使用 Windows 穩定通道安裝 Rust,使用 GNU 編譯器,需要執行以下命令:
$ rustup toolchain install stable-x86_64-pc-windows-gnu
此操作只會為目標架構安裝 Rust 及其工具,但在交叉編譯時可能還需要其他工具。
Windows
本節中,$ARCH
是目標架構(x86_64
或 i686
)。以下內容將解釋如何使用 rustup 進行交叉編譯。
- 安裝 mingw-w64-gcc包
- 為目標架構安裝 Rust 標準庫:
rustup target add $ARCH-pc-windows-gnu
- 最後,為了使 cargo 能找到 MinGW-w64 gcc/ar,需要在
~/.cargo/config
中添加如下內容:
~/.cargo/config
[target.$ARCH-pc-windows-gnu] linker = "/usr/bin/$ARCH-w64-mingw32-gcc" ar = "/usr/bin/$ARCH-w64-mingw32-ar"
最後,通過向 cargo 傳遞 --target $ARCH-pc-windows-gnu
參數,即可為 Windows 交叉編譯:
$ # Build $ cargo build --release --target "$ARCH-pc-windows-gnu" $ # Run unit tests under wine $ cargo test --target "$ARCH-pc-windows-gnu"
目前無法使用 MinGW 6 和通過 rustup 安裝的工具鏈構建可執行文件。要修復此問題,請執行
for lib in crt2.o dllcrt2.o libmsvcrt.a; do cp -v /usr/x86_64-w64-mingw32/lib/$lib $HOME/.rustup/toolchains/$CHANNEL-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/; done
其中 CHANNEL
為更新通道:穩定版(stable
)、測試版(beta
)或開發版(nightly
)。
非官方軟體包
非官方倉庫 archlinuxcn 有 rust-nightly 和 i686, ARM, ARMv7, Windows 32 & 64 的 Rust 標準庫,因此只需安裝對應的標準庫即可享受交叉編譯。然而,ARM 工具鏈只能自行尋找。對於 32 位 Windows 目標,需要獲取 mingw-w64-gcc包 提供的 libgcc_s_dw2-1.dll 來編譯運行。
Cargo
Cargo,Rust 的包管理器,是 rust包 的一部分。作為 rust-nightly-binAUR 的一部分,Cargo 開發版(nightly)在 AUR 上可用。如果使用 rustup包 則無需再安裝 Cargo。
Cargo 使 Rust 項目能聲明各種依賴關係,並確保始終能得到可重現構建。推薦閱讀官方指南。
用法
使用 Cargo 創建新項目:
$ cargo new hello_world
此操作將創建包含默認 Cargo.toml 文件的目錄,該文件用於構建可執行文件。
Cargo.toml
作為包含編譯項目所需所有元數據的列表。
Cargo.toml
[package] name = "hello_world" version = "0.1.0" edition = "2021" [dependencies]
為本機 CPU 平台優化
通過在 ~/.cargo/config
中添加一個標誌,Cargo 將始終為本機 CPU 進行編譯優化。請注意,由此產生的二進位文件無法在其他計算機上運行。如果未來更換 CPU,您甚至可能無法在自己的系統上運行這些二進位文件。
找出安裝時默認使用的目標平台:
$ rustup toolchain list
stable-x86_64-unknown-linux-gnu (default)
這說明目前在 x86_64-unknown-linux-gnu
平台上使用穩定版(stable
) Rust。
將 Cargo 設置為始終為本機 CPU 進行編譯優化:
~/.cargo/config
[target.x86_64-unknown-linux-gnu] rustflags = ["-C", "target-cpu=native"]
sccache
使用 sccache(sccache包)可以大大減少編譯時間。這將在本地維護編譯器的工作緩存,從而無需重新編譯自上次編譯以來不變的代碼。
為啟用 sccache,可使用 RUSTC_WRAPPER
環境變量:
$ export RUSTC_WRAPPER=sccache $ cargo build
或者
$ RUSTC_WRAPPER=sccache cargo build
或者也可以將以下內容添加到 ~/.cargo/config
:
~/.cargo/config
[build] rustc-wrapper = "sccache"
IDE 支持
工具
Rust 項目的推薦工具請參閱 https://www.rust-lang.org/zh-CN/tools 。
rust-analyzer
rust-analyzer 是官方的 Rust 語言伺服器協議(LSP)實現,已取代 RLS。
安裝 rust-analyzer包 軟體包即可使用,最新 Git 版本可通過安裝 rust-analyzer-gitAUR 獲取。另外,如果已安裝 rustup包,可使用以下命令安裝 rust-analyzer:
$ rustup component add rust-analyzer
rust-analyzer 需要標準庫的原始碼。如果原始碼不存在,rust-analyzer 將嘗試使用 rustup 自動安裝。要使用 rustup 手動安裝原始碼,請執行以下命令:
$ rustup component add rust-src
Clippy
Clippy 藉助編譯器插件支持實現了許多額外提示,能檢測出更多錯誤和非慣用的 Rust 語法。rust包 軟體包中包含了 Clippy。
使用 rustup 安裝 Clippy:
$ rustup component add clippy
Rustfmt
Rustfmt 是一個根據官方代碼風格規範來格式化 Rust 代碼的工具。
rust包 軟體包中包含了 Rustfmt。執行以下命令,用 rustup 來安裝 Rustfmt:
$ rustup component add rustfmt
編輯器
Emacs
Emacs 對 Rust 的支持可通過官方的 rust-mode 插件獲取。
GNOME Builder
GNOME Builder 對 Rust 的支持通過語言伺服器協議(LSP)實現。默認使用 rust-analyzer,需要同時安裝 Rust 原始碼。
Helix
Helix 編輯器使用 Rust 編寫,包含了 Rust 語言伺服器協議(LSP)。Helix 的靈感來自 Neovim 和 Kakoune。
Kate
Kate 對 Rust 的支持通過語言伺服器協議(LSP)實現。默認使用 rust-analyzer,需要同時安裝 Rust 原始碼。
IntelliJ IDEA
IntelliJ IDEA 有 Rust 插件。此插件同樣適用於 CLion。
如果使用 rustup,請使用 rustup 下載原始碼(rustup component add rust-src
),然後將工具鏈所在位置指定為 ~/.rustup/toolchains/<your toolchain>/bin
。
如果使用 Arch Linux 官方軟體庫中的 Rust,請將工具鏈所在位置指定為 /usr/bin
,將標準庫所在位置指定為 /usr/lib/rustlib/src/rust/library/
。
Jetbrains RustRover
Jetbrains 也正在開發一款專為 Rust 設計的編輯器,目前僅處於早期訪問階段。
它可以在官方網站上找到並下載,或者在 AUR 中找到 (rustroverAUR 和 rustrover-eapAUR)。
Visual Studio Code
Visual Studio Code 對 Rust 的支持可通過 rust-analyzer 與 matklad.rust-analyzer 擴展獲取。
Vim
Vim 對 Rust 的支持可通過官方的 rust.vim 插件獲取,支持文件檢測、語法高亮、格式化和 Syntastic 語法檢查插件。許多代碼補全引擎都支持 Rust,例如 coc(通過 coc.rls 插件)和 YouCompleteMe。
另見
- Rust 程式語言官網
- Rust 文檔
- 標準庫 API
- Rust 官方文檔中文教程
- 《Rust 程序設計語言》
- 《通過例子學 Rust》
- 《Rust 參考手冊》
- Rust 維基百科詞條
- Rust 語言術語中英文對照表
- Rust Telegram 中文討論群
- 帶少量注釋的 Rust 示例(英文)
- Cargo 可用的庫(單元包/crate)(英文)
- Rust 本周動態(英文)
- Rust 程式語言博客(英文)
- Rust 用戶論壇(英文)
- Rust 內部人員論壇(英文)