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

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

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

主な革新:

  • 任意のサイズの配列の特性のサポートが実装されました。 以前は、すべての整数値に対してジェネリック関数を定義できないため、標準ライブラリでは、最大 32 要素のサイズの配列に対してのみ組み込みの特性サポートが提供されていました (各サイズの特性は静的に定義されていました)。 const ジェネリクス機能の作成のおかげで、任意の配列サイズに対してジェネリック関数を定義できるようになりました。ただし、それらはコンパイラに実装され、現在は標準ライブラリで使用されていますが、言語の安定した機能にはまだ含まれていません。任意のサイズの配列型に対応します。
    たとえば、Rust 1.47 の次の構造は配列の内容を出力しますが、以前はエラーが発生していました。

fn main() {
xs = [0; 34];
println!("{:?}", xs);
}

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

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

従来は23段階で出力されていたトレースが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 を使用してビルドするように更新されました (Rust はコード生成のバックエンドとして LLVM を使用します)。 同時に、バージョン 8 までの古い LLVM でビルドする機能は保持されますが、デフォルトでは (rust-lang/llvm-project で) LLVM 11 が使用されるようになりました。LLVM 11 のリリースは今後予定されています日々。
  • Windows プラットフォームでは、rustc コンパイラは、「-C control-flow-guard」フラグを使用してアクティブ化される、制御フロー整合性チェック (制御フロー ガード) を有効にするためのサポートを提供します。 他のプラットフォームでは、このフラグは今のところ無視されます。
  • 安定化された Ident::new_raw、Range::is_empty、RangeInclusive::is_empty、Result::as_deref、Result::as_deref_mut、Vec::leak、pointer::offset_from を含む、API の新しい部分が安定したカテゴリに転送されました。 、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

出所: linux.org.ru

コメントを追加します