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

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

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

主な革新:

  • 「panic!」マクロの使用が安定しました。 「const fn」宣言など、コンパイル中に作成されたコンテキスト内。 さらに、「パニック!」を使用することに加えて、 const 宣言では、「assert!」マクロの使用が許可されます。 および他のいくつかの標準ライブラリ API。 安定化はまだフォーマット インフラストラクチャ全体をカバーしていないため、現在の形式では「パニック!」マクロは静的文字列 (panic!("...")) または置換時に単一の補間値 "&str" でのみ使用できます (panic!("{}", a))。これは "{ の置換に限定する必要があります。 }" 書式指定子やその他の型なし。 将来的には、定数コンテキストでのマクロの適用可能性が拡張される予定ですが、安定化された機能は、コンパイル段階でアサート チェックを実行するにはすでに十分です。 const _: () =assert!(std::mem::size_of:: () == 64); const _: () = アサート!(std::mem::size_of:: () == 8);
  • Cargo パッケージ マネージャーでは、「dev」、「release」、「test」、「bench」に限定されず、任意の名前のプロファイルを使用できます。 たとえば、最終製品アセンブリが生成されるときのみリンク段階 (LTO) での最適化を有効にするには、Cargo.toml で「production」プロファイルを作成し、それに「lto = true」フラグを追加します。 ただし、独自のプロファイルを定義する場合は、既存のプロファイルを指定してデフォルト設定を継承する必要があります。 以下の例では、「lto = true」フラグを含めることで「リリース」プロファイルを補完する「実稼働」プロファイルを作成します。 プロファイル自体は、「--profileproduction」オプションを指定してカーゴを呼び出すことによってアクティブ化され、アセンブリアーティファクトは「target/production」ディレクトリに配置されます。 [profile.production] 継承 = "リリース" lto = true
  • Vec、String、HashMap、HashSet、および VecDeque 型の try_reserve の使用が安定しました。これにより、メモリ割り当て操作の頻度を減らし、メモリ割り当て操作の頻度を減らし、メモリ割り当て操作の頻度を減らすために、特定の型の特定の数の要素用にスペースを事前に予約できるようになりました。メモリ不足により動作中にクラッシュする場合があります。
  • 「m!{ .. }.method()」や「m!{ .. }?」などの式では、中かっこを使用してマクロを指定できます。
  • File::read_to_end 関数と read_to_string 関数の実行が最適化されました。
  • Unicode 仕様のサポートがバージョン 14.0 に更新されました。
  • 「#[must_use]」とマークされた関数の数を拡張して、戻り値が無視された場合に警告を発行するようにしました。これは、関数が新しい値を返すのではなく値を変更すると仮定することによって引き起こされるエラーを特定するのに役立ちます。
  • libgccjit を使用したコード生成のための実験的なバックエンドを追加しました。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • コレクション::TryReserveError
    • ハッシュマップ::try_reserve
    • HashSet::try_reserve
    • 文字列::try_reserve
    • 文字列::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • イテレータ::map_while
    • iter::Mapwhile
    • proc_macro::is_available
    • コマンド::get_program
    • コマンド::get_args
    • コマンド::get_envs
    • コマンド::get_current_dir
    • コマンド引数
    • コマンド環境
  • 定数の代わりに任意のコンテキストで使用できるかどうかを決定する「const」属性は、関数hint::unreachable_uncheckedで使用されます。
  • 第 6 レベルのサポートは、armv3k-nintendo-7ds、armv68-unknown-linux-uclibceabihf、m64k-unknown-linux-gnu、aarch3-kmc-solid_asp7、armv3a-kmc-solid_asp7-eabi、および armv3a-kmc- に対して実装されました。 Solid_aspXNUMX-eabihf プラットフォーム。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。

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

コメントを追加します