Rust 1.47 編程語言發布

發表 系統程式語言 1.47 版 ,由 Mozilla 專案創建。 該語言專注於記憶體安全,提供自動記憶體管理,並提供了一種無需使用即可實現高任務並行性的手段 垃圾收集器 и 運行 (運行時歸結為標準庫的基本初始化和維護)。

Rust 的自動記憶體管理消除了操作指標時的錯誤,並防止低階記憶體操作引起的問題,例如在釋放記憶體區域後存取它、空指標取消引用、緩衝區溢位等。 正在開發一個套件管理器來分發庫、確保組裝並管理專案的依賴關係。 貨物。 支援儲存庫來託管庫 箱子.

主要的 創新:

  • 實現了對類型的支持 陣列 任意大小。 先前,由於無法為所有整數值定義泛型函數,標準函式庫僅針對大小最多為 32 個元素的陣列提供內建特徵支援(每個大小的特徵都是靜態定義的)。 由於常數泛型(“const generics”)功能的創建,為任何數組大小定義泛型函數成為可能,但它們尚未包含在穩定語言功能中,儘管它們在編譯器中實現並且是現在 涉及 在標準庫中任何大小的數組特徵。

    例如,Rust 1.47 中的以下構造將列印數組的內容,儘管以前它會導致錯誤:

    fn 主() {
    令 xs = [0; 34];

    println!("{:?}", xs);
    }

  • 提供較短追蹤(回溯)的輸出,緊急情況下的輸出。 在大多數情況下不感興趣、但會擾亂輸出並分散對問題主要原因的注意力的元素將從跟踪中排除。 要返回完整跟踪,您可以使用環境變數“RUST_BACKTRACE=full”。 例如,對於程式碼

    fn 主() {
    恐慌!();
    }

    以前,跡線分 23 個階段輸出,但現在將減少為
    3步驟讓你立即領會本質:

    線程“main”因“明確恐慌”而恐慌,src/main.rs:2:5
    堆疊回溯:
    0: std::恐慌::begin_panic
    在/rustc/d…d75a/library/std/src/panicking.rs:497
    1:遊樂場::主要
    在 ./src/main.rs:2
    2:核心::操作::函數::FnOnce::call_once
    在/rustc/d…d75a/library/core/src/ops/function.rs:227

  • rustc 編譯器已更新為使用 LLVM 11 (鏽 用途 LLVM 作為後端 程式碼生成)。 同時,保留了使用較舊的 LLVM(最高版本 8)進行建置的能力,但預設情況下(在 rust-lang/llvm-項目)現在正在使用 LLVM 11。LLVM 11 預計將在未來幾天內發布。
  • 在 Windows 平台上,rustc 編譯器提供對啟用控制流程完整性檢查(Control Flow Guard)的支持,使用「-C control-flow-guard」標誌啟動。 在其他平台上,此標誌暫時被忽略。
  • 新的部分 API 已轉移到穩定類別,包括穩定的
    識別::new_raw,
    範圍::is_empty,
    範圍包含::is_empty,
    結果::as_deref,
    結果::as_deref_mut,
    向量::洩漏,
    指針::offset_from,
    f32::TAU 和
    f64::TAU。

  • 「const」屬性決定了在任何上下文中使用它而不是常數的可能性,在方法中使用:
    • 對於除零之外的所有整數都是新的;
    • 所有整數的checked_add、checked_sub、checked_mul、checked_neg、checked_shl、checked_shr、saturating_add、saturating_sub 和 saturating_mul;
    • is_ascii_alphabetic、is_ascii_uppercase、is_ascii_lowercase、is_ascii_alphanumeric、is_ascii_digit、is_ascii_hexdigit、is_ascii_punctuation、is_ascii_graph
  • 對於 FreeBSD 涉及 FreeBSD 11.4 的工具包(FreeBSD 10 不支援 LLVM 11)。

來源: opennet.ru

添加評論