程式語言Rust開發團隊發布最新1.58版本,這個版本有不少編譯器上的更新,同時也強化程式語言功能,目的在使Rust更容易使用。Rust 1.58在格式化字串(Format String)中,加入了可捕捉的識別符號,並且更改Windows上命令搜尋路徑,在標準函式庫中加入更多#[must_use]註解。

現在開發者可以在字串中,使用{ident}來捕捉參數,過去格式接受位置參數以及命名參數,而現在命名參數也能夠在周圍範圍被捕捉,而這同樣也可用於格式化參數,格式化字串只能捕捉普通的識別符號,不能捕捉任意路徑或是表示式,對於更複雜的參數,開發者必須對參數指定區域名稱,或是使用較舊的name = expression格式化參數類型。

官方提到,這項新功能可以在所有接受格式化字串的巨集中使用,不過,例外則是2015年和2018年版本的panic!巨集,當panic!(“{ident}”)還是被當作為格式化字串時,編譯器會發出警示,告訴開發者該寫法沒有預期效果。由於2021版本,官方更新了panic巨集進而提高了一致性,因此這項新功能可以在2021中的panic!運作。

Rust 1.58減少Windows命令搜尋的路徑,在Windows上,std::process::Command將不再於當前工作目錄中搜尋可執行檔案。過去受win32 CreateProcess API的影響,Rust按特定的優先順序執行搜尋,會先搜尋子PATH環境變數中列出的目錄,接著是載入應用程式的目錄、父程序的目錄、32位元的Windows系統目錄、16位元的Windows系統目錄、Windows目錄,最後則是PATH環境變數列出的目錄。

官方解釋,由於使用當前工作目錄可能產生預料之外的結果,或是當在處理未受信任目錄時,產生惡意行為,即便是微軟自己的PowerShell文件,也不使用當前目錄,以確保其安全性。而現在沒有當前目錄的情況下,Rust會按照新的優先順序進行搜尋。

但因為沒有API可以探索16位元Windows系統目錄,因此Windows上Rust的新命令搜尋順序,將會跳過16位元Windows系統目錄,僅有子PATH環境變數中列出的目錄、載入應用程式的目錄、32位元的Windows系統目錄、Windows目錄以及PATH環境變數列出的目錄。在非Windows上,將仰賴特定平臺的行為,通常只考慮子或父PATH環境變數。

另外,在Rust 1.58中的標準函式庫,加入更多的#[must_use]註解,大多數函式都帶有#[must_use]註解,忽略回傳的值將會出現警告。Rust編譯器在這個版本也有不少更新,像是在拋出lint錯誤之後,還是能繼續編譯,以顯示更多有用的錯誤訊息等。

Rust的套件管理器Cargo,現在加入一個新的後設資料欄位,以表示最小支援的Rust版本,這對其他工具來說將會是很有用的資訊,另外Cargo在install指令加入—message-format選項,並且在後臺,更新curl至7.80版本,以更好地支援OpenSSL 3。


熱門新聞

Advertisement