Rust 1.64 プログラミング言語のリリース

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

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

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

主な革新:

  • コンパイラ、Cargo パッケージ マネージャー、および libstd 標準ライブラリの Linux 環境の要件が増加しました。Glibc の最小要件はバージョン 2.11 から 2.17 に、Linux カーネルはバージョン 2.6.32 から 3.2 に引き上げられました。 この制限は、libstd でビルドされた Rust アプリケーションの実行可能ファイルにも適用されます。 ディストリビューション キット RHEL 7、SLES 12-SP5、Debian 8、および Ubuntu 14.04 は新しい要件を満たしています。 RHEL 6、SLES 11-SP4、Debian 7、および Ubuntu 12.04 のサポートは終了します。 古い Linux カーネルを使用する環境で Rust で構築された実行可能ファイルを使用するユーザーは、システムをアップグレードするか、コンパイラの古いリリースを使用し続けるか、互換性を維持するためにレイヤーを備えた独自の libstd フォークを維持することをお勧めします。

    古い Linux システムのサポートを終了する理由には、古い環境との互換性を維持し続けるためのリソースが限られていることが挙げられます。 LLVM およびクロスコンパイル ユーティリティのバージョン要件が増加しているため、レガシー Glibc をサポートするには、継続的統合システムをチェックインするときにレガシー ツールを使用する必要があります。 カーネルのバージョン要件が増加するのは、古いカーネルとの互換性を確保するために層を維持する必要がなく、libstd で新しいシステム コールを使用できるためです。

  • IntoFuture トレイトは安定化され、IntoIterator に似ていますが、「for ... in ...」ループの代わりに「.await」を使用する点で後者とは異なります。 IntoFuture と組み合わせると、「.await」キーワードは Future 特性だけでなく、Future に変換できる他のタイプも期待できます。
  • Rust-analyzer ユーティリティは、Rust リリースで提供されるユーティリティのコレクションに含まれています。 このユーティリティは、rustup を使用してインストールすることもできます (rustup コンポーネントは、rust-analyzer を追加します)。
  • Cargo パッケージ マネージャーには、Rust バージョンやリポジトリ URL など、パッケージ間で共通のフィールド値の重複を排除するためのワークスペース継承が含まれています。 また、複数のターゲット プラットフォームを同時にビルドするためのサポートも追加されました (「--target」オプションで複数のパラメーターを指定できるようになりました)。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • 未来::未来へ
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • 以前に std::ffi モジュールで安定化された C 互換型が、コアと alloc ライブラリに追加されました。
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • 以前に std::os::raw モジュールで安定化された C 型が core::ffi および std::ffi モジュールに追加されました (たとえば、c_uint および c_ulong 型が uint および ulong C 型として提案されています)。
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • 低レベルのハンドラーは、ポーリング メカニズムで使用できるように安定化されました (将来的には、プルやピンなどの低レベル構造の使用を必要としない簡略化された API を提供する予定です)。

    • future::poll_fn
    • タスク::準備完了!
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、slice::from_raw_parts 関数で使用されます。
  • データをよりコンパクトに保存するために、Ipv4Addr、Ipv6Addr、SocketAddrV4、および SocketAddrV6 構造のメモリ レイアウトが変更されました。 構造の低レベル操作に std::mem::transmute を使用する単一クレート パッケージには互換性の問題がある可能性があります。
  • Windows プラットフォーム用の Rust コンパイラのビルドでは PGO 最適化 (プロファイルに基づく最適化) が使用されており、これによりコードのコンパイル パフォーマンスを 10 ~ 20% 向上させることができました。
  • コンパイラは、特定の構造体の未使用フィールドに関する新しい警告を実装しました。

さらに、gccrs プロジェクト (GCC Rust) によって準備され、GCC に含めることが承認された、Rust 言語コンパイラの代替実装の開発に関するステータス レポートにも注目してください。 フロントエンドを統合した後は、LLVM 開発を使用して構築された Rustc コンパイラをインストールすることなく、標準の GCC ツールを使用して Rust 言語でプログラムをコンパイルできます。 開発が順調に進んでいる限り、予期せぬ問題がない限り、Rust フロントエンドは来年 13 月に予定されている GCC 13 リリースに統合される予定です。 Rust の GCC XNUMX 実装はベータ版の状態になり、デフォルトではまだ有効になっていません。

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

コメントを追加します