Mozilla釋出Rust最新版1.34,最大亮點在於增加了替代Cargo註冊表,也增加了對文件測試?的支援,並改進#[attribute(..)]功能,讓客製化屬性接受任意令牌串流(Token Streams)。

從Rust 1.0開始就開始提供服務的公共Cargo註冊表crates.io,這個註冊表雖然方便,但只能用於公共開源專案,維護閉源以及專有原始碼的開發者,得被迫使用git或其他路徑,這樣的替代方式僅適合小型專案,對大型組織來說,其大量的閉源程式碼Crate,將無法獲得crates.io版本控制的好處。

而在Rust 1.34版中,Cargo可以使用替代註冊表,這些註冊表能夠與crates.io共存,開發者可以開發同時依賴crates.io和自定義註冊表的Crate,但需要注意的是,crates.io上的Crate不能相依於外部註冊表。

另外,從這個版本開始,開發者已經可以於fn main()、#[test]函式以及文件測試doctests中使用?運算子,並獲得回傳結果Option <T>或Result <T,E>。fn main()和#[test]對?的支援已經在多個版本中實現,而在Rust 1.34中,則是提供在doctests完全支援?。doctests文件測試是rustdoc支援執行以文件範例作為測試,讓開發者確定自己的測試是最新且有用的,而?運算子則與C++中的try功能相似,用於錯誤處理。

在Rust中,程序式巨集(Procedural Macros)可以定義使用的客製化屬性,而這些屬性僅限於特定語法構成的路徑樹以及文字,例如這些屬性無法寫成#[range(0..10)],而是必須寫作#[range(“0..10")],但在這個Rust版本,客製化屬性接受任意令牌串流,官方提醒開發者,程序式巨集Crate作者,需要檢查客製化屬性是否在語法中,含有不必要的字串,用令牌串流會是更好的表達方式。


Advertisement

更多 iThome相關內容