程式語言Rust開發團隊,發布了最新版本1.53.0,這個版本加入了幾個新的語言功能,也更新許多函式庫功能,也終於實做了開發者期待已久的陣列IntoIterator,不過,漸增編譯功能在這個版本仍然預設關閉。

從1.53.0版本開始,開發者就可以在識別字(Identifier)使用Unicode,因此能以各種語言編寫識別字,但是仍然不能使用◆這種不被視為文字的字形或表情符號。Rust允許開發者使用任何符合UAX #31 Unicode識別字和模式語法標準的識別字,這與Python這類使用相同標準的語言一樣,但是由於Rust在Unicode正規化選用了NFC標準,因此可能又與其他語言不同。

Rust 1.53也是第一個在陣列實作IntoIterator語言特徵(Trait)的版本,這代表開發者可以按值迭代陣列。在陣列實作IntoIterator有向後相容的問題,因為IntoIterator之前已經被用來實做參照陣列,array.into_iter()已經在早期版本中編譯,解析為 (&array).into_iter(),所以開發團隊一直推延這項功能實作的時程。

而從這個版本開始,開發團隊採取了小手段,以一個變通方法在陣列實作IntoIterator,進而避免破壞程式碼。編譯器會繼續將array.into_iter()解析為(&array).into_iter(),就如同該Rust語言特徵實作不存在一樣。這只適用於.into_iter()方法呼叫語法,並且不影響任何其他語法,諸如for e in [1, 2, 3]、iter.zip([1, 2, 3])或IntoIterator::into_iter ([1, 2, 3])都可以良好編譯。

官方提到,這個.into_iter()特殊處理方式,只是為了避免現有程式碼遭到破壞,會在今年稍晚發布的Rust 2021新版本中移除。

這個版本也更新了Or模式,模式語法擴充支援巢狀|,讓開發者現在可以將Some(1) | Some(2)寫成Some(1|2)。Cargo也不再假設Git儲存庫的HEAD分支預設名為Master,因此開發者也就不再需要替儲存庫中Git相依項目指定分支為Main,其預設就是Main分支。

而在這個版本,漸增編譯(Incremental Compilation)功能預設仍然關閉。Rust開發團隊在5月的時候,發布了1.52.1版本,這個版本是專為解決1.52.0中,漸增編譯錯誤成為編譯器錯誤的臭蟲,開發團隊提到,因為漸增編譯的臭蟲,使得編譯器最終生成的構件可能包含錯誤程式碼,因此產生格式錯誤的二進位檔案。

目前官方只掌握部分編譯錯誤,官方提到,使用者在看見未預期的二進位檔案結果時,通常會進行一些簡單的編輯,而這些動作通常會導致重新編譯,臭蟲也就可能被修復,因此漸增編譯所產生的錯誤很難追蹤。漸增編譯目前在測試和Nightly版本仍然可以使用,而要在1.53.0穩定版本開啟漸增編譯功能的方法與之前版本相同。

熱門新聞

Advertisement