Rust 的自动内存管理使开发人员免于指针操作,并防止低级内存操作引起的问题,例如释放后内存访问、空指针取消引用、缓冲区溢出等。 正在开发一个包管理器来分发库、确保组装并管理项目的依赖关系。
主
-
稳定化 基于“async”函数、async move { ... } 块和“.await”运算符的新异步编程语法,这使得编写不会阻塞主命令流的处理程序变得更加容易。 与之前提供的异步 I/O API 相比,async/.await 构造易于理解、可读性强,并且允许您使用基于循环、条件语句和异常的熟悉的流控制技术来实现复杂的异步交互。异步等待语法允许您创建可以暂停执行、将控制权返回到主线程,然后从中断处恢复执行的函数。 例如,在处理 I/O 时需要这样的暂停,其中可以在等待下一条数据到达的同时完成其他工作。 使用“async fn”和“async move”定义的函数和块返回一个特征
未来 ,它定义了延迟异步计算表示。 您可以直接使用“.await”运算符发起延迟计算并获取结果。 在调用 .await 之前不会执行或预先计划任何操作,从而允许创建复杂的嵌套构造而无需额外的开销。异步 fn first_function() -> u32 { .. }
...
让 future =first_function();
...
让结果:u32 = future.await; -
稳定化 "#![feature(bind_by_move_pattern_guards)]",允许使用绑定类型为 " 的变量随动 “在模板中并在表达式的“if”部分使用对这些变量的引用”匹配 ”。 例如,现在允许以下结构:fn 主(){
让数组:Box<[u8; 4]> = Box::new([1, 2, 3, 4]);匹配数组{
NUMS
if nums.iter().sum::() == 10=> {
下降(数字);
}
_ => 无法访问!(),
}
} - 允许指示
属性 定义函数参数、闭包和函数指针时。 支持通过 lint(允许、警告、拒绝和禁止)控制诊断的条件编译属性(cfg、cfg_attr)和辅助宏调用属性。fn 长度(
#[cfg(windows)] slice: &[u16], // 在 Windows 上使用该参数
#[cfg(not(windows))] slice: &[u8], // 在其他操作系统中使用
) -> 使用 {
切片.len()
} - 关于使用 NLL(非词法生命周期)技术检查变量借用(借用检查器)时发现的问题的警告,
翻译的 属于致命错误的范畴。 让我们回想一下,基于考虑借用变量生命周期的新机制的验证系统可以识别旧验证代码未注意到的一些问题。 由于此类检查的错误输出可能会影响与以前工作的代码的兼容性,因此最初发出警告而不是错误。 在 Rust 2018 模式下运行时,警告现已替换为错误。 在下一个版本中,错误输出也将以 Rust 2015 模式实现,这将最终摆脱旧的借用检查器; - “const”属性决定了在任何上下文中使用而不是常量的可能性,用于函数 Vec::new、String::new、LinkedList::new、str::len、[T]::len , str::as_bytes,
abs、wrapping_abs 和overflowing_abs; - 新的部分 API 已转移到稳定类别,包括已稳定的方法
Pin::into_inner、Instant::checked_duration_since 和 Instant::saturating_duration_since; - 货物包管理器现在能够使用“.toml”扩展名的配置文件。 添加了对直接从 Cargo 构建标准库的初步支持。 添加了“--workspace”标志,取代了有争议的“--all”标志。 元数据中添加了一个新字段“
发布 ”,它允许您通过指定 git 标签和版本号来发布依赖项。 添加了测试选项“-Ztimings”以生成各个编译阶段的执行时间的 HTML 报告。 - 在 rustc 编译器中,诊断消息包括修剪不适合终端的代码尾部。 为目标平台提供第三级支持
i686-未知-uefi 和 sparc64-未知-openbsd。 第三级涉及基本支持,但没有自动化测试和官方版本的发布。
来源: opennet.ru