Rust 团队很高兴宣布 Rust 的新版本 1.25.0。Rust 是一种系统编程语言,专注于安全、速度和并发。
如果您之前已通过 rustup 安装了 Rust,获取 Rust 1.25.0 非常简单:
$ rustup update stable
如果您还没有,您可以从我们网站上的相应页面获取 rustup
,并查看 GitHub 上的1.25.0 的详细发布说明。
1.25.0 稳定版中的内容
最近几个版本相对较小,但 Rust 1.25 包含了很多东西!第一个很简单:我们已从 LLVM 4 升级到 LLVM 6。这会产生许多影响,其中一个主要影响是更接近于支持 AVR。
一种新的 use
语句编写方式已经出现:嵌套导入组。如果您曾经编写过类似这样的导入集:
use std::fs::File;
use std::io::Read;
use std::path::{Path, PathBuf};
您现在可以这样写:
// on one line
use std::{fs::File, io::Read, path::{Path, PathBuf}};
// with some more breathing room
use std::{
fs::File,
io::Read,
path::{
Path,
PathBuf
}
};
这可以减少一些重复,并使事情更加清晰。
此版本有两个重大的文档更改:首先,Rust By Example 现在已包含在 doc.rust-lang.org 上!我们将在不久后将旧域名重定向到那里。我们希望这将为一个很棒的资源带来更多关注,并且您将在本地文档中获得本地副本。
其次,早在 Rust 1.23 中,我们就谈到了从 Hoedown 到 pulldown-cmark 的更改。在 Rust 1.25 中,pulldown-cmark 现在是默认值。我们终于从 rustdoc 中删除了最后一点 C 代码,现在完全遵循 CommonMark 规范。
最后,在RFC 1358 中,#[repr(align(x))]
被接受。在 Rust 1.25 中,它现在是稳定的!此属性允许您设置struct
的对齐方式
struct Number(i32);
assert_eq!(std::mem::align_of::<Number>(), 4);
assert_eq!(std::mem::size_of::<Number>(), 4);
#[repr(align(16))]
struct Align16(i32);
assert_eq!(std::mem::align_of::<Align16>(), 16);
assert_eq!(std::mem::size_of::<Align16>(), 16);
如果您正在处理底层内容,控制这些类型的事情非常重要!
有关更多信息,请参阅详细的发布说明。
库稳定化
本版本库中最大的故事是std::ptr::NonNull<T>
。此类型类似于 *mut T
,但是非空的且协变的。这篇博文不是解释方差的合适地方,但简而言之,NonNull<T>
,好吧,保证它不会为空,这意味着 Option<NonNull<T>>
与 *mut T
的大小相同。如果您正在使用不安全代码构建数据结构,NonNull<T>
通常是适合您的类型!
libcore
已获得 time
模块,其中包含以前仅在 libstd
中可用的 Duration
类型。
此外,与 Duration
关联的 from_secs
和 from_millis
函数被设为 const fn
,允许它们用于创建 Duration
作为常量表达式。
有关更多信息,请参阅详细的发布说明。
Cargo 功能
Cargo 的 CLI 在本版本中有一个非常重要的更改:cargo new
将默认 生成二进制文件,而不是库。我们试图保持 Cargo 的 CLI 相当稳定,但此更改很重要,并且不太可能导致中断。
作为背景,cargo new
接受两个标志:--lib
,用于创建库,以及 --bin
,用于创建二进制文件或可执行文件。如果您没有传递其中一个标志,在以前的 Cargo 版本中,它将默认使用 --lib
。我们做出这个决定是因为每个二进制文件(通常)都依赖于许多库,因此库的情况更为常见。但是,这是不正确的;每个库都被许多二进制文件依赖。此外,在入门时,您通常想要的是一个可以运行并进行操作的程序。这不仅是新的 Rustaceans,即使是长期社区成员也表示他们发现这种默认设置令人惊讶。因此,我们正在更改它。
类似地,cargo new
以前会对它将创建的包的名称有一些意见。具体来说,如果您的包以 rust-
开头或以 -rs
结尾,Cargo 会将其重命名。目的是,好吧,这是一个 Rust 包,此信息是多余的。但是,人们对命名感觉非常强烈,当他们遇到这种情况时,他们会感到惊讶,并且经常感到沮丧。因此,我们不再这样做。
许多用户喜欢 cargo doc
,这是一种为他们的 Cargo 项目生成本地文档的方法。它在本版本中获得了巨大的速度提升,因为它现在使用 cargo check
,而不是完整的 cargo build
,因此某些场景会更快。
此外,git 依赖项的签出应该快得多,这得益于尽可能使用硬链接。
有关更多信息,请参阅详细的发布说明。
1.25.0 的贡献者
许多人共同创建了 Rust 1.25。没有你们,我们无法做到这一点。