Rust プログラミング言語リリース 2021 (1.56)

Mozilla プロジェクトによって設立され、現在は独立した非営利団体 Rust Foundation の後援の下で開発されているシステム プログラミング言語 Rust 1.56 のリリースが公開されました。 通常のバージョン番号に加えて、このリリースは Rust 2021 とも指定されており、過去 2021 年間に提案された変更の安定化を示しています。 Rust 2018 は、Rust XNUMX のリリースが過去 XNUMX 年間の言語開発の基礎となったのと同様に、今後 XNUMX 年間で機能を強化するための基礎としても機能します。

互換性を維持するために、開発者はプログラム内で「2015」、「2018」、「2021」ラベルを使用でき、これによりプログラムを選択した Rust エディションに対応する言語状態スライスにリンクできるようになります。 エディションは、互換性のない変更を分離するために導入され、「[パッケージ]」セクションの「エディション」フィールドを通じてカーゴ パッケージのメタデータ内で構成されます。 たとえば、「2018」エディションには、2018 年末時点で安定した機能が含まれており、互換性を損なわないさらなる変更もすべてカバーされています。 2021 年版には、現在の 1.56 リリースで提案され、将来の実装が承認された相互運用性を破壊する機能がさらに含まれています。 言語自体に加えて、エディターはツールとドキュメントの状態も考慮します。

Rust 2021 で記録された主な非互換性:

  • クロージャでの個別のキャプチャ - クロージャは、識別子全体ではなく個々のフィールド名をキャプチャできるようになりました。 たとえば、「|| ax + 1」は、「a」ではなく「ax」のみをキャプチャします。
  • 配列の IntoIterator 特性: array.into_iter() を使用すると、参照ではなく値によって配列要素を反復処理できます。
  • 「|」式の処理がmacro_rulesで変更されましたパターン内の (ブール OR) - 一致の「:pat」指定子は「A | OR」を考慮するようになりました。 B」。
  • カーゴパッケージマネージャーにはデフォルトで機能リゾルバーの 1.51 番目のバージョンが含まれており、そのサポートは Rust XNUMX で登場しました。
  • TryFrom、TryInto、および FromIterator トレイトがプレリュード標準ライブラリ モジュールに追加されました。
  • Panic!(..) マクロとassert!(expr, ..) マクロは、println!() と同様に、常に format_args!(..) を使用して文字列をフォーマットするようになりました。
  • 式 ident#、ident»..." および ident'...' は言語構文で予約されています。
  • bare_trait_objects と ellipsis_inclusive_range_patterns の警告をエラーに移動しました。

Rust 1.56の新機能:

  • Cargo.toml の「[package]」セクションに、rust-version フィールドが追加されました。これにより、クレート パッケージでサポートされる Rust の最小バージョンを確認できます。 現在のバージョンが指定されたパラメータと一致しない場合、Cargo はエラー メッセージを表示して動作を停止します。
  • 「binding @ pattern」式を使用してパターン マッチングを行う場合、追加のバインディングを指定するためのサポートが提供されます (たとえば、「let matrix @ Matrix { row_len, .. } = get_matrix();」)。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe、RefUnwindSafe、AssertUnwindSafe}
    • Vec::shrink_to
    • 文字列::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • ハッシュマップ::shrink_to
    • HashSet::shrink_to
  • 定数の代わりにあらゆるコンテキストでの使用の可能性を決定する「const」属性が関数で使用されます
    • std::mem::transmute
    • [T]::最初
    • [T]::split_first
    • [T]::最後
    • [T]::split_last
  • コンパイラは、LLVM バージョン 13 を使用するように切り替えられました。
  • サポートの第 64 レベルは aarch32-apple-ios-sim プラットフォームに実装され、第 XNUMX レベルは powerpc-unknown-freebsd および riscvXNUMXimc-esp-espidf プラットフォームに実装されました。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。

Rust はメモリの安全性に重点を置き、自動メモリ管理を提供し、ガベージ コレクターやランタイムを使用せずにジョブ実行で高い並列性を実現する手段を提供していることを思い出してください (ランタイムは標準ライブラリの基本的な初期化とメンテナンスに短縮されます)。

Rust の自動メモリ管理は、ポインタ操作時のエラーを排除し、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなど、低レベルのメモリ操作から生じる問題を防ぎます。 ライブラリを配布し、確実にアセンブリし、依存関係を管理するために、プロジェクトでは Cargo パッケージ マネージャーを開発しています。 crates.io リポジトリは、ライブラリのホストとしてサポートされています。

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

コメントを追加します