Rust 1.74 程式語言發布。 RustVMM 稽核。 用 Rust 重寫 Binder

Rust 1.74 通用編程語言的發布已經發布,該語言由 Mozilla 項目創建,但現在由獨立的非營利組織 Rust 基金會贊助開發。 該語言專注於內存安全,並提供實現高作業並行性的方法,同時避免使用垃圾收集器和運行時(運行時減少為標準庫的基本初始化和維護)。

Rust 的內存處理方法使開發人員在操作指針時避免錯誤,並防止由於低級內存處理而出現的問題,例如在內存區域被釋放後訪問它、取消引用空指針、緩衝區溢出等。 為了分發庫、提供構建和管理依賴項,該項目開發了 Cargo 包管理器。 crates.io 存儲庫支持託管庫。

Rust 在編譯時通過引用檢查、跟踪對象所有權、跟踪對像生命週期(範圍)以及評估代碼執行期間內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。

主要創新:

  • 新增了透過 Cargo.toml 檔案和套件管理器清單配置 lint 檢查的功能。 為了定義 lint 設置,例如響應級別(禁止、拒絕、警告、允許),建議使用新部分“[lints]”和“[workspace.lints]”,在做出相關決定時會考慮其中的更改重建。 例如,在彙編或新增「#![forbid(unsafe_code)]」和「#![deny(clippy)」時,不要指定「-F」、「-D」、「-W」和「-A」標誌:” 程式碼的屬性) :enum_glob_use)]” 現在可以在Cargo 清單中使用: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • Crate 套件管理器新增了連接到儲存庫時進行身份驗證的功能。 基本套件包括在Linux 憑證儲存(基於libsecret)、macOS(鑰匙串)和Windows(Windows 憑證管理員)中放置身份驗證參數的支持,但該系統最初是模組化的,允許您組織與各種提供商的工作來儲存和管理身份驗證參數。產生令牌,例如,已經準備了一個外掛程式用於使用 1Password 密碼管理器。 儲存庫可能需要對任何操作進行身份驗證,而不僅僅是為了確認套件已發布。 ~/.cargo/config.toml [登錄] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • 對返回類型投影 (impl_trait_projections) 的支援已經穩定,允許在返回類型中提及 Self 和 T::Assoc,例如“async fn”和“->impl Trait”。 struct Wrapper<'a, T>(&'a T); // 提及`Self` 的不透明回傳類型: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … * / } } 特徵 Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // 提及關聯類型的不透明回傳類型: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl 迭代器{ /* … */ } }
  • API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
  • “const”屬性決定了在任何上下文中使用它而不是常量的可能性,用於函數中:
    • 核心::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • 核心::num::飽和
    • 為 std::process::Stdio 實作 From
    • 為 std::process::Stdio 實作 From
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::錯誤::其他
    • 實現 TryFrom 16歲以下
    • 暗示來自<&[T; N]>對於向量
    • 暗示從<&mut [T; N]>對於向量
    • 暗示從<[T; N]> 表示弧 <[T]>
    • 暗示從<[T; N]> 對於 Rc<[T]>
  • 編譯器、工具包、標準函式庫和產生的應用程式執行檔對 Apple 平台的要求有所提高,現在至少需要 macOS 10.12 Sierra、iOS 10 和 10 年發布的 tvOS 2016 才能運作。
  • 已為 i686-pc-windows-gnullvm 平台實現了第三級支援。 第三級涉及基本支持,但沒有自動化測試、發布官方建置或檢查程式碼是否可以建置。
  • 已經實現了對loongarch64-unknown-none目標平台的第二級支援。 第二級支援涉及組裝保證。

此外,還有兩個與 Rust 語言相關的事件值得關注:

  • 旨在加強開源專案安全性的OSTIF(開源技術改進基金)發布了RustVMM 目的審計結果,該專案提供了用於建立特定於任務的虛擬機器管理程式和虛擬機器監視器(VMM) 的元件。 英特爾、阿里巴巴、亞馬遜、谷歌、Linaro 和紅帽等公司都參與了該項目的開發。 Intel Cloud Hypervisor 和 Dragonball hypervisor 正在基於 RustVMM 開發。 審計確認了程式碼庫的高品質以及旨在實現最大安全性的架構和實現中技術的使用。 審核中發現6個不直接影響安全的問題。
  • Google 向 Linux 核心開發者郵件列表介紹了用 Rust 語言重寫的 Binder 進程間通訊機制的新實作。 此次返工是作為一個專案的一部分進行的,該專案旨在加強安全性、推廣安全編程技術並提高在Android 中使用記憶體時識別問題的效率(Android 中識別的所有危險漏洞中約70% 是由使用記憶體時的錯誤所引起的) )。 Rust 中 Binder 的實作實現了與 C 語言原始版本的功能對等,通過了所有 AOSP(Android 開源專案)測試,可用於建立韌體的工作版本。 兩種實現的性能大致處於同一水平(偏差在 -1.96% 和 +1.38% 範圍內)。

來源: opennet.ru

添加評論