锈1.48

2020-11-21 23:06:17

Rust团队非常高兴地宣布Rust的新版本1.48.0。 Rust是一种编程语言,它使每个人都可以构建可靠且高效的软件。

如果您通过rustup安装了旧版本的Rust,那么获取Rust1.48.0就像以下操作一样简单:

如果还没有,可以从我们网站上的相应页面获取rustup,然后在GitHub上查看1.48.0的详细发行说明。

此发行版的主角是Rustdoc,并进行了一些更改,使编写文档变得更加轻松!请参阅详细的发行说明,以了解本文未涵盖的其他更改。

Rustdoc,Rust发行版中包含的库文档工具,让您在Markdown中编写文档。这使其非常易于使用,但也有一些痛点。假设您正在为一些Rust代码编写一些文档,如下所示:

我们有两个模块,每个模块内部都有一个结构。想象我们想一起使用这两个结构。我们可能要在文档中对此加以注意。因此,我们编写了一些如下所示的文档:

pub mod foo {///一些关于Foo的文档/// ///您可能想将`Foo`与`Bar`一起使用。 pub struct Foo;} pub mod bar {///一些关于Bar的文档/// ///您可能想将Bar与Foo一起使用。 pub struct Bar;}

很好,但是如果我们可以链接到其他类型,那将是非常好的。这将使我们图书馆的用户在我们的文档中轻松导航。

这里的问题是Markdown对Rust以及rustdoc生成的URL一无所知。因此,Rust程序员必须要做的是手动写出这些链接:

pub mod foo {///`Foo`的一些文档/// ///您可能想将`Foo`与[`Bar`]一起使用。 /// /// [`Bar`]:../bar/struct.Bar.html pub struct Foo;} pub mod bar {///“ Bar”的一些文档/// ///您可能想要与[`Foo`]一起使用`Bar`。 /// /// [`Foo`]:../foo/struct.Foo.html pub struct Bar;}

请注意,我们还必须使用相对链接,以便脱机工作,此过程不仅繁琐且容易出错,而且在某些地方也存在错误。如果我们在酒吧的根目录中放置bar :: Bar,那将在根目录中导出Bar。现在我们的链接是错误的。但是,如果我们修复它们,那么当我们导航到位于模块内部的Bar时,它们最终将是错误的。您实际上无法手动编写这些链接,并且使它们都准确无误。

在此版本中,您可以使用一些语法来使rustdoc知道您正在尝试链接到类型,它将为您生成URL。这是两个不同的示例,基于之前的代码:

pub mod foo {///一些关于Foo的文档/// ///您可能想将Foo与[`Bar`](crate :: bar :: Bar)一起使用。 pub struct Foo;} pub mod bar {///一些关于Bar的文档/// ///您可能想在[crate :: foo :: Foo]中使用Bar。 pub struct Bar;}

第一个示例将显示与以前相同的文本;但会生成到Bar类型的正确链接。第二个将链接到Foo,但是将整个crate :: foo :: Foo显示为链接文本。

您可以在此处使用很多选项。请参阅rustdoc书中的“按名称链接项目”部分以获取更多信息。关于此功能的历史,Inside Rust也有一篇帖子,由其背后的一些贡献者撰写!

现在,您可以在项目上指定#[doc(alias =“ ”))以在通过rustdoc的UI进行搜索时添加searchaliases。这是较小的更改,但仍然有用。看起来像这样:

有了这个注释,如果我们在rustdoc的搜索中搜索“ bar”,即使我们的搜索文本中没有“ Foo”,Foo也会作为结果的一部分出现。

别名的一个有趣用例是FFI包装箱,其中每个Rustfunction都可以别名为它包装的C函数。然后,底层C库的现有用户将可以轻松搜索正确的Rustfunctions!

最重要的API更改有点令人a舌:[T; N]:TryFrom >现在稳定。这是什么意思?好吧,您可以使用此方法尝试将向量转换为给定长度的数组:

使用std :: convert :: TryInto;让v1:Vec = vec![1、2、3]; //这将成功;我们的向量的长度为三,我们试图//制作一个长度为三的数组。leta1:[u32; 3] = v1.try_into()。expect(“ wrong length”); //但是,如果我们尝试使用长度为5的向量来做......让v2:Vec = vec![1、2, 3,4,5]; // ...由于我们输入的长度错误,这将引起恐慌。请让a2:[u32; 3] = v2.try_into()。expect(“错误长度”);

在上一个版本中,我们讨论了能够使用const泛型的标准库。这是我们可以通过这些功能添加的各种API的一个很好的示例。希望很快会听到更多有关const泛型稳定的信息。

Rust 1.48.0发行版中还有其他更改:请查看Rust,Cargo和Clippy中的更改。

许多人一起创建了Rust 1.48.0。没有你们所有人,我们做不到。谢谢!