發布程式語言 Rust 1.75 和 unikernel Hermit 0.6.7

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

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

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

主要創新:

  • 新增了在私有特徵中使用「async fn」和「->impl Trait」符號的功能。例如,使用“->impl Trait”,您可以寫一個傳回迭代器的特徵方法:trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    您也可以使用「async fn」建立特徵: Trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // 將擴展為: // fn fetch(&self, url: Url) -> impl Future; }

  • 新增了用於計算相對於指標的位元組偏移量的 API。當使用裸指標(“*const T”和“*mut T”)時,可能需要在指標上新增偏移量的操作。以前,為此可以使用“::add(1)”之類的結構,添加與“size_of::()”大小相對應的位元組數。新的 API 簡化了此操作,並使操作位元組偏移成為可能,而無需先將類型轉換為“*const u8”或“*mut u8”。
    • 指標::byte_add
    • 指標::位元組偏移量
    • 指標::byte_offset_from
    • 指標::byte_sub
    • 指標::wrapping_byte_add
    • 指標::wrapping_byte_offset
    • 指標::wrapping_byte_sub
  • 繼續努力提高 rustc 編譯器的效能。新增了 BOLT 優化器,該優化器在連結後階段運行並使用預先準備好的執行設定檔中的信息。使用 BOLT 可以透過更改 librustc_driver.so 函式庫程式碼的佈局來將編譯器執行速度加快約 2%,從而更有效地使用處理器快取。

    包括使用“-Ccodegen-units=1”選項建立 rustc 編譯器,以提高 LLVM 中的最佳化品質。執行的測試顯示,在「-Ccodegen-units=1」建置的情況下,效能提高了約 1.5%。預設情況下,僅針對 x86_64-unknown-linux-gnu 平台啟用新增的最佳化。

    前面提到的最佳化經過 Google 測試,旨在減少用 Rust 編寫的 Android 平台元件的建置時間。在建立 Android 時使用「-C codegen-units=1」使我們能夠將工具包的大小減少 5.5%,並將效能提高 1.8%,而工具包本身的建置時間幾乎增加了一倍。

    啟用連結時垃圾收集(「--gc-sections」)可將效能提升高達 1.9%,使連結時最佳化 (LTO) 提升高達 7.7%,基於設定檔的最佳化 (PGO) 提升高達 19.8%。最後,使用 BOLT 實用程式進行最佳化,使建置速度提高到 24.7%,但工具包的大小增加了 10.9%。

    發布程式語言 Rust 1.75 和 unikernel Hermit 0.6.7

  • API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
    • 原子*::from_ptr
    • 文件時間
    • 檔案時間擴充
    • 文件::設定修改
    • 檔案::設定時間
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • 選項::as_slice
    • 選項::as_mut_slice
    • 指標::byte_add
    • 指標::位元組偏移量
    • 指標::byte_offset_from
    • 指標::byte_sub
    • 指標::wrapping_byte_add
    • 指標::wrapping_byte_offset
    • 指標::wrapping_byte_sub
  • “const”屬性決定了在任何上下文中使用它而不是常量的可能性,用於函數中:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::歸零
    • 記憶體::判別式
    • 記憶體::歸零
  • 已為 csky-unknown-linux-gnuabiv2hf、i586-unknown-netbsd 和 mipsel-unknown-netbsd 平台實現了第三級支援。第三級涉及基本支持,但沒有自動化測試、發布官方建置或檢查程式碼是否可以建置。

此外,我們還可以注意到Hermit 專案的新版本,它開發了一個用Rust 語言編寫的專用核心(unikernel),提供了用於建立獨立應用程式的工具,這些應用程式可以在虛擬機器管理程式或裸硬體之上運行,無需額外的層並且沒有作業系統。建置後,應用程式靜態連結到一個庫,該程式庫獨立實現所有必要的功能,而不依賴作業系統核心和系統庫。此專案代碼根據 Apache 2.0 和 MIT 許可證分發。支援彙編以獨立執行用 Rust、Go、Fortran、C 和 C++ 編寫的應用程式。該專案還在開發自己的引導程序,允許您使用 QEMU 和 KVM 啟動 Hermit。

來源: opennet.ru

添加評論