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

公開済み システムプログラミング言語のリリース 錆1.39, Mozilla プロジェクトによって設立されました。 この言語はメモリの安全性に重点を置き、自動メモリ管理を提供し、ガベージ コレクターやランタイムを使用せずに高いタスクの並列処理を実現する手段を提供します。

Rust の自動メモリ管理により、開発者はポインタ操作から解放され、解放後のメモリ アクセス、null ポインタの逆参照、バッファ オーバーランなどの低レベルのメモリ操作から生じる問題から保護されます。 プロジェクトごとにライブラリを配布し、確実にアセンブリし、依存関係を管理するためのパッケージ マネージャーが開発されています。 貨物を使用すると、プログラムに必要なライブラリをワンクリックで取得できます。 リポジトリはライブラリをホストするためにサポートされています crates.io.

メイン イノベーション:

  • 安定化 「async」関数、async move { ... } ブロック、および「.await」演算子に基づく新しい非同期プログラミング構文。これにより、メインのコマンド フローをブロックしないハンドラーを簡単に作成できます。 以前に提供されていた非同期 I/O 用の API と比較して、async/.await コンストラクトは理解しやすく、可読性が高く、ループ、条件文、例外に基づく使い慣れたフロー制御手法を使用して複雑な非同期対話を実装できます。

    Async-await 構文を使用すると、実行を一時停止し、メイン スレッドに制御を返し、中断したところから実行を再開できる関数を作成できます。 たとえば、I/O を処理する場合には、次のデータの到着を待っている間に他の作業を行うことができるため、このような一時停止が必要です。 「async fn」および「async move」で定義された関数とブロックは特性を返します 未来、遅延非同期計算表現を定義します。 「.await」演算子を使用すると、遅延計算を直接開始して結果を取得できます。 .await が呼び出されるまでアクションは実行されず、事前計画も行われないため、追加のオーバーヘッドなしで複雑なネストされた構造を作成できます。

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    結果: u32 = future.await;

  • 安定化 "#![feature(bind_by_move_pattern_guards)]"、バインディング タイプの変数の使用を許可します。移動" テンプレート内でこれらの変数への参照を式の "if" セクションで使用します。match 」。 たとえば、次の構造が許可されるようになりました。

    fn main() {
    let 配列: Box<[u8; 4]> = ボックス::new([1, 2, 3, 4]);

    一致配列 {
    NUMS
    if nums.iter().sum::() == 10

    => {
    ドロップ(数値);
    }
    _ => 到達不能!(),
    }
    }

  • 表示可能 属性 関数パラメータ、クロージャ、関数ポインタを定義するとき。 lint を介して診断を制御する条件付きコンパイル属性 (cfg、cfg_attr) (許可、警告、拒否、および禁止) と補助マクロ呼び出し属性がサポートされています。

    fnレン(
    #[cfg(windows)] スライス: &[u16], // Windows でパラメータを使用する
    #[cfg(not(windows))] スライス: &[u8], // 他の OS で使用する
    ) -> {を使用します
    スライス.len()
    }

  • NLL (Non-Lexical Lifetimes) 手法を使用して変数の借用をチェックするときに特定された問題に関する警告 (借用チェッカー)、 翻訳された 致命的なエラーの範疇に入る。 借用した変数の有効期間を考慮するための新しいメカニズムに基づく検証システムにより、古い検証コードでは気付かなかったいくつかの問題を特定できるようになったということを思い出してください。 このようなチェックのエラー出力は、以前に動作していたコードとの互換性に影響を与える可能性があるため、当初はエラーではなく警告が発行されました。 Rust 2018 モードで実行する場合、警告はエラーに置き換えられました。 次のリリースでは、エラー出力も Rust 2015 モードに実装され、最終的に古い借用チェッカーが削除されます。
  • 定数の代わりにあらゆるコンテキストでの使用の可能性を決定する「const」属性は、関数 Vec::new、String::new、LinkedList::new、str::len、[T]::len に使用されます。 、str::as_bytes、
    abs、wraping_abs、およびoverflowing_abs;

  • 安定化されたメソッドを含む、API の新しい部分が安定化カテゴリに移行されました。
    Pin::into_inner、Instant::checked_duration_since、Instant::saturating_duration_since;

  • カーゴパッケージマネージャーは、設定ファイルに「.toml」拡張子を使用できるようになりました。 Cargo から標準ライブラリを直接構築するための予備サポートが追加されました。 「--workspace」フラグを追加し、物議を醸した「--all」フラグを置き換えました。 新しいフィールドがメタデータに追加されました。パブリッシュ"を使用すると、git タグとバージョン番号を指定して依存関係を公開できます。 さまざまなコンパイル段階の実行時間の HTML レポートを生成するテスト オプション「-Ztimings」を追加しました。
  • Rustc コンパイラでは、診断メッセージには、端末に適合しないコードの末尾のトリミングが含まれます。 ターゲット プラットフォームに第 XNUMX レベルのサポートを提供
    i686-unknown-uefi および sparc64-unknown-openbsd。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テストや公式ビルドの公開は含まれません。

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

コメントを追加します