use std::arch::asm; // Multiply x by 6 using shifts and adds let mut x: u64 = 4; unsafe { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
解构分配您现在可以使用元组、切片和结构模式作为赋值的左侧。
let (a, b, c, d, e); (a, b) = (1, 2); <p class="indent">[c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
const 泛型默认值和交错泛型类型现在可以为其 const 泛型指定默认值。例如,您现在可以编写以下内容:
struct ArrayStorage<T, const N: usize = 2> { arr: [T; N], } impl<T> ArrayStorage<T> { fn new(a: T, b: T) -> ArrayStorage<T> { ArrayStorage { arr: [a, b], } } }
fn cartesian_product< T, const N: usize, U, const M: usize, V, F >(a: [T; N], b: [U; M], f: F) -> [[V; N]; M] where F: FnMut(&T, &U) -> V { // ... }
未来的不兼容警告有时,Rust 编译器中的错误会导致它接受不应该被接受的代码。现在,当未来版本的 Rust 拒绝依赖项时,Cargo 会向您显示警告。
创建剥离的二进制文件从您分发的二进制文件中去除不必要的信息(如调试信息)通常很有用,使它们更小。
增量编译默认关闭1.59.0 版本默认禁用增量(除非通过环境变量明确要求:)
猜你喜欢
本站原创《复杂软件设计之道:领域驱动设计全面解析与实战》
其他人在看