Rust 1.53がリリースされました。 GoogleはLinuxカーネルへのRustサポート追加に資金提供する

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

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

主な革新:

  • 配列の場合、IntoIterator トレイトが実装されており、配列要素の反復を値によって整理できます。 for i in [1, 2, 3] { .. }

    たとえば、イテレータを受け入れるメソッドに配列を渡すこともできます。 let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    以前は、IntoIterator は配列参照に対してのみ実装されていました。 値を反復するには、参照 (「&[1, 2, 3]」) または「[1, 2, 3].iter()」を使用する必要がありました。 配列に対する IntoIterator の実装は、以前のコンパイラによる array.into_iter() から (&array).into_iter() への変換によって引き起こされた互換性の問題によって妨げられていました。 これらの問題は回避策で解決されました。コンパイラは、IntoIterator トレイトの実装がないかのように、array.into_iter() を (&array).into_iter() に変換し続けますが、これは ".into_iter( )」構文を使用し、「in [1, 2, 3]」、「iter.zip([1, 2, 3])」、「IntoIterator::into_iter([1, 2, 3]」という形式の呼び出しには触れません。 )」。

  • 式「|」を指定可能(論理 OR 演算) をテンプレートの任意の部分に使用します。たとえば、「Some(1) | 」の代わりに使用します。 Some(2)" を "Some(1 | 2)" と書くことができます: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • 識別子での非 ASCII 文字の使用は許可されます。これには、Unicode UAX 31 仕様で定義されている各国文字が含まれますが、絵文字は除きます。 異なるが類似した文字を使用すると、コンパイラは警告を発行します。 const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } let α = 1; レッツォス = 2; 警告: 識別子のペアは「s」と「s」の間で混同しやすいと考えられます
  • 次の安定化された API を含む、API の新しい部分が安定化カテゴリに移行されました。
    • 配列::from_ref
    • 配列::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • 持続時間::ゼロ
    • 持続時間::MAX
    • 期間::is_zero
    • 期間::saturating_add
    • 継続時間::saturating_sub
    • 期間::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • 配列のIntoIterator
    • {整数}::BITS
    • io::エラー::サポートされていません
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • オプション::挿入
    • 順序付け::is_eq
    • 注文::is_ne
    • 注文::is_lt
    • 注文::is_gt
    • 注文::is_le
    • 注文::is_ge
    • OsStr::make_ascii_ lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_ lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • ピーカブル::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • スライス::IterMut::as_slice
    • AsRef<[T]> のスライス::IterMut
    • impl SliceIndex for (バウンド) 、 バウンド)
    • Vec::extend_from_within
  • wasm64-unknown-unknown プラットフォームの第 XNUMX レベルのサポートが実装されました。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テスト、公式ビルドの公開、コードがビルド可能かどうかの確認は含まれません。
  • Cargo パッケージ マネージャーは、デフォルトで Git リポジトリ (HEAD) のメイン ブランチに「main」という名前を使用するように移動されました。 master ではなく main という名前を使用するリポジトリでホストされている依存関係では、branch = "main" を構成する必要がなくなりました。
  • コンパイラでは、LLVM の最小バージョンの要件が LLVM 10 に引き上げられます。

さらに、Rust 言語でコンポーネントを開発するためのツールを Linux カーネルに統合する開発のための資金提供にも注目できます。 この作業は、Let's Encrypt プロジェクトの創設者であり、HTTPS とインターネットのセキュリティを強化する技術の開発を推進する ISRG 組織 (インターネット セキュリティ研究グループ) の後援の下、Prossimo プロジェクトの枠組みの中で実行されます。インターネット。 資金は Google によって提供され、Rust-for-Linux プロジェクトの作者である Miguel Ojeda の活動に支払われます。 これまでに、ISRG と Google は、curl ユーティリティ用の代替 HTTP バックエンドの作成と、Apache http サーバー用の新しい TLS モジュールの開発にすでに資金を提供しています。

Microsoft と Google によると、脆弱性の約 70% は安全でないメモリの処理が原因で発生します。 Rust言語を使用してデバイスドライバなどのカーネルコンポーネントを開発すると、安全でないメモリ処理によって引き起こされる脆弱性のリスクが軽減され、解放後のメモリ領域へのアクセスやバッファ境界のオーバーランなどのエラーが排除されることが期待されています。

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

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

コメントを追加します