Rust 1.63 通用編程語言的發布已經發布,該語言由 Mozilla 項目創建,但現在由獨立的非營利組織 Rust 基金會贊助開發。 該語言專注於內存安全,並提供實現高作業並行性的方法,同時避免使用垃圾收集器和運行時(運行時減少為標準庫的基本初始化和維護)。
Rust 的內存處理方法使開發人員在操作指針時避免錯誤,並防止由於低級內存處理而出現的問題,例如在內存區域被釋放後訪問它、取消引用空指針、緩衝區溢出等。 為了分發庫、提供構建和管理依賴項,該項目開發了 Cargo 包管理器。 crates.io 存儲庫支持託管庫。
Rust 在編譯時通過引用檢查、跟踪對象所有權、跟踪對像生命週期(範圍)以及評估代碼執行期間內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。
主要創新:
- 新增了 std::thread::scope API,它允許您建立作用域執行緒。 與以前可用的線程不同,新的 std::thread::scope API 允許傳遞借用非靜態數據,而使用經典 std::thread::spawn API 創建的線程需要擁有所有傳遞的參數,並且無法接收借用變量。 std::thread::scope API 確保在傳回資料之前終止任何產生的線程,從而為借用機制提供足夠的安全性。
- 已經提出了文件描述符的新包裝類型 - BorrowedFd 和 OwnedFd,它們提供借用和所有權。 類型以「#[repr(transparent)]」標記,允許它們以所有權感知的方式直接在外部 C 綁定中使用。
- 提供了在常數上下文中呼叫 Condvar::new、Mutex::new 和 RwLock::new 的能力,以建立全域靜態 Mutex、RwLock 和 Condvar 值,而無需使用lazy_static 套件。
- 對於像 fn foo 這樣的函數(value: T, f: impl Copy) 允許像「foo::」這樣的語法(32, 3)”,明確顯示泛型的類型。
- 使用 NLL(非詞彙生命週期)技術來識別借用變數問題的過渡已經完成。 NLL 在執行流程圖中考慮一組指標的級別,這使得可以提高借用變數(借用檢查器)的檢查品質並允許執行某些類型的正確程式碼,使用這之前導致了錯誤。 對使用詞法級生命週期綁定的舊機制的支援現已完全從 rustc 中刪除,並且已在整個過程中實現了新 NLL 的使用。
- API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
- 數組::from_fn
- 盒子::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- 路徑::try_exists
- 參考::filter_map
- RefMut::filter_map
- 非空::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- Unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- 視窗::io::AsHandle
- windows::io::借用句柄
來源: opennet.ru
