系統程式語言 Rust 1.53 已發布,該語言由 Mozilla 計畫創建,但現在由獨立非營利組織 Rust 基金會贊助開發。 該語言專注於記憶體安全,提供自動記憶體管理,並提供了無需使用垃圾收集器或運行時即可實現高任務並行性的方法(運行時被簡化為標準庫的基本初始化和維護)。
Rust 的自動內存管理使開發人員在操作指針時避免錯誤,並防止由於低級內存操作而出現的問題,例如在內存區域被釋放後訪問它、取消引用空指針、緩衝區溢出等。 為了分發庫、提供構建和管理依賴項,該項目開發了 Cargo 包管理器。 crates.io 存儲庫支持託管庫。
主要創新:
- 對於數組,已經實現了 IntoIterator 特徵,它允許您按值組織數組元素的迭代: for i in [1, 2, 3] { .. }
也可以將陣列傳遞給接受迭代器的方法,例如: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
以前,IntoIterator 僅針對數組引用實現,即迭代值需要使用引用(“&[1, 2, 3]”)或“[1, 2, 3].iter()”。 陣列的 IntoIterator 實作受到早期編譯器從 array.into_iter() 到 (&array).into_iter() 轉換導致的相容性問題的阻礙。 這些問題已透過解決方法解決 - 編譯器將繼續將 array.into_iter() 轉換為 (&array).into_iter() ,就好像沒有 IntoIterator 特徵的實作一樣,但僅在使用「.into_iter(」呼叫該方法時)” 語法,並且不觸及“in [1, 2, 3]”、“iter.zip([1, 2, 3])”、“IntoIterator::into_iter([1, 2, 3]”形式的調用)」。
- 可以指定表達式“|” (邏輯或運算)在範本的任何部分,例如,而不是「Some(1) | Some(2)" 你現在可以寫 "Some(1 | 2)": 符合結果 { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- 允許在標識符中使用非 ASCII 字符,包括 Unicode UAX 31 規範中定義的任何國家字符,但不包括表情符號字符。 如果使用不同但相似的字符,編譯器將發出警告。 const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } 讓 α = 1; 讓我們= 2; 警告:「s」和「s」之間的標識符對被認為容易混淆
- 新的部分 API 已轉移到穩定類別,包括以下穩定的 API:
- 數組::from_ref
- 數組::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::保留
- BTreeMap::保留
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- 持續時間::零
- 持續時間::最長
- 持續時間::is_zero
- 片長::saturating_add
- 片長::saturating_sub
- 片長::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- 數組的 IntoIterator
- {整數}::位
- io::錯誤::不支持
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- 選項::插入
- 排序::is_eq
- 訂購::is_ne
- 訂購::is_lt
- 訂購::is_gt
- 訂購::is_le
- 訂購::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- 可查看::peek_mut
- RC::increment_strong_count
- RC::decrement_strong_count
- 切片::IterMut::as_slice
- AsRef<[T]> 用於 slice::IterMut
- impl SliceIndex for (綁定, 邊界)
- Vec::extend_from_within
- 對 wasm64-unknown-unknown 平台的第三級支援已經實現。 第三級涉及基本支持,但沒有自動化測試、發布官方建置或檢查程式碼是否可以建置。
- 預設情況下,Cargo 套件管理器已變更為使用名稱“main”作為 Git 儲存庫 (HEAD) 的主分支。 託管在使用名稱 main 而不是 master 的儲存庫中的依賴項不再需要配置branch =「main」。
- 在編譯器中,對LLVM最低版本的要求提升至LLVM 10。
此外,我們還可以注意到為將 Rust 語言開發元件的工具整合到 Linux 核心中的開發提供了資金。 這項工作將在 ISRG 組織(互聯網安全研究小組)贊助下的 Prossimo 項目框架內進行,該組織是 Let's Encrypt 項目的創始人,致力於推動 HTTPS 和技術的發展,以提高網絡安全性。互聯網。 這些資金將由Google提供,Google將支付 Rust-for-Linux 專案作者 Miguel Ojeda 的工作費用。 在此之前,ISRG 和 Google 已經資助為 curl 實用程式建立替代 HTTP 後端,並為 Apache http 伺服器開發新的 TLS 模組。
據微軟和谷歌稱,大約 70% 的漏洞是由不安全的記憶體處理引起的。 預計使用 Rust 語言開發裝置驅動程式等核心元件將降低因不安全記憶體處理而導致的漏洞風險,並消除諸如在釋放記憶體區域後存取記憶體區域以及超出緩衝區邊界等錯誤。
Rust 在編譯時通過引用檢查、跟踪對象所有權和對像生命週期(範圍)以及在代碼執行期間評估內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。
來源: opennet.ru