プログラミング言語 Rust 1.75 およびユニカーネル Hermit 0.6.7 のリリース

Mozilla プロジェクトによって設立され、現在は独立した非営利団体 Rust Foundation の後援の下で開発されている汎用プログラミング言語 Rust 1.75 のリリースが公開されました。 この言語はメモリの安全性に焦点を当てており、ガベージ コレクターとランタイムの使用を回避しながら、高いジョブ並列処理を実現する手段を提供します (ランタイムは、標準ライブラリの基本的な初期化とメンテナンスに短縮されます)。

Rust のメモリ処理メソッドは、開発者をポインタ操作時のエラーから守り、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなど、低レベルのメモリ処理によって発生する問題から保護します。 ライブラリを配布し、ビルドを提供し、依存関係を管理するために、プロジェクトは Cargo パッケージ マネージャーを開発します。 crates.io リポジトリは、ライブラリのホストとしてサポートされています。

Rustでは、参照チェック、オブジェクトの所有権の追跡、オブジェクトの有効期間(スコープ)の追跡、コード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時にメモリの安全性が提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

主な革新:

  • プライベートトレイトで「async fn」と「->impl Trait」表記を使用する機能を追加しました。たとえば、「->impl Trait」を使用すると、イテレータを返す特性メソッドを作成できます。 trait Container { fn items(&self) -> impl Iterator; MyContainer の impl コンテナ { 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
    • ポインタ::byte_offset_from
    • ポインタ::byte_sub
    • pointer::wrapping_byte_add
    • ポインタ::ラッピングバイトオフセット
    • ポインタ::wrapping_byte_sub
  • Rustc コンパイラのパフォーマンスを向上させるための継続的な作業。 BOLT オプティマイザーが追加されました。これはポストリンク段階で実行され、事前に準備された実行プロファイルからの情報を使用します。 BOLT を使用すると、librustc_driver.so ライブラリ コードのレイアウトを変更してプロセッサ キャッシュをより効率的に使用できるため、コンパイラの実行を約 2% 高速化できます。

    LLVM での最適化の品質を向上させるために、「-Ccodegen-units=1」オプションを使用して Rustc コンパイラーをビルドする機能が追加されました。実行されたテストでは、「-Ccodegen-units=1」ビルドの場合、パフォーマンスが約 1.5% 向上することがわかりました。追加された最適化は、x86_64-unknown-linux-gnu プラットフォームに対してのみデフォルトで有効になります。

    前述の最適化は、Rust で書かれた Android プラットフォーム コンポーネントのビルド時間を短縮するために Google によってテストされました。 Android のビルド時に「-C codegen-units=1」を使用すると、ツールキットのサイズが 5.5% 削減され、パフォーマンスが 1.8% 向上しました。また、ツールキット自体のビルド時間はほぼ XNUMX 倍になりました。

    リンク時のガベージ コレクション (「--gc-sections」) を有効にすると、パフォーマンスが最大 1.9% 向上し、リンク時間の最適化 (LTO) が最大 7.7%、プロファイルベースの最適化 (PGO) が最大 19.8% 向上しました。最終的には、BOLT ユーティリティを使用して最適化が適用され、ビルド速度が 24.7% に向上しましたが、ツールキットのサイズは 10.9% 増加しました。

    プログラミング言語 Rust 1.75 およびユニカーネル Hermit 0.6.7 のリリース

  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • アトミック*::from_ptr
    • ファイルタイム
    • ファイル時間拡張
    • ファイル::set_modified
    • ファイル::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • オプション::as_slice
    • オプション::as_mut_slice
    • ポインタ::byte_add
    • ポインタ::byte_offset
    • ポインタ::byte_offset_from
    • ポインタ::byte_sub
    • pointer::wrapping_byte_add
    • ポインタ::ラッピングバイトオフセット
    • ポインタ::wrapping_byte_sub
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、関数で使用されます。
    • Ipv6Addr::to_ipv4_mapped
    • たぶんUninit::assume_init_read
    • たぶんUninit::zeroed
    • mem::判別式
    • mem::ゼロ化
  • サポートの 2 番目のレベルは、csky-unknown-linux-gnuabiv586hf、iXNUMX-unknown-netbsd、および mipsel-unknown-netbsd プラットフォームに実装されました。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。

さらに、Hermit プロジェクトの新しいバージョンにも注目できます。このプロジェクトは、Rust 言語で書かれた特殊なカーネル (ユニカーネル) を開発し、追加のレイヤーなしでハイパーバイザーまたはベア ハードウェア上で実行できる自己完結型アプリケーションを構築するためのツールを提供します。しかもオペレーティングシステムなしで。アプリケーションはビルドされるとライブラリに静的にリンクされ、OS カーネルやシステム ライブラリに束縛されることなく、必要なすべての機能を独立して実装します。プロジェクト コードは、Apache 2.0 および MIT ライセンスに基づいて配布されます。アセンブリは、Rust、Go、Fortran、C、および C++ で書かれたアプリケーションのスタンドアロン実行でサポートされています。このプロジェクトは、QEMU と KVM を使用して Hermit を起動できる独自のブートローダーも開発しています。

出所: オープンネット.ru

コメントを追加します