附錄 E - 版號

在第一章中,你會看到 cargo new 會在 Cargo.toml 檔案中加上一些關於版號(edition)的詮釋資料。此附錄會講解其意義!

Rust 語言與編譯器有一個為其六週的發佈循環,這意味著使用者可能定期獲得一些新功能。其他程式設計語言可能會發佈較大的更新但就會比較不頻繁。Rust 傾向於較頻繁地發佈小更新。過一段時間後,這些所有變更會漸漸累積起來。不過隨著一次次的發佈,回過頭來看可能會發覺「哇!Rust 1.10 與 Rust 1.31 之間的變化真大!」

所以每個兩到三年,Rust 團隊會產生新的 Rust 版號(edition)。每個版本會整合已推出的功能成一整個附有完整技術文件更新與工具的套件。然後新的版號就會包含在每六週循環過程的發佈之中。

版號對不同客群提供不同功能:

  • 對於活躍的 Rust 使用者來說,新的版號將累積的變更整合成容易理解的單一套件。
  • 對非使用者來說,新的版號意味著有一些新的重大進展,讓 Rust 可能值得再看一次。
  • 對於開發 Rust 的人來說,新的版號提供整個專案的一個集結點。

在本書撰寫時,Rust 已經有三個版號:Rust 2015、Rust 2018 與 Rust 2021。本書使用的是 Rust 2021 版號的慣用寫法。

Cargo.toml 中的 edition 指的是編譯器該對你的程式碼使用何種版號。如果沒有指定的話,Rust 會以向下相容作為考量而是使用 2015

每個專案都能選擇一種版號而不只是使用預設的 2015 版號。版號會包含無法相容的變更,像是包含新的關鍵字使得程式碼中的標識符衝突。然而,除非你親自改變版號,不然就算你更新 Rust 編譯器的版本,你的程式碼依然能夠編譯通過。

所有的 Rust 編譯器版本會支援在其編譯器發佈之前的任何版號,而且可以連結任何支援版號的 crate。版號變更只會影響編譯器初始解析程式碼的方式而已。因此,如果你使用 Rust 2015 但你其中一個依賴使用 Rust 2018 的話,你的專案仍然能編譯並使用該依賴函式庫。相對地,當你的專案使用 Rust 2018 而有依賴使用 Rust 2015 的話依然是如此。

這裡要澄清一點:大多數功能在所有版號中都能使用。開發者使用任何 Rust 版號都能繼續獲得新的穩定版本帶來的改善。然而有些情況下,主要是增加新的關鍵字的時候,有一些新功能可能就只有後期的版號才能使用。你想使用利用新功能的話,就得切換版號。

想瞭解更多資訊的話,請查閱 Edition Guide,這是本涵蓋所有版號之間不同的書籍,並會解釋如何使用 cargo fix 來自動升級你的程式碼至新的版號。