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

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

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

主な革新:

  • 行書式設定ブロックでは、行の後に明示的にリストされている変数を番号と名前で置き換える以前の機能に加えて、行に式「{identifier}」を追加することで任意の識別子を置き換える機能が実装されました。例: // 以前にサポートされていた構造: println!("Hello, {}!", get_person()); println!("こんにちは、{0}!", get_person()); println!("こんにちは、{person}!", person = get_person()); // let person = get_person(); を指定できるようになりました。 println!("こんにちは、{人}!");

    識別子は書式設定オプションで直接指定することもできます。 let (幅, 精度) = get_format(); for (名前, スコア) in get_scores() { println!("{名前}: {スコア:幅$.精度$}"); }

    新しい置換は、「panic!」マクロを除く、文字列形式定義をサポートするすべてのマクロで機能します。 Rust 言語の 2015 および 2018 バージョンでは、panic!("{ident}") は通常の文字列として扱われます (Rust 2021 では置換が機能します)。

  • Windows プラットフォームでの std::process::Command 構造の動作が変更され、セキュリティ上の理由から、コマンドの実行時に現在のディレクトリで実行可能ファイルが検索されなくなりました。現在のディレクトリは、信頼できないディレクトリでプログラムが実行されている場合、悪意のあるコードの実行に使用される可能性があるため除外されます (CVE-2021-3013)。新しい実行可能ファイル検出ロジックには、Rust ディレクトリ、アプリケーション ディレクトリ、Windows システム ディレクトリ、および PATH 環境変数で指定されたディレクトリの検索が含まれます。
  • 標準ライブラリでは、戻り値が無視された場合に警告を発行するために「#[must_use]」とマークされた関数の数が拡張されました。これは、関数が新しい値を返すのではなく値を変更すると仮定することによって引き起こされるエラーを識別するのに役立ちます。
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • メタデータ::is_symlink
    • パス::is_symlink
    • {整数}::saturating_div
    • オプション::unwrap_unchecked
    • 結果::unwrap_unchecked
    • 結果::unwrap_err_unchecked
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、関数で使用されます。
    • 期間::新規
    • 期間::checked_add
    • 期間::saturating_add
    • 期間::checked_sub
    • 継続時間::saturating_sub
    • 期間::checked_mul
    • 期間::saturating_mul
    • 期間::checked_div
  • 「const」コンテキストでの「*const T」ポインターの逆参照を許可しました。
  • Cargo パッケージ マネージャーでは、rust_version フィールドがパッケージ メタデータに追加され、「--message-format」オプションが「cargo install」コマンドに追加されました。
  • コンパイラは、CFI (制御フロー整合性) 保護メカニズムのサポートを実装します。このメカニズムは、各間接呼び出しの前にチェックを追加して、通常の実行順序 (制御フロー) の違反につながる可能性があるいくつかの形式の未定義の動作を検出します。関数のメモリに保存されているポインタを変更するエクスプロイトの使用。
  • コンパイラは、テスト中にコード カバレッジを評価するために使用される LLVM カバレッジ比較形式のバージョン 5 および 6 のサポートを追加しました。
  • コンパイラでは、LLVM の最小バージョンの要件が LLVM 12 に引き上げられます。
  • x86_64-unknown-none プラットフォームの XNUMX 番目のサポート レベルが実装されました。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。

さらに、Microsoft が Rust for Windows 0.30 ライブラリのリリースを発表したことにも注目してください。これにより、Rust 言語を使用して Windows OS 用のアプリケーションを開発できるようになります。このセットには XNUMX つのクレート パッケージ (windows および windows-sys) が含まれており、これらを介して Rust プログラムの Win API にアクセスできます。 API サポートのコードは、API を記述するメタデータから動的に生成されるため、既存の Win API 呼び出しだけでなく、将来出現する呼び出しのサポートを実装できます。新しいバージョンでは、UWP (ユニバーサル Windows プラットフォーム) ターゲット プラットフォームのサポートが追加され、ハンドル タイプとデバッグ タイプが実装されます。

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

コメントを追加します