# 如何在 Windows 作業系統打造 Rust 開發環境

我最近的課程因為都開始改用 [Discord](https://discord.com/) 來當成學員之間的互動介面，為了實現自動審核加入課程的學員，我們用 [Rust](https://www.rust-lang.org/) 撰寫了一支程式來處理這個審核作業，並將程式跑在容器中，部署到 [Azure App Service](https://azure.microsoft.com/zh-tw/products/app-service) 上面執行。效能好就不用說了，主要是啟動速度快，記憶體使用量也很低，但唯一的缺點就是「可讀性」真的很差，主要是一個相對陌生的程式語言，但我今天在改功能的時候，用 [GitHub Copilot](https://copilot.github.com/) 輔助我瞭解程式語法與結構，也用它來幫我完成一些任務，想不到非常順利。今天這篇文章，我打算來介紹如何在 Windows 作業系統上打造 Rust 開發環境，並透過 [Visual Studio Code](https://code.visualstudio.com/) 來開發 Rust 程式。

![Rust development on Windows](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e9077d37b48b4b98b49a-9256678d-cdeb-43b7-9927-5e5060870d61.webp)

### 安裝 Rust 工具鏈

你可以直接開啟瀏覽器，前往 [Rust 官方網站](https://www.rust-lang.org/tools/install) 下載 `rustup` 安裝程式，這裡有很多安裝選項，初學者可能會遇到一些選擇障礙。

或者你也可以學我透過直接透過 [Chocolatey](https://chocolatey.org/install) 自動安裝 Rust 開發環境。

但是要透過 Chocolatey 安裝 Rust 也會有選擇障礙，因為你有兩種選擇：

1.  [Rust (GNU ABI)](https://community.chocolatey.org/packages/rust)
    
    GNU ABI 指的是使用 GNU 工具鏈 (如 GCC 編譯器) 所遵循的二進位介面規範。
    
    ```bash
    choco install rust -y
    ```
    
2.  [Rust (Visual Studio ABI)](https://community.chocolatey.org/packages/rust-ms) (**建議安裝這個**)
    
    Visual Studio ABI 指的是使用 Microsoft 的編譯器和鏈接器所遵循的二進位介面規範，也稱為 MSVC ABI 介面。
    
    ```bash
    choco install rust-ms -y
    ```
    

> 💡 所謂 [ABI (Application Binary Interface)](https://stackoverflow.com/a/2456882/910074) 是一種介面，定義應用程式如何與系統的底層二進位介面互動。ABI 包括函式約定、資料對齊、資料型態表示方式以及函式庫函式約定。ABI 是應用程式與作業系統之間的介面，定義應用程式如何與作業系統互動。ABI 包括應用程式如何呼叫作業系統提供的服務，以及如何存取作業系統提供的資源。

基本上，要在 Windows 開發 Rust 通常都會安裝 [Rust (Visual Studio ABI)](https://community.chocolatey.org/packages/rust-ms) 為主，因為大部分 Windows 開發者都有使用 Visual Studio 開發工具。不過，如果你還沒有安裝 Visual Studio 的話，也建議先安裝 [Visual Studio 2022 Community](https://visualstudio.microsoft.com/zh-hant/vs/community/) 版本。首次安裝時，請注意要選擇以下工作負載 (Workload)：

-   `Desktop Development with C++`

然後安裝 [Rust (Visual Studio ABI)](https://community.chocolatey.org/packages/rust-ms) 工具：

```bash
choco install rust-ms -y
```

如果你想安裝 Rust 在 WSL (Windows Subsystem for Linux) 的話，可以用以下命令安裝 `rustup` 工具：

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

執行完上述命令後，按一個 `Enter` 鍵，就會自動安裝 Rust 工具鏈到好。

> 💡 關於 `rustup` 的運作方式與相關說明，請見 [Concepts](https://rust-lang.github.io/rustup/concepts/index.html) 文件。

### 驗證安裝結果

想簡單確認你是否有正確安裝 Rust 的話，請開啟命令列環境並輸入此命令：

```bash
rustc --version
```

![rustc --version](https://stwillblogassets.blob.core.windows.net/files/images/external/github.com/874c4b7b39972d8bc428-c25ccbd3-97bc-4884-8d3a-79728da8170f.jpg)

### 安裝 Visual Studio Code 擴充套件

1.  [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)
    
    Rust 官方有發展一套 [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) 擴充套件，建議安裝這套就好。
    
    > 早期有個名為 [Rust](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust) 的擴充套件已經不再維護，建議不要安裝舊的。
    
2.  [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
    
    如果想在 Visual Studio Code 中對 Rust 程式碼進行除錯，建議安裝 [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) 擴充套件。
    

### 建立 Hello, World! 範例程式

1.  使用 `cargo new` 命令建立一個 Rust 專案範本
    
    ```bash
    cargo new hello-rust
    ```
    
2.  使用 Visual Studio Code 開啟這個資料夾
    
    ![cargo new hello-rust](https://stwillblogassets.blob.core.windows.net/files/images/external/github.com/8c1b590e0a17bb14f505-5ddadf20-c71c-4916-aa0a-0245cc5df47e.jpg)
    
3.  認識 `Cargo.toml` 專案設定檔
    
    這個檔案如同 Node.js 的 `package.json` 一樣，是 Rust 專案的設定檔，可以設定專案名稱、版本、作者、依賴套件等等。
    
    ```ini
    [package]
    name = "hello-rust"
    version = "0.1.0"
    edition = "2021"
    
    [dependencies]
    ```
    
    很明顯的，`name` 代表你目前專案的名稱，`version` 代表版本號，`edition` 代表 Rust 版本，`dependencies` 代表專案所需的依賴套件。
    
    你可能會好奇，為什麼 `Cargo.toml` 要定義 `edition` 為 `2021` 呢？因為 Rust 的版本分為不同的 `edition` 版本，每個版本都有不同的功能和語法，而 Rust 目前有三個主要的 `edition` 版本：
    
    -   `2015`
    -   `2018`
    -   `2021` (最新)
    
    `edition = "2021"` 表示這個專案使用 Rust 2021 版本的**語言特性**和**標準函式庫**。這樣可以確保專案中使用的所有函式庫和語法都是符合 Rust 2021 版本的標準，並且可以充分利用新的功能和改進。
    
4.  開啟 `src/main.rs` 檔案，點擊 `Run` 或 `Debug` 就可以執行或偵錯應用程式
    
    這是 Rust 應用程式的主要進入點，你可以在這個檔案中撰寫 Rust 程式碼。
    
    ```rust
    fn main() {
        println!("Hello, world!");
    }
    ```
    
    ![點擊  或  就可以執行程式](https://stwillblogassets.blob.core.windows.net/files/images/external/github.com/e4938aff77c13562b393-fa424cd5-4f80-4952-9d32-44eb04d20ec3.jpg)
    
5.  你也可以利用 `cargo run` 命令進行編譯與執行
    
    ```bash
    cargo.exe run --package hello-rust --bin hello-rust
    ```
    
    這個命令會自動建立 `target` 資料夾，此資料夾無須加入版控，預設 `cargo new` 已經幫我們建立好了 `.gitignore` 檔案。
    
    另外，這個命令所產生的執行檔會在 `target/debug/hello-rust.exe` 路徑下。
    
6.  如果你想用最傳統的 `rustc` 來編譯成是，也可以輸入以下命令進行編譯
    
    ```bash
    rustc src/main.rs
    ```
    
    這個命令會在**當前目錄**產生 `main.exe` 執行檔與 `main.pdb` 符號檔。
    

### 維持 Rust 工具鏈在最新版本

由於 Rust 官方推薦的安裝方式是使用 `rustup` 工具，所以你可以透過 `rustup` 來維持 Rust 工具鏈在最新版本。

Rust 以三個不同的發布通道分發：**穩定通道**(`stable`)、**測試通道**(`beta`)和**每日建置通道**(`nightly`)。而 `rustup` 預設使用**穩定通道**(`stable`)，這代表 Rust 的最新發布。**穩定通道**(`stable`)每 6 週發布一次新版本。當 Rust 發布新版本時，只需輸入 `rustup update` 即可更新：

```bash
rustup update
```

如果你不太會使用到**非穩定版**(non-stable)，直接用 Chocolatey 安裝 Rust 比較簡單，升級也很容易，執行以下命令即可：

```bash
choco upgrade rust-ms -y
```

### 相關連結

-   [Rust 程式設計語言](https://www.rust-lang.org/zh-TW/) (正體中文官網)
-   [Rust 程式設計語言免費電子書](https://rust-lang.tw/book-tw/) (基於 Rust `2021` 最新版本)
-   [Install Rust - Rust Programming Language](https://www.rust-lang.org/tools/install)
-   [Learn Rust - Rust Programming Language](https://www.rust-lang.org/learn)
