Rust 1.47 編程語言發布

由 Mozilla 專案創建的 Rust 系統程式語言 1.47 版本已經發布。 該語言專注於記憶體安全,提供自動記憶體管理,並提供在不使用垃圾收集器或運行時的情況下實現高任務並行性的手段(運行時被簡化為標準庫的基本初始化和維護)。

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

主要創新:

  • 實現了對任意大小數組的特徵的支援。 先前,由於無法為所有整數值定義泛型函數,標準函式庫僅為大小最多為 32 個元素的陣列提供內建特徵支援(每個大小的特徵都是靜態定義的)。 由於 const 泛型功能的創建,可以為任何數組大小定義泛型函數,但它們尚未包含在該語言的穩定功能中,儘管它們已在編譯器中實現並且現在已在標準庫中使用對於任何大小的數組類型。
    例如,Rust 1.47 中的以下構造將列印數組的內容,儘管以前它會導致錯誤:

fn 主() {
令 xs = [0; 34];
println!("{:?}", xs);
}

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

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

之前,trace 是分 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 進行建置(Rust 使用 LLVM 作為程式碼產生的後端)。 同時,保留了使用舊版 LLVM(最高版本 8)進行建置的能力,但預設情況下(在 rust-lang/llvm-project 中)現在使用 LLVM 11。預計 LLVM 11 的發布將在未來進行。天。
  • 在 Windows 平台上,rustc 編譯器提供對啟用控制流程完整性檢查(Control Flow Guard)的支持,使用「-C control-flow-guard」標誌啟動。 在其他平台上,此標誌暫時被忽略。
  • API 的新部分已轉移到穩定類別,包括穩定的 Ident::new_raw、Range::is_empty、RangeInclusive::is_empty、Result::as_deref、Result::as_deref_mut、Vec::leak、erer::offset_frompoint 、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

來源: linux.org.ru

添加評論