Rust 編程語言 2021 版 (1.56)

系統編程語言 Rust 1.56 的發布,由 Mozilla 項目創建,但現在在獨立的非營利組織 Rust 基金會的讚助下開發,已經發布。 除了常規版本號外,該版本還標記為 Rust 2021,標誌著過去三年中提出的更改已趨於穩定。 Rust 2021 還將作為未來三年功能構建的基礎,類似於 Rust 2018 版本在過去三年中如何成為語言開發的基礎。

為了保持兼容性,開發人員可以在他們的程序中使用“2015”、“2018”和“2021”標籤將程序鏈接到與所選 Rust 版本對應的語言狀態切片。 引入修訂以分離不兼容的更改,並通過“[package]”部分中的“edition”字段在貨物包的元數據中進行配置。 例如,“2018”版本包括在 2018 年底穩定的功能,還涵蓋所有不違反兼容性的進一步更改。 2021 版還包括當前 1.56 版本中提出並批准在未來實施的兼容性破壞功能。 除了語言本身,編輯們還考慮了工具和文檔的狀態。

Rust 2021 中修復的主要不兼容性是:

  • 在閉包中單獨捕獲 - 閉包現在可以捕獲單個字段名稱而不是整個 ID。 例如,“|| ax + 1" 只會捕獲 "ax" 而不是 "a"。
  • 數組的 IntoIterator 特性:array.into_iter() 允許您按值而不是按引用迭代數組的元素。
  • “|”表達式的處理已在 macro_rules 中更改模式中的(邏輯或運算)- 匹配中的“:pat”說明符現在遵循模式“A | 乙”。
  • 貨物包管理器默認包含功能解析器的第二個版本,在 Rust 1.51 中引入了對它的支持。
  • 特徵 TryFrom、TryInto 和 FromIterator 已添加到 prelude 標準庫模塊中。
  • panic!(..) 和 assert!(expr, ..) 宏現在總是使用 format_args!(..) 來格式化字符串,類似於 println!()。
  • 表達式 ident#、ident"..." 和 ident'...' 在該語言的語法中保留。
  • bare_trait_objects 和 ellipsis_inclusive_range_patterns 警告已移至錯誤類別。

Rust 1.56 中的新功能:

  • 在 Cargo.toml 中,在“[package]”部分,添加了 rust-version 字段,通過它可以確定 crate 包支持的最低 Rust 版本。 如果當前版本與指定參數不匹配,Cargo 將異常中止。
  • 當使用“binding @pattern”表達式進行模式匹配時,支持指定額外的綁定(例如,“let matrix @Matrix { row_len, .. } = get_matrix();”)。
  • API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • 核心::恐慌::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::收縮到
    • 字符串::收縮到
    • OsString::shrink_to
    • PathBuf::shrink_to
    • 二進制堆::shrink_to
    • VecDeque::收縮到
    • HashMap::shrink_to
    • 哈希集::收縮到
  • “const”屬性,它決定了在任何上下文中使用它而不是常量的可能性,在函數中使用
    • std::mem::嬗變
    • [T]::首先
    • [T]::首先分割
    • [T]::最後
    • [T]::split_last
  • 編譯器已切換為使用 LLVM 版本 13。
  • 實現了對 aarch64-apple-ios-sim 平台的 32 級支持和對 powerpc-unknown-freebsd 和 riscvXNUMXimc-esp-espidf 平台的 XNUMX 級支持。 第三層意味著基本支持,但沒有自動化測試、發布官方構建和檢查構建代碼的能力。

回想一下,Rust 語言專注於安全內存管理,提供自動內存管理,並提供一種實現作業執行的高度並行性的方法,同時無需使用垃圾收集器和運行時(運行時減少為基本的初始化和維護標準庫)。

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

來源: opennet.ru

添加評論