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

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

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

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

主な革新:

  • デフォルトのプログラム クラッシュ ハンドラー (パニック) によって発行されるメッセージの形式が再設計されました。 「panic!」マクロで指定されたテキストが引用符なしで別の行に表示されるようになり、メッセージが読みやすくなり、ネストされた引用符が存在する場合や複数行に分かれている場合の混乱がなくなりました。 fn main() { let file = "ferris.txt"; パニック!("ああ、だめ! {ファイル:?} が見つかりません!"); 「ああ、だめだ!」とパニックになったスレッド「メイン」がありました。 「ferris.txt」が見つかりません!'、src/main.rs:3:5 スレッド「main」が src/main.rs:3:5 でパニックになりました: ああ、だめです! 「ferris.txt」が見つかりません!

    「assert_eq」および「assert_ne」マクロがトリガーされたときに表示されるメッセージの出力も修正されました。 fn main() {assert_eq!("🦀", "🐟", "フェリスは魚ではありません"); 「アサーションに失敗しました: `(left == right)` 左: `"🦀"`、右: `"🐟"`: フェリスは魚ではありません」でパニック状態のスレッド 'main' がありました、src/main.rs: 2 :5 スレッド 'main' が src/main.rs でパニックになりました:2:5: アサーション `left == right` が失敗しました: フェリスは魚ではありません 左: “🦀” 右: “🐟”

  • RFC 3184 に従って、スレッドローカル (thread_local) LocalKey ストレージ キーを直接操作する機能が追加されました。 > と LocalKey > 「with(|inner| ...)」クロージャを使用する代わりに、get()、set()、take()、replace() メソッドを使用することで、追加の初期化コードを実行する必要がなくなります。マクロ「thread_local!」を使用するときに新しいスレッドに指定されるデフォルト値スレッドローカル! { 静的なもの: セル > = Cell::new(Vec::new()); } fn f() { // THINGS.with(|i| i.set(vec![32, 1, 2])); // THINGS.set(vec![3, 1, 2]); // ... // v = THINGS.with(|i| i.take()); としました。 // let v: Vec になりました= THINGS.take(); }
  • API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
    • 符号なし {integer}::div_ceil
    • 符号なし {integer}::next_multiple_of
    • 符号なし {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • ローカルキー:: >::取得
    • ローカルキー:: >::セット
    • ローカルキー:: >::取る
    • ローカルキー:: >::置換
    • ローカルキー:: >::with_borrow
    • ローカルキー:: >::with_borrow_mut
    • ローカルキー:: >::セット
    • ローカルキー:: >::取る
    • ローカルキー:: >::置換
  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、関数で使用されます。
    • rc::弱い::新しい
    • 同期::弱い::新規
    • NonNull::as_ref
  • コンパイラは、GCC や Clang と同様に、「.comment」セクションにバージョン情報を記録します。
  • 第 64 レベルのサポートは、aarch2-unknown-teeos、csky-unknown-linux-gnuabiv64、riscv64-linux-android、riscv86gc-unknown-hermit、x64_86-unikraft-linux-musl、および x64_XNUMX-unknown-linux プラットフォームに実装されました。 -オホス。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。
  • ターゲット プラットフォーム wasm32-wasi-preview1-threads のサポートの XNUMX 番目のレベルが実装されました。 サポートの XNUMX 番目のレベルには、組み立て保証が含まれます。

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

コメントを追加します