Rust の自動メモリ管理は、ポインタ操作時のエラーを排除し、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなど、低レベルのメモリ操作から生じる問題を防ぎます。 プロジェクトごとにライブラリを配布し、確実にアセンブリし、依存関係を管理するためのパッケージ マネージャーが開発されています。
メイン
- 長年の悩みを解消
不完全 整数と浮動小数点数の間で変換を実行する場合。 Rust コンパイラはバックエンドとして LLVM を使用するため、型変換操作は次のような LLVM 中間コード命令を通じて実行されました。エフプトゥイ これには 300 つの重要な機能があります。それは、結果の値がターゲットの型に適合しない場合の未定義の動作です。 たとえば、f32 型の float 値 8 を整数型 uXNUMX に変換する場合、結果は予測不可能であり、システムによって異なる場合があります。 問題は、この機能が「安全でない」とマークされていないコードに現れることです。Rust 1.45 の時点では、型サイズのオーバーフローの動作は厳密に規制されており、「as」変換操作ではオーバーフローがチェックされ、変換される値がターゲット型の最大値または最小値 (上記の例では、 300 は 255 に変換されます)。 このようなチェックを無効にするために、追加の API 呼び出し「{f64, f32}::to_int_unchecked」が提供され、アンセーフ モードで動作します。
fn キャスト(x: f32) -> u8 {
u8としてのx
}fn main() {
let too_big = 300.0;
let too_small = -100.0;
nan = f32::NAN とします。x: f32 = 1.0 とします。
let y: u8 = unsafe { x.to_int_unchecked() };println!("too_big_casted = {}", Cast(too_big)); // 出力255
println!("too_small_casted = {}", Cast(too_small)); // 0を出力する
println!("not_a_number_casted = {}", Cast(nan)); // 0を出力する
} - 安定して使用してください
手続き型マクロ 関数のような式、テンプレート、ステートメント。 以前は、このようなマクロはどこでも呼び出すことができず、コードの特定の部分でのみ呼び出すことができました (他のコードと絡み合わずに別個の呼び出しとして)。 関数と同様に、マクロを呼び出す方法を拡張することが、Web フレームワークを機能させるための要件の XNUMX つでしたロケット Rustの安定版リリースでは。 以前は、Rocket でハンドラーを定義する際にさらなる柔軟性を実現するには、「proc_macro_hygiene」と呼ばれる実験的な機能を有効にする必要がありましたが、これは Rust の安定版では利用できませんでした。 この機能は、言語の安定版リリースに組み込まれています。 - 範囲値を反復するためにタイプ「char」の範囲を使用できるようになりました (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in 'a'..='z' {
print!("{}", ch);
}
println!(); // 「abcdefghijklmnopqrstuvwxyz」を出力します - API の新しい部分は、安定化されたものを含む安定化カテゴリに移されました。
Arc::as_ptr、
BTreeMap::remove_entry、
Rc::as_ptr、
rc::Weak::as_ptr、
rc::Weak::from_raw、
rc::Weak::into_raw、
str::strip_prefix、
str::strip_suffix、
sync::Weak::as_ptr、
sync::Weak::from_raw、
sync::Weak::into_raw、
char::UNICODE_VERSION、
スパン::resolved_at、
スパン::located_at、
スパン::混合サイト、
unix::process::CommandExt::arg0。 - Rustc コンパイラは、「target-feature」フラグ (「-C target-feature=+avx2,+fma」など) を使用してさまざまなターゲット プラットフォーム機能をオーバーライドするためのサポートを追加しました。 新しいフラグも追加されました。
"force-unwind-tables" は、クラッシュ処理戦略に関係なく、アンワインド呼び出しテーブルを生成します。 「embed-bitcode」は、LLVM ビットコードが生成された rlib に含まれるかどうかを制御します。 ビルド時間とディスク容量の消費を最適化するために、Cargo では「embed-bitcode」フラグがデフォルトで有効になっています。 - mipsel-sony-psp およびthumbv7a-uwp-windows-msvc プラットフォームには、第 XNUMX レベルのサポートが提供されています。 XNUMX 番目のレベルには基本的なサポートが含まれますが、自動テストや公式ビルドの公開は含まれません。
さらに、注目できるのは、
この記事は、低レベルのプログラミングや OS 開発で求められるテクニックのデモンストレーションに特化したシリーズの第 XNUMX 弾です。
出所: オープンネット.ru