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

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

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

メイン イノベーション:

  • Cargo パッケージ マネージャーには、crates.io パブリック レジストリと共存できる代替パッケージ レジストリを操作するためのツールが追加されました。 たとえば、プロプライエタリなアプリケーションの開発者は、Cargo.toml で依存関係をリストするときに使用できる独自のプライベート レジストリを使用できるようになり、製品に crates.io と同様のバージョン管理モデルを適用したり、依存関係を両方のクレートに参照したりできるようになります。 io と独自のレジストリにコピーします。

    外部レジストリを .cargo/config ($HOME またはパッケージ ディレクトリにあります) に追加するには
    提供される セクション「[registries]」を参照し、外部レジストリを使用するには、Cargo.toml の各依存関係の説明に「registry」オプションを追加します。 追加のレジストリに接続するには、認証トークンを ~/.cargo/credentials ファイルに配置してコマンドを実行するだけです。
    「cargo login --registry=my-registry」とパッケージを公開するには -
    "cargo public -registry=my-registry";

  • 「?」演算子の使用に対する完全なサポートが追加されました。 テスト中 ドクターテストを使用すると、ドキュメントのサンプル コードをテストとして使用できます。 以前のオペレーター
    「?」 「fn main()」関数または「#[test]」関数が存在する場合にのみ、テスト実行中のエラーを処理するために使用できます。

  • プロシージャルマクロを使用して定義されたカスタム属性内 提供された 任意のトークンのセットを使用する機能 (「#[attr($tokens)]」、「#[attr[$tokens]]、および #[attr{$tokens}]」)。 以前は、要素は文字列リテラル (例: “#[foo(bar, baz(quux, foo = “bar”))] を使用してツリー/再帰形式でのみ指定できましたが、現在は列挙型 (' #[range(0. .10)]') および「#[bound(T: MyTrait)]」のような構造。
  • 安定型(特性) TryFrom и 試してみる、エラー処理を伴う型変換が可能になります。 たとえば、整数型の from_be_bytes などのメソッドは入力として配列を使用しますが、データは多くの場合スライス型であり、配列とスライス間の変換を手動で行うには問題があります。 新しいトレイトの助けを借りて、指定された操作は .try_into() の呼び出しを通じてオンザフライで実行できます (たとえば、「let num = u32::from_be_bytes(slice.try_into()?)」)。 常に成功する変換 (たとえば、タイプ u8 から u32 へ) の場合、エラー タイプが追加されました。 間違いない透明な使用が可能
    "From" の既存のすべての実装の TryFrom。

  • 機能は廃止されました CommandExt::before_execこれにより、 exec を実行する前にハンドラーを実行できます。 exec は、fork() 呼び出しの後にフォークされた子プロセスのコンテキストで実行されます。 このような状況では、ファイル記述子やマップされたメモリ領域などの親プロセスの一部のリソースが重複する可能性があり、これによりライブラリの未定義の動作や誤った動作が発生する可能性があります。
    before_exec の代わりに安全でない関数を使用することをお勧めします。 CommandExt::pre_exec.

  • サイズ範囲が 8 ~ 64 ビットの安定化された符号付きおよび符号なしアトミック整数型 (たとえば、 アトミックU8)、および符号付き型 ノンゼロI[8|16|32|64|128].
  • Any::type_id、Error::type_id、slice::sort_by_cached_key、str::escape_*、str::split_ascii_whitespace、Instant::checked_[add|sub などの API の新しい部分が安定したカテゴリに移動されました。 ] および SystemTime メソッド::checked_[add|sub] が安定しました。 iter::from_fn 関数と iter::successors 関数が安定しました。
  • すべての整数型に対して、checked_pow、saturating_pow、wraping_pow、およびoverflowing_powメソッドが実装されています。
  • 「-C linker-plugin-lto」ビルド オプションを指定することで、リンク段階での最適化を有効にする機能が追加されました。

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

コメントを追加します