Rust 1.58 編程語言發布

通用程式語言 Rust 1.58 已發布,該語言由 Mozilla 計畫創建,但現在由獨立非營利組織 Rust 基金會贊助開發。 該語言專注於記憶體安全,提供自動記憶體管理,並提供了無需使用垃圾收集器或運行時即可實現高任務並行性的方法(運行時被簡化為標準庫的基本初始化和維護)。

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

主要創新:

  • 在行格式化區塊中,除了先前可用的按編號和名稱替換行後明確列出的變數的功能之外,還實現了透過向行添加表達式「{identifier}」來替換任意識別碼的功能。 例如: // 先前支援的結構: println!("Hello, {}!", get_person()); println!("你好,{0}!", get_person()); println!("你好,{person}!", person = get_person()); // 現在你可以指定 let person = get_person(); println!("你好,{person}!");

    標識符也可以直接在格式選項中指定。 令(寬度,精度)= get_format(); for (名稱, 分數) in get_scores() { println!("{名稱}: {分數:寬度$.精度$}"); }

    新的替換適用於所有支援字串格式定義的宏,但「panic!」宏除外。 在 Rust 語言的 2015 和 2018 版本中,panic!("{ident}") 被視為常規字串(在 Rust 2021 中,替換有效)。

  • Windows 平台上 std::process::Command 結構的行為已更改,因此在執行命令時,出於安全原因,它不再查找當前目錄中的可執行檔。 當前目錄被排除在外,因為如果程式在不受信任的目錄中運行,則它可能被用來執行惡意程式碼 (CVE-2021-3013)。 新的可執行檔偵測邏輯涉及搜尋 Rust 目錄、應用程式目錄、Windows 系統目錄以及 PATH 環境變數中指定的目錄。
  • 標準庫擴展了標記為“#[must_use]”的函數數量,以便在忽略返回值時發出警告,這有助於識別由於假設函數將更改值而不是返回新值而導致的錯誤。
  • API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
    • 元資料::is_symlink
    • 路徑::is_symlink
    • {整數}::saturating_div
    • 選項::unwrap_unchecked
    • 結果::unwrap_unchecked
    • 結果::unwrap_err_unchecked
  • “const”屬性決定了在任何上下文中使用它而不是常量的可能性,用於函數中:
    • 持續時間::新
    • 持續時間::checked_add
    • 片長::saturating_add
    • 持續時間::checked_sub
    • 片長::saturating_sub
    • 持續時間::checked_mul
    • 片長::saturating_mul
    • 持續時間::checked_div
  • 允許在「const」上下文中取消引用「*const T」指標。
  • 在 Cargo 套件管理器中,rust_version 欄位已新增至包元資料中,並且「--message-format」選項已新增至「cargo install」命令。
  • 編譯器實現了對CFI(控制流完整性)保護機制的支持,該機制在每次間接調用之前添加檢查,以檢測某些形式的未定義行為,這些行為可能會導致違反正常執行順序(控制流)。使用更改儲存在函數記憶體中的指標的漏洞。
  • 編譯器增加了對 LLVM 覆蓋率比較格式的版本 5 和 6 的支持,用於在測試期間評估程式碼覆蓋率。
  • 在編譯器中,對LLVM最低版本的要求提升至LLVM 12。
  • 已實現對 x86_64-unknown-none 平台的第三級支援。 第三級涉及基本支持,但沒有自動化測試、發布官方建置或檢查程式碼是否可以建置。

此外,我們還可以注意到 Microsoft 發布了 Rust for Windows 0.30 庫,它允許您使用 Rust 語言為 Windows 作業系統開發應用程式。 該套件包括兩個 crate 套件(windows 和 windows-sys),透過它們可以存取 Rust 程式中的 Win API。 API 支援的程式碼是根據描述 API 的元資料動態產生的,這使您不僅可以實現對現有 Win API 呼叫的支持,還可以實現對將來出現的呼叫的支援。 新版本增加了對UWP(通用Windows平台)目標平台的支持,並實現了Handle和Debug類型。

來源: opennet.ru

添加評論