铁锈1.45.0

2020-07-16 22:35:52

Rust团队很高兴宣布Rust的新版本,1.45.0。Rust是一种编程语言,它使每个人都能够构建可靠而高效的软件。

如果您通过Rustup安装了以前版本的Rust1.45.0,则获取Rust1.45.0与以下操作一样简单:

如果您还没有,您可以从我们网站的相应页面获取概要信息,并在GitHub上查看1.45.0的详细发行说明。

在Rust1.45.0中有两个大的变化需要注意:修复了一些长期存在的在整数和浮点数之间转换时不健全的问题,以及稳定了更流行的Web框架之一在稳定的Ruust上工作所需的最终功能。

10184期最初是在2013年10月开始发行的,比“铁锈1.0”早了一年半。您可能知道,rustc使用LLVM作为编译器后端。当您像这样编写代码时:

定义I8@_ZN10playground4cast17h1bdf307357423fcfE(float%x)UNNAMED_ADDR#0{START:%0=fpToui Float%x to I8 ret I8%0}。

“fpoui”指令将其浮点操作数转换为最小(舍入为零)的无符号整数值。如果该值不适合TY2,则结果为毒值。

现在,除非您经常深入研究编译器,否则您可能不会理解这是什么意思。它充满了行话,但有一个更简单的解释:如果你将一个大的浮点数转换成一个小的整数,你会得到未定义的行为。

fn cast(x:f32)->;u8{x as U8}fn main(){设f=300.0;设x=cast(F);println!(";x:{}";,x);}。

在Rust 1.44.0上,这正好在我的机器上打印";x:0";。但是它可以打印任何东西,或者做任何事情:这是未定义的行为。但是我们这里没有不安全的代码。这就是我们所说的健全错误,也就是说,这是一个编译器做了错误事情的错误。我们在我们的问题跟踪器上将这些漏洞贴上标签,并非常认真地对待它们。

不过,这个错误需要很长时间才能解决。原因是当时非常不清楚前进的正确道路是什么。

FN CAST(x:F32)->;U8{x as U8}FN Main(){let Too_Bigge=300.0;let Too_Small=-100.0;let NaN=F32::NaN;println!(";Too_Big_Casted={}";,cast(Too_Big));println!(";Too_Small_Casted={}";,cast(Too_Small));println!(&。,cast(NaN));}。

也就是说,太大的数字会变成最大的可能值,而太小的数字会产生最小的可能值(即零)。NaN生成零。

但一如既往,您应该只将此方法作为最后手段使用。就像数组访问一样,编译器通常可以优化检查,使安全版本和不安全版本在编译器可以证明的情况下是等价的。

GNOME-CLASS是Rust的过程化宏。在宏中,我们定义了一种迷你语言,它看起来尽可能像Rust-y,并且具有允许您定义GObject子类、它们的属性、信号、接口实现和GObject的其余功能的扩展。目标是您不需要任何不安全的代码。

gobject_gen!{class MyClass:GObject{foo:cell<;I32>;,bar:RefCell<;string>;,}Impll MyClass{virtual fn my_virtual_method(&;self,x:I32){.。对x做点什么.}

项目位置中的";位是一些行话,但基本上这意味着您只能调用gobject_gen!在代码中的某些位置。

//假设我们有一个名为";mac";mac!();//项位置,这是以前稳定的位置//但这三个是新的:fn main(){let expr=mac!();//表达式位置匹配expr{mac!()=>;{}//pattern position}mac!();//语句位置}。

能够在更多的地方使用宏是很有趣的,但是还有另一个原因让许多Rustaceans期待这个特性很久了:Rocket。最初于2016年12月发布的Rocket是一个流行的Rust网络框架,经常被描述为Rust生态系统提供的最好的东西之一。以下是即将发布的hello world示例:

#[MACRO_USE]外部板条箱rocket;#[get(";/<;name>;/<;age>;";)]fn HELLO(名称:String,年龄:U8)->;String{Format!(";HELLO,{}YOLD NAME{}!";,AGE,NAME)}#[Launch]FN Rocket()->;Rocket::Rocket{Rocket::Ignite().mount(";/hello";,routes![Hello])}。

直到今天,火箭依靠夜间专用功能来实现其灵活性和人体工程学的承诺。事实上,正如在项目页面上所看到的,在当前版本的Rocket中,上面的相同示例需要编译proc_宏_个人卫生功能。然而,正如你可能从这个功能的名字中猜到的那样,今天它是以稳定的方式发货的!Thisissue追踪了“火箭”晚间专题片的历史。现在,他们都检查过了!

下一个版本的火箭还在筹备中,但一旦发布,很多人都会非常高兴:)。

在Rust 1.45.0版本中还有其他更改:查看Rust、Cargo和Clippy中的更改。

许多人聚集在一起创建了铁锈1.45.0。没有你们,我们做不成这件事。谢谢!