Rust 1.68版本中,套件管理器Cargo的稀疏註冊表協定已經進入穩定階段,可改善開發者在存取crates.io的效能,同時Rust加入新的功能pin!巨集,並且預設記憶體分配錯誤處理程式。

之前Cargo為了要確認crates.io上存在的Crate,需要下載一個紀錄所有Crate版本的索引,而該索引託管在GitHub的儲存庫上,該系統由GitHub伺服器端處理,以增量擷取的方式獲取更新。官方提到,隨著時間發展索引大幅增加,也達到了系統擴展限制,初始擷取和更新速度變慢。

因此官方引入了一個新協定,改進Cargo存取索引的方式,現在Cargo不再使用Git,而是直接使用HTTPS直接透過索引獲取檔案,Cargo只會下載專案中特定的Crate相依項目。官方預計要在Rust 1.70讓稀疏協定成為預設,但是crates.io的Git儲存庫仍會作為索引的真實來源,Cargo也會繼續無限期支援Git索引。

由於官方在https://index.crates.io/上託管crates.io索引,當開發者位於防火牆或是代理之後,便需要允許Cargo存取該站點。

而在Rust新版本中,也加入新的功能pin!巨集,能夠將T表示式建構成Pin<&mut T>型態,使其無法被移動,進入固定引用(Pinning)的狀態。在Rust中,pin!可以用來防止堆疊上創建的物件被移動或是破壞,確保程式的安全性。pin!通常可被用於非同步程式開發的Future和Stream物件,以限制這些物件的可變更性,避免被意外的移動或是修改。

Rust 1.68也預設記憶體分配錯誤的處理程式。過去Rust在分配記憶體失敗時,無法指出Box::new和Vec::push等API錯誤,所以需要透過一些特殊的程式碼路徑,處理這些錯誤和異常,當使用std crate的時候,程式就會將錯誤輸出到標準錯誤輸出stderr中。

而在Rust 1.68中,雖然包含std的二進位檔案將繼續這樣的行為,但是在只包含alloc但不包含std的二進位檔案,在分配失敗的時候則會觸發panic!巨集,官方表示,之後std的行為也會更改,使其與僅包含alloc的二進位檔案一致。

熱門新聞

Advertisement