Rust 1.60 編程語言發布

Rust 1.60 通用編程語言的發布已經發布,該語言由 Mozilla 項目創建,但現在由獨立的非營利組織 Rust 基金會贊助開發。 該語言專注於內存安全,並提供實現高作業並行性的方法,同時避免使用垃圾收集器和運行時(運行時減少為標準庫的基本初始化和維護)。

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

Rust 在編譯時通過引用檢查、跟踪對象所有權、跟踪對像生命週期(範圍)以及評估代碼執行期間內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。

主要創新:

  • rustc 編譯器有一個基於 LLVM 的穩定係統,用於產生覆蓋率數據,用於在測試期間評估程式碼覆蓋率。 要在彙編期間啟用覆蓋率數據,必須使用「-Cinstrument-coverage」標誌,例如,使用「RUSTFLAGS =」-C Instrument-coverage「cargo build」指令啟動彙編。 執行以這種方式編譯的可執行檔後,default.profraw 檔案將保存在目前目錄中,您可以使用 llvm-tools-preview 元件中的 llvm-profdata 公用程式進行處理。 然後,可以將 llvm-profdata 處理的輸出傳遞給 llvm-cov 以產生已註解的程式碼覆蓋率報告。 有關原始程式碼連結的資訊取自正在檢查的可執行文件,其中包括有關覆蓋計數器和程式碼之間連接的必要資料。 1| 1|fn main() { 2| 1| println!("你好,世界!"); 3| 1|}
  • 在貨物包管理器中,對「-timings」標誌的支援已經穩定,其中包括產生有關建置進度和每個步驟的執行時間的詳細報告。 該報告可能有助於優化組裝過程的效能。
  • Cargo 套件管理器為條件編譯和選擇可選依賴項的機制提供了新的語法,透過在[​​features] 部分列出命名屬性清單在Cargo.toml 檔案中進行配置,並透過在套件建置期間啟用這些屬性來啟動使用“--features”標誌。 新版本增加了對單獨命名空間中的依賴和弱依賴的支援。

    在第一種情況下,可以在「[features]」部分中使用帶有前綴「dep:」的元素來明確連結到可選依賴項,而無需將此依賴項隱式表示為功能。 在第二種情況下,新增了使用「?」符號進行標記的支援。 ("package-name?/feature-name") 僅當某些其他屬性包含給定的可選依賴項時才應包含可選依賴項。 例如,在下面的範例中,啟用 serde 屬性將啟用「serde」依賴項,以及「rgb」依賴項的「serde」屬性,但前提是在其他地方啟用了「rgb」依賴項:[依賴項] serde = { 版本= " 1.0.133", 可選= true } rgb = { 版本= "0.8.25", 可選= true } [功能] serde = ["dep:serde", "rgb?/serde"]

  • 已恢復對上一版本中停用的增量編譯的支援。 導致該功能被停用的編譯器錯誤已解決。
  • 解決了為即時計時器提供單調計時保證的一些問題,該保證考慮了系統在睡眠模式下花費的時間。 以前,只要有可能就使用作業系統 API 來操作計時器,這沒有考慮到打破時間單調性的問題情況,例如硬體問題、虛擬化的使用或作業系統中的錯誤。
  • API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
    • 弧::新循環
    • Rc::new_circular
    • 切片::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • 大小::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • 使用::abs_diff
    • 顯示 io::ErrorKind
    • 來自退出代碼
    • 不是為了 ! (輸入“從不”)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_Detected!
  • 已為 mips64-openwrt-linux-musl* 和 armv7-unknown-linux-uclibceabi (softfloat) 平台實現了第三級支援。 第三級涉及基本支持,但沒有自動化測試、發布官方建置或檢查程式碼是否可以建置。
  • 編譯器已切換為使用 LLVM 14。

此外,您還可以注意:

  • 新增了對使用 rustc_codegen_gcc 後端引導 rustc 編譯器的支持,這允許您使用 GCC 專案中的 libgccjit 庫作為 rustc 中的程式碼產生器,這允許 rustc 為 GCC 中可用的架構和最佳化提供支援。 編譯器升級意味著能夠在 rustc 中使用基於 GCC 的程式碼產生器來建置 rustc 編譯器本身。 在實用方面,此功能可讓您為 rustc 先前不支援的架構建立 rust 程式。
  • uutils coreutils 0.0.13 工具包已發布,其中正在開發用 Rust 語言重寫的 GNU Coreutils 套件的類似版本。 Coreutils 附帶了一百多個實用程序,包括 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls。 該專案的目標是創建 Coreutils 的跨平台替代實現,能夠在 Windows、Redox 和 Fuchsia 平台上運行,並在寬鬆的 MIT 許可證(而不是 GPL Copyleft 許可證)下分發。

    新版本改進了許多實用程式的實現,包括顯著提高了 cp、dd、df、split 和 tr 實用程式與 GNU 專案中對應實用程式的兼容性。 提供線上文件。 clap 解析器用於解析命令列參數,它改進了“--help”標誌的輸出,並添加了對長命令縮寫的支援(例如,您可以指定“ls -col”而不是“ls -color” ”) 。

來源: opennet.ru

添加評論