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

公開済み システム プログラミング言語のリリース 1.47 さび, Mozilla プロジェクトによって設立されました。 この言語はメモリの安全性に重点を置き、自動メモリ管理を提供し、タスクを使用せずに高いタスクの並列性を実現する手段を提供します。 ガベージコレクター и ランタイム (ランタイムは、標準ライブラリの基本的な初期化とメンテナンスに要約されます)。

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

メイン イノベーション:

  • タイプのサポートを実装しました 配列 任意のサイズ。 以前は、すべての整数値に対してジェネリック関数を定義できないため、標準ライブラリでは、最大 32 要素のサイズの配列に対してのみ組み込みの特性サポートが提供されていました (各サイズの特性は静的に定義されていました)。 定数ジェネリック (「const ジェネリック」) の機能の作成のおかげで、任意の配列サイズに対してジェネリック関数を定義できるようになりました。ただし、それらはコンパイラに実装されており、安定した言語機能にはまだ含まれていません。今 関与 任意のサイズの配列特性の標準ライブラリにあります。

    たとえば、Rust 1.47 の次の構造は配列の内容を出力しますが、以前はエラーが発生していました。

    fn main() {
    xs = [0; 34];

    println!("{:?}", xs);
    }

  • 短いトレース(バックトレース)の出力、緊急時の出力を提供します。 ほとんどの状況では関心がありませんが、出力を乱雑にし、問題の主な原因から注意をそらしてしまう要素は、トレースから除外されます。 完全なトレースを返すには、環境変数「RUST_BACKTRACE=full」を使用できます。 たとえば、コードの場合、

    fn main() {
    パニック!();
    }

    従来は23段階でトレースが出力されていましたが、今後はXNUMX段階に削減されます。
    すぐに本質を掴むための3ステップ:

    スレッド「main」が「明示的なパニック」でパニックになりました、src/main.rs:2:5
    スタックバックトレース:
    0: std::panicking::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 で
    1: 遊び場::メイン
    ./src/main.rs:2 にあります
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 で

  • Rustc コンパイラは、次を使用してビルドするように更新されました。 LLVM 11 (さび 使用する バックエンドとしての LLVM コード生成)。 同時に、バージョン 8 までの古い LLVM でビルドする機能も保持されますが、デフォルトでは ( Rust-lang/llvm-プロジェクト) は現在 LLVM 11 を使用しています。LLVM 11 は数日以内にリリースされる予定です。
  • Windows プラットフォームでは、rustc コンパイラは、「-C control-flow-guard」フラグを使用してアクティブ化される、制御フロー整合性チェック (制御フロー ガード) を有効にするためのサポートを提供します。 他のプラットフォームでは、このフラグは今のところ無視されます。
  • API の新しい部分は、安定化されたものを含む安定化カテゴリに移されました。
    ID::new_raw、
    範囲::is_empty、
    RangeInclusive::is_empty、
    結果::as_deref、
    結果::as_deref_mut、
    Vec::リーク、
    ポインタ::オフセットフロム、
    f32::TAU および
    f64::TAU。

  • 「const」属性は、定数の代わりに任意のコンテキストで使用できるかどうかを決定し、メソッドで使用されます。
    • ゼロ以外のすべての整数の場合は new。
    • すべての整数のchecked_add、checked_sub、checked_mul、checked_neg、checked_shl、checked_shr、saturating_add、saturating_sub、saturating_mul。
    • is_ascii_alphabetic、is_ascii_uppercase、is_ascii_ lowercase、is_ascii_alphanumeric、is_ascii_digit、is_ascii_hexdigit、is_ascii_punctuation、is_ascii_graphic、is_ascii_whitespace、および char および u8 型の is_ascii_control。
  • FreeBSD 用 関与 FreeBSD 11.4 のツールキット (FreeBSD 10 は LLVM 11 をサポートしません)。

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

コメントを追加します