现在,可在const fn中使用几个核心语言功能:
1,if,iflet和match
2,while,whilelet和loop
3,&&和||符号
4,还可转换为切片:
虽然这些功能并不新鲜,但可在const fn之外使用它们,增加了大量编译时计算能力!如,const-sha1仓库可让你编译时计算SHA-1哈希值.
这导致微软的RustWinRT绑定性能提高了40倍.
#[track_caller]该属性叫#[track_caller],最初是在2017年7月的RFC2091中提出的!如果正在编写一个像unwrap这样可能会崩溃的函数,可在函数上加此注解,默认的panic格式化会在其错误消息按位置使用其调用者.
如,这是先前的unwrap:
现在像这样:
#[track_caller] pub fn unwrap(self) -> T { 同上... }就是这样!
如果自己实现恐慌(panic)勾挂,则可用std::panic::Location上的调用者方法来访问此信息.
std::mem::forget现在是const fn.此外,此版本还稳定了两个新API:
Option::zip vec::Drain::as_slice 1.47.0稳定版 大数组上的特征Rust目前无法在整数值上泛型.
因为无法泛型N,所以必须要为每个N的数组手动实现特征.
如果试在Rust1.46上:
会收到错误.
但在Rust1.47中,它会打印出正确的数组.
在Rust1.47.0中,已修复.该程序:
fn main() { panic!(); }可更容易地看到恐慌实际起源,如果想看到所有内容,你仍可设置RUST_BACKTRACE=full.
窗口上的控制流防护rustc现在支持-C control-flow-guard,该选项在窗口上,打开控制流这里保护.其他平台忽略此标志.
更改库此外,此版本还稳定了9个新API:
Ident::new_raw Range::is_empty RangeInclusive::is_empty Result::as_deref Result::as_deref_mut Vec::leak pointer::offset_from f32::TAU f64::TAU以下以前稳定的API现已成为常量:
1,所有非零(NonZero)整数的新(new)方法.
2,所有整数的checked_add,checked_sub,checked_mul,checked_neg,checked_shl,checked_shr,saturating_add,saturating_sub和saturating_mul方法.
3,所有有符号整数的checked_abs,saturating_abs,saturating_neg和signum.
4,char和u8的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和is_ascii_control方法.
Rustdoc是Rust发布版中包含的库文档工具,可让你用Markdown编写文档.
假设正在为一些Rust代码编写一些文档,如下:
有两个模块,每个模块内部都有个结构.但想同时使用这两个结构;要在文档中记录这一点.因此,如下编写一些文档:
pub mod foo { /// `Foo`文档 /// pub struct Foo; } pub mod bar { /// `Bar`文档 /// pub struct Bar; }一切正常,但如果可链接到其他类型,就太好了.这样可更容易在文档间访问.
问题是Markdown对Rust和rustdoc生成的URL一无所知.因此,Rust必须手写.
该版本中,可用一些语法让rustdoc知道你正在试链接到一个类型,让它为你生成URL.下面是基于之前代码的两个不同示例:
pub mod foo { /// `Foo`文档及[`Bar`](crate::bar::Bar) pub struct Foo; } pub mod bar { /// `Bar`文档,及[`crate::foo::Foo`] pub struct Bar; }第一例生成Bar类型的正确链接.第二个链接到Foo,但会将整个crate::foo::Foo显示为链接文本.更多
添加搜索别名现在,可通过rustdoc的UI搜索时,在项目上指定#[doc(alias="
有了该注解,如果在rustdoc的搜索中搜索"bar",即使搜索文本中没有"Foo",也会把Foo当作结果的一部分而出现.
别名还用在,每个Rust函数都可别名到它所包装的C函数的FFI包装仓库.然后,底层C库的现有用户可轻松搜索正确的Rust函数!
最重要的API更改类似:[T;N]:TryFrom
此外,此版本还稳定了五个新API:
slice::as_ptr_range slice::as_mut_ptr_range VecDeque::make_contiguous future::pending future::ready以下以前稳定的API现已成为常量:
Option::is_some Option::is_none Option::as_ref Result::is_ok Result::is_err Result::as_ref Ordering::reverse Ordering::then 1.49.0稳定版 64位ARMLinux达到第1层Rust编译器支持各种目标,但Rust团队无法为所有这些目标提供相同级别支持.为了清楚标记支持程度,使用分层系统:
编译器在技术上支持第3层目标,但不会检查其代码是否生成或通过测试,且发布时不提供预构建的二进制文件.
第2层目标可保证构建,且提供预构建的二进制文件,但不会在这些平台上执行测试包:生成的二进制文件可能无法工作或有错误.
第1层目标提供最高支持保证.
Rust1.49.0提升aarch64-unknown-linux-gnu目标为第1层支持,为运行Linux的64位ARM系统的用户带来最高保证!
这一变化使从嵌入式到台式机和服务器的工作负载受益.
这是该项目的一个重要里程碑,因为这是非x86目标首次达到第1层支持.
注意,Android不受此更改影响,因为它使用不同的第2层目标.
Rust的内置测试框架没有太多功能,这里改进了!
#[test] fn thready_pass() { println!("fee"); std::thread::spawn(|| { println!("fie"); println!("foe"); }) .join() .unwrap(); println!("fum"); }测试运行程序确保抓输出,并在测试失败时保存它.
更改库在Rust1.49.0中,有三个新的稳定函数:
slice::select_nth_unstable slice::select_nth_unstable_by slice::select_nth_unstable_by_key And two functions were made const: Poll::is_ready Poll::is_pending