Rust 1.46.0:track_caller和const fn的改进

Rust团队很高兴地宣布Rust 1.46.0的新版本。Rust是一种编程语言,它使任何人都可以创建可靠而高效的软件。



如果您具有通过rustup安装的Rust的早期版本,则获取Rust 1.46.0的操作很简单:



rustup update stable


如果你不已经拥有了它rustup,你可以安装它从我们的网站上相应的页面,并检查了详细的1.46.0版本说明在GitHub上。



稳定版1.46.0中包含什么



此发行版相当小,const fn对标准库中的两个新API进行了改进,稳定化,并为库作者提供了一个选项。有关本公告未涵盖的其他更改,请参见详细的发行说明



#[track_caller]



早在三月,当Rust 1.42发布时, , unwrap类似的功能就引起了恐慌然后我们提到实现还不稳定。在Rust 1.46中,我们稳定了它。



这个属性的名称#[track_caller]在2017年7月的RFC 2091中提出的如果您正在编写这样的unwrap可能导致紧急情况的函数,则可以将此注释添加到函数中,并且紧急情况格式化程序将默认使用它来显示错误消息。例如unwrap



pub fn unwrap(self) -> T {
    match self {
        Some(val) => val,
        None => panic!(" `Option::unwrap()`   `None`"),
    }
}


现在看起来像这样:



#[track_caller]
pub fn unwrap(self) -> T {
    match self {
        Some(val) => val,
        None => panic!(" `Option::unwrap()`   `None`"),
    }
}


就这样!



如果实现了恐慌陷阱自己,你可以使用呼叫者的方法std::panic::Location获取这些信息。



改进之处 const fn



现在,您还可以使用const fn 一些基本语言,例如:



  • ifif letmatch
  • whilewhile letloop
  • 运营商&&||


转换为slice



const fn foo() {
  let x = [1, 2, 3, 4, 5];

  //    
  let y: &[_] = &x;
}


, , const fn, ! , , const-sha1 SHA1 . 40- Microsoft WinRT Rust.





const fn, std::mem::forget const fn. API:





, .





, Cargo Clippy .



1.46.0



, Rust 1.46.0. . !





Rust - . , .

opencollective: https://opencollective.com/rust-lang-ru.



funkill, Hirrolot andreevlex.




All Articles