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

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

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

メイン イノベーション:

  • 属性「」を使用して構造体 (struct) と列挙型 (Variant ブロックの enum) をマークする機能を追加しました。#[すべてを網羅していない]"、 どれの 許可する 将来的には、宣言された構造体と列挙型に新しいフィールドとオプションを追加します。 たとえば、公的に宣言されたフィールドを持つ構造を持つモジュールの開発者は、「#[non_exhaustive]」を使用して、将来新しいフィールドが追加される可能性のある構造をマークできます。 これまで、この状況では、開発者はフィールドをプライベートに宣言するか、フィールドの不変リストにバインドするかの選択を迫られていました。 新しい属性によりこの制限が取り除かれ、以前にコンパイルされた外部コードを壊すリスクを負うことなく、将来的に新しいフィールドを追加できるようになります。 クレート パッケージでは、「match」セクションのオプションを照合するときに、将来発生する可能性のあるフィールドをカバーするマスク「_ => {...}」の明示的な定義が必要です。そうしないと、新しいフィールドを追加するときにエラーが表示されます。
  • 追加した 型コンテキストで手続き型マクロ mac!() を呼び出す機能。 たとえば、「expand_to_type」が手続き型マクロの場合、「type Foo = Expand_to_type!(bar);」と記述できるようになりました。
  • 「extern { ... }」ブロック内 追加した 「bang!()」マクロを含む、手続き型および属性マクロを使用する機能。次に例を示します。

    マクロルール! make_item { ($name:ident) => { fn $name(); } }

    外部 {
    make_item!(アルファ);
    make_item!(ベータ版);
    }

    外部 "C" {
    #[my_identity_macro] fn foo();
    }

  • マクロ内 実装されました 「macro_rules!」要素を生成する機能。 「macro_rules!」を生成しています。 関数のようなマクロ (「mac!()」) と属性形式のマクロ (「#[mac]」) の両方で可能です。
  • $m:meta マッピング要素内 追加した 任意のトークン列挙値 (“[TOKEN_STREAM]”、“{TOKEN_STREAM}”、および “(TOKEN_STREAM)”) のサポート。例:

    マクロルール! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • Rust 2015 モードでは、NLL (Non-Lexical Lifetimes) 手法を使用して変数の借用 (借用チェッカー) をチェックするときに特定された問題に対してエラー出力が有効になります。 以前は、Rust 2018 モードで実行すると、警告がエラーに置き換えられました。
    変更が Rust 2015 モードに拡張された後、開発者は最終的に次のことを行うことができました。 脱出 古い借用チェッカーから。

    借用した変数の有効期間を考慮するための新しいメカニズムに基づく検証システムにより、古い検証コードでは気付かなかったいくつかの問題を特定できるようになったということを思い出してください。 このようなチェックのエラー出力は、以前に動作していたコードとの互換性に影響を与える可能性があるため、当初はエラーではなく警告が発行されました。

  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、is_power_of_two 関数 (符号なし整数用) に使用されます。
  • todo!() マクロや、slice::repeat、mem::take、BTreeMap::get_key_value、HashMap::get_key_value、メソッドなど、API の新しい部分が安定したカテゴリに移動されました。
    Option::as_deref、Option::as_deref_mut、Option:: flatten、UdpSocket::peer_addr、{f32,f64}::to_be_bytes、{f32,f64}::to_le_bytes、{f32,f64}::to_ne_bytes、{f32、 f64}::from_be_bytes、{f32,f64}::from_le_bytes、および {f32,f64}::from_ne_bytes。

  • パッケージマネージャーのカーゴ内
    実装された コンパイラの警告をディスクにキャッシュします。 「貨物メタデータ」コマンドにオプション「貨物メタデータ」を追加しました--フィルタープラットフォーム" を指定すると、依存関係の解決列に指定されたターゲット プラットフォームにバインドされたパッケージのみが表示されます。 有効な TLS バージョンを定義するための http.ssl-version 構成オプションを追加しました。
    セクションを公開する機能を追加しました。開発依存関係「version」キーを指定せずに「」を実行します。

  • Rustc コンパイラは、ターゲット プラットフォームthumbv7neon-unknown-linux-musleabihf、aarch64-unknown-none-softfloat、mips64-unknown-linux-muslabi64、および mips64el-unknown-linux-muslabi64 の第 XNUMX レベルのサポートを提供します。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テストや公式ビルドの公開は含まれません。

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

コメントを追加します