rust 1.34
与C,C ++,Go和您可能使用的其他语言相比, Rust编程语言的独特方法可产生更好的代码,并减少妥协。 它还定期(每月)定期更新。
在哪里下载最新的Rust版本
如果您已经通过rustup
安装了先前版本的Rust,则可以通过以下命令访问最新版本:
$ rustup update stable
相关视频:使用Rust开发更安全的软件
快速开始使用旨在创建快速的系统级软件的Rust新手。 这个两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。
Rust 1.43.1的新功能
该点版本于2020年5月7日发布,以解决1.43.0稳定版本中引入的两个回归。 它还会更新货运包裹管理器使用的OpenSSL版本。 功能包括:
- Rust 1.27引入了对通过
is_x86_feature_detected
宏检测标准库中的x86 CPU功能的支持。 由于内部重构,Rust 1.43.0阻止了对尚未在稳定版上使用的功能的检测,即使以前允许对其进行检测也是如此。 1.43.1版修复了此回归问题。 - 损坏的
cargo package –list
命令提供了一个修复程序。 当在具有路径依赖项或未发布版本的工作空间中执行时,Rust 1.43打破了对列出随Cargo发布的软件包中包含的文件的支持。 - OpenSSL(一种货运依赖性)已更新至1.1.1g。 OpenSSL已发布了安全公告,但Rust团队无法及时包含Rust 1.43.0的修复程序。 该团队没有证据表明该漏洞可能危及货运用户的安全。
Rust 1.43.0的新功能
2020年4月23日宣布,Rust 1.43.0被认为是一个相当小的发行版,未引入任何主要功能。 更改包括:
- 开发人员可以使用
item
片段将项目插值到trait
,impl
和extern
块的主体中。 - 围绕原语,引用和二进制操作的类型推断得到了改进。
- 为了帮助进行集成测试,Cargo将为测试设置一些新的环境变量以查找可执行文件。
- 在Rust库中,开发人员可以直接在浮点数和整数上使用关联的常量 ,而不必导入模块。 另外,有一个新的
primitive
模块可以重新导出Rust原始类型,这在编写宏且开发人员希望确保类型不被遮盖时非常有用。 - 库中的几个API都已稳定下来:
Once::is_completed
,f32::LOG10_2
,f32::LOG2_10
,f32::LOG10_2
,f64::LOG10_2
,f64::LOG2_10
和iter::once_with
。
Rust 1.41中的新功能
2020年1月30日发布的1.41.0版包含以下新功能和改进:
- 实施特质时,放宽了限制。 在Rust 1.41.0之前,孤立规则过于严格,阻碍了合成。 强制执行该规则以防止在依赖项添加新特性
impl
时发生破坏,要点是,仅当所实现的特性或类型在当前板条箱本地(而不是外国板条箱)本地时,才允许使用特质impl
。 -
cargo install
(用于安装二进制板条箱和基于Rust的CLI工具)现在将在发布新版本后更新板条箱的现有安装。 - 对于用于确保构建一致的锁定文件,引入了一种新格式,以避免在更改单独分支中的依赖项时发生不必要的合并冲突。 新格式将用于所有新的锁定文件,而现有锁定文件仍依赖于先前的格式。
- 在FFI(外部功能接口)中使用
Box<T>
时,可以提供更多保证。Box<T>
,称为box,提供了Rust最简单的堆分配形式。 如果开发人员具有从C调用的extern
“ C” Rust函数,则Rust函数现在可以将Box<T>
用于某些特定的T
,而将C中的T*
用于相应的函数。 但是,开发人员现在应该避免将Box<T>
类型用于在C中定义但在Rust中调用的函数。 在这些情况下,开发人员应直接尽可能接近C类型。 - 添加了库,例如稳定了
Result::map_or
和Result:map_or_else
。 稳定的方法是weak_count
和strong_count
。NonZero*
NUMERICS现在实现From<NonZero*>
如果它是一个较小的整数宽度。 - Rust 1.41.0将是具有对32位Apple目标的当前编译器支持水平的最新版本 。
Rust 1.40中的新功能
- 现在可以允许宏自己生成宏。 除了可能通过手动代码生成之外,这使得使用Rust可以使用比以前更复杂的元编程。 现在还可以使用过程宏来定义类型,并将其用于
extern
模块。 并且可以使用新的todo!()
宏来代替更详细的unimplemented!()
。 - 一个新的属性
#[non_exhaustive]
可让您装饰一个类型,以指示它将来可能会有更多字段或其他更改。 这样可以避免其他代码覆盖该定义或将其用作详尽的模式匹配的一部分,这可能会在以后更改类型时意外中断。 - 本来可以在旧借用检查器下编译但在新借用检查器下生成警告的代码现在将产生硬错误。 这既鼓励清理较旧的Rust代码,又使旧的借用检查程序代码完全淘汰。
- 添加了几个新的编译器目标,例如ARM的Thumb-2 Neon(版本7)和使用
musl
轻量级标准库的MIPS64平台。
Rust 1.38中的新功能
2019年9月发布的Rust 1.38包含以下新功能和改进:
- 货运软件包管理器将通过Rust 1.38自动利用流水线编译。 使用流水线编译时,编译器在编译板条箱时不需要完全构建的依赖项。 所需要的只是它们的元数据,例如依赖性类型列表。 元数据在编译过程的早期产生。 一些测试显示,对于某些条板图的优化,清晰构建,编译速度可提高10%到20%。
- 减少对
mem::{unitialized, zeroed}
的一些不正确使用。 在此发行版中,rustc编译器将使用mem::uninitialized or mem::zeroed
zeroed为一小类不正确的初始化提供皮棉。 -
#[deprecated]
属性扩展到宏。 此属性允许板条箱创建者通知用户在以后的发行版中将弃用并删除其板条中的某个项目。 - 开发人员可以使用
std::any::type_name
来获取类型的名称。 - 稳定了包括
<*const T>::cast
和<*mutT>::cast
在内的许多功能。
Rust 1.37的新功能
Rust 1.37于2019年8月发布,具有以下新功能和改进:
- 通过
type
引用enum
变量的能力。 开发人员还可以使用Self::Variant
引用enum
Self::Variant
。 - 现在,该语言内置了
cargo vendor
命令(以前是单独的板条箱)。 该命令获取项目依赖关系,将它们解压缩到vendor /目录中,并显示在构建过程中使用供应商代码所需的配置代码段。 -
rustc
编译器通过-C profile-generate
和-C profile-use
支持配置文件引导的优化,这是一种针对提前编译器的优化技术。 - 开发人员可以创建未命名的
const
项。
Rust 1.36的新功能
Rust系统编程语言的1.36版已于2019年7月发布。Rust1.36包括以下新功能和增强功能:
- 用于声明异步工作的Future特质现已稳定。 现在,Rust中的异步操作已经零散地合并了好几个版本,
async
和await
是剩下的最后一个重要部分。 - 用于管理内存的alloc crate现在很稳定。 这个箱子收集了依赖于全局内存分配机制(例如
Vec<T>
的Rust的所有标准库。 这样,不使用标准库的板条箱仍可以通过分别导入alloc来使用分配器,这对于希望代码尺寸尽可能精简的环境很有用。 - 新型
MaybeUninit<T>
允许您定义可能包含未初始化内存的对象,例如延迟分配的数组。 Rust以前执行此操作的机制是一个函数mem::uninitialized
,在随意使用时会造成很多危害。MaybeUninit<T>
提供了一种使用Rust类型系统的约束的安全方式。 - 非词汇生存期 (Rust的最新版本的功能)已被反向移植到早期版本。 非词汇生存期使Rust的借阅检查机制不那么难以使用(实质上,使您可以编写仍然有效的Rust程序),并且能够更好地捕获借阅检查器遗漏的问题。
其他改进:
-
HashMap<K, V>
类型的新实现可以更快地运行并且使用更少的内存。 - 现在,如果需要,货运现在可以完全脱机运行。
Rust 1.35的新功能
2019年5月发布的 1.35版提供以下功能:
-
Box<dyn FnOnce>
,Box<dyn FnMut>
和Box<dyn Fn>
的FnOnce
,FnMut
和Fn
闭包特征的实现。 -
dbg!
现在可以在不带参数的情况下调用Rust 1.32中引入的宏。 - 现在为
Box<dyn Fn*>
实现Fn *闭包特征。 - 标准库的稳定化。
- Clippy提供了一组绒毛来捕捉常见错误,并添加了一个绒毛
drop_bounds
,该绒毛在向通用函数添加绑定T: Drop
时触发。 - 引入了
ptr::hash
函数,因此开发人员可以避免对引用的指向值进行哈希处理,而可以对地址进行哈希处理。 -
RefCell
的值可以通过闭包替换。 开发人员可以更符合人体工程学地映射和替换单元格的当前值,并检索旧值。 - 开发人员现在可以轻松检查范围内是否存在值。
- 对Cargo进行了许多更改,例如为构建脚本添加了
rustc-cdylib-link-arg
键,以指定cdylib包装箱的链接器参数。
Rust 1.34中的新功能
Rust 1.34 发布于2019年4月 ,包括以下新增和更改的功能:
- Cargo是Rus的项目和包裹管理系统,现在可以与默认注册表(Crates.io)之外的其他注册表一起使用,包括自托管注册表 。 请注意,Crates.io上托管的任何Crate都只能依赖Crates.io中的Crate。
-
?
运算符,用于解压缩错误和Result
类型中的有效值,现在可以在文档测试中使用 。 这样就可以在编写文档的同时编写更全面的测试示例。 - 自定义属性现在可以接受任意令牌流。 这样可以使过程宏中的自定义属性更加简洁,并使用更多惯用的Rust代码。
-
TryFrom
和TryInto
特征现在可以允许可能导致失败的类型转换。 - 添加了许多库和API稳定性,例如支持更广泛的原子整数类型(可以在线程之间安全共享)。
Rust 1.33的新功能
Rust 1.33于2019年2月下旬首次亮相,具有以下新功能:
- 现在提供了一种新的语言概念,称为固定。 固定允许开发人员在内存中指定一个不会移动的对象。 Pin类型和Unpin标记特征用于实现此目的。
-
const fn
声明用于声明可在编译时在常量表达式中调用的函数,现已扩展为涵盖更多用例,例如let
绑定(包括可变对象),赋值表达式和表达式语句。 简而言之,const fn
声明使更多语言在编译时上下文中可用。 -
use n as _
语法可让您导入特征的impl
,而不会污染导入该特征的名称空间。 - 通过使
const
稳定了许多库元素。
Rust 1.32中的新功能
Rust的1.32版本于2019年1月发布,包括以下更改:
-
dbg
宏。 将dbg!()
插入Rust应用程序会打印任何println!
-formattable表达stderr
,与样板的最小量。 插入打印语句作为调试的辅助方法是一种古老的技术,但是当您只需要在给定的时间点了解变量的状态时,这是一种可靠的备用方法。 -
jemalloc
内存分配器不再是默认值。 拉斯特应用程序现在使用系统自带的内存分配器为默认值,与jemalloc
通过提供jemallocator
箱。 使用系统分配器可将Rust二进制文件的大小减少约300 KB,并使跨平台的Rust应用程序的默认行为更加一致。 (默认情况下,在Microsoft Windows上构建的Rust应用程序默认情况下已使用系统分配器。) - 宏现在可以对所有类型的文字(字符串,数字和
char
文字)执行匹配。 这使得编写接受文字作为参数的宏变得更加容易。 - 对模块导入方式的更多改进,进一步减少了普通应用程序所需的样板数量。
Rust 1.31的新功能
翻译自: https://www.infoworld.com/article/3267624/whats-new-in-the-rust-language.html
rust 1.34