Rust 1.34 編程語言發布

Mozilla專案開發的系統程式語言Rust 1.34已經發布。 該語言專注於記憶體安全,提供自動記憶體管理,並提供一種無需使用垃圾收集器或運行時即可實現高任務並行性的方法。

Rust 的自動記憶體管理使開發人員免於指標操作,並防止低階記憶體操作所造成的問題,例如釋放後記憶體存取、空指標取消引用、緩衝區溢位等。 為了分發庫、確保組裝和管理依賴關係,專案正在開發 Cargo 套件管理器,它允許您一鍵獲取程式所需的庫。 crates.io 儲存庫支援託管庫。

主要創新:

  • Cargo 套件管理器新增了工具來處理可與 crates.io 公共註冊表共存的替代套件註冊表。 例如,專有應用程式的開發人員現在可以使用自己的私有註冊表(在Cargo.toml 中列出依賴項時可以使用該註冊表),並為其產品應用類似於crates.io 的版本控制模型,以及將依賴項引用到兩個 crate。io 並儲存到您自己的註冊表中。

    將外部登錄檔新增至 ~/.cargo/config
    “[registries]”部分中提供了一個新選項“my-registry”,並且添加了“other-crate”選項以在“[dependencies]”部分中的 Cargo.toml 依賴項中提及外部註冊表。 要連接到其他註冊表,只需將身份驗證令牌放入 ~/.cargo/credentials 檔案中並執行命令
    “cargo login --registry=my-registry”並發布包 -
    「貨物發布-registry=my-registry」;

  • 新增了對使用“?”運算符的完全支援。 在 doctests 中,它允許您使用文件中的範例程式碼作為測試。 以前的操作員
    “?” 只有當存在「fn main()」函數或「#[test]」函數時,才可用於處理測試執行期間的錯誤;

  • 在使用過程巨集定義的自訂屬性中,可以使用任意標記集(「#[attr($tokens)]」、「#[attr[$tokens]] 和 #[attr{$tokens}]」)。 以前,元素只能使用字串文字以樹/遞歸形式指定,例如“#[foo(bar, baz(quux, foo = “bar”))]”,但現在可以使用枚舉 (' #[range( 0. .10)]') 和類似「#[bound(T: MyTrait)]」的結構;
  • TryFrom 和 TryInto 特徵已經穩定,允許進行類型轉換和錯誤處理。 例如,像 from_be_bytes 這樣的整數類型的方法使用陣列作為輸入,但資料通常是 Slice 類型,並且手動在陣列和切片之間進行轉換是有問題的。 透過新特徵,可以透過呼叫 .try_into() 即時執行指定操作,例如「let num = u32::from_be_bytes(slice.try_into()?)」。 對於始終成功的轉換(例如,從類型 u8 到 u32),新增了 Infallible 錯誤類型以允許透明地使用
    TryFrom 用於「From」的所有現有實作;

  • 棄用了 CommandExt::before_exec 函數,該函數允許在 exec 之前執行處理程序,該處理程序在 fork() 呼叫後分叉的子進程的上下文中執行。 在這種情況下,父進程的某些資源(例如檔案描述符和映射的記憶體區域)可能會重複,這可能會導致未定義的行為和庫的錯誤操作。
    建議使用不安全函數 CommandExt::pre_exec 取代 before_exec。

  • 穩定的有符號和無符號原子整數類型,大小範圍為 8 到 64 位元(例如 AtomicU8),以及有符號類型 NonZeroI[8|16|32|54|128]。
  • API 的新部分已移至穩定類別,包括 Any::type_id、Error::type_id、slice::sort_by_cached_key、str::escape_*、str::split_ascii_whitespace、Instant::checked_[add|sub ] 和SystemTime 方法已穩定::checked_[add|sub]。 iter::from_fn 和 iter::successors 函數已經穩定;
  • 對於所有整數類型,實作了checked_pow、saturating_pow、wrapping_pow和overflowing_pow方法;
  • 新增了透過指定「-C linker-plugin-lto」建置選項在連結階段啟用最佳化的功能(rustc 將 Rust 程式碼編譯為 LLVM 位元程式碼,這允許應用 LTO 最佳化)。

來源: opennet.ru

添加評論