皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Rust 1.41.0 发布,带来多项新特性

Rust 1.41.0 发布了,此版本亮点包括放宽对 trait 实现的限制、改进cargo install、对git更友好的 Cargo.lock以及Box<T>与 FFI 相关的新保障。

放宽对 trait 实现的限制

为了防止当依赖项添加新 trait impl 时生态系统崩溃,Rust 强制执行孤立规则。其要点是,仅当所实现的 trait 或 type 是在本地定义而不是外部 crate ,才允许使用 trait impl。但是,当涉及泛型时会变得复杂。

在 Rust 1.41.0 之前,孤立规则过于严格,造成了问题。例如,假设 crate 定义了 BetterVec<T> 结构,并且想要一种将结构转换为标准库的 Vec<T> 方法,需要编写以下代码:

impl<T> From<BetterVec<T>> for Vec<T> {
    // ...
}

这是模式的一个实例:

impl<T> ForeignTrait<LocalType> for ForeignType<T> {
    // ...
}

Rust 1.40.0 中,孤立规则禁止使用该 impl,因为 From 和 Vec 均在标准库中定义,这对于当前 crate 而言属于外部。有一些方法可以解决该限制,例如 newtype 模式,但是在某些情况下,它们通常很麻烦,甚至是不可能的。

尽管 From 和 Vec 都是外部的,但 trait(本示例中为 From)是由本地 type 参数化的,这样 Rust 1.41.0 就允许该 impl。

过期时 cargo install 更新软件包

使用 cargo install,可以在系统中安装二进制 crate,社区经常使用该命令来安装用 Rust 编写的流行 CLI 工具。从 Rust 1.41.0 开始,如果自安装以来发布了新版本,cargo install 还将更新该 crate 的现有版本。在此之前,唯一的选择是传递 –force 标志,问题是就算软件是最新的,它也会重新安装。

较少发生冲突的 Cargo.lock 格式

为了确保构建的一致性,Cargo 使用名为 Cargo.lock 的文件,其中包含依赖项版本和校验和。但是在单独的分支中更改依赖项时,数据在其中的排列方式导致不必要的合并冲突。Rust 1.41.0 为文件引入了一种新格式,专门设计用于避免这些冲突。这种新格式将用于所有新的 lock 文件,而现有的 lock 文件仍将依赖以前的格式。

在 FFI 中使用 Box<T> 时有更多保障

从 Rust 1.41.0 开始,Box<T> 中 T:Sized 现在与 C 语言的指针(T*)类型 ABI 兼容,因此,如果有一个从 C 端调用的 extern “C” Rust 函数,则 Rust 函数现在对于某些特定的 T 可以使用 Box<T>,这对应于 C 中的 T* 函数。

例如,在 C 端可能有以下代码:

// C header */

// Returns ownership to the caller.
struct Foo* foo_new(void);

// Takes ownership from the caller; no-op when invoked with NULL.
void foo_delete(struct Foo*);

而在 Rust 端:

#[repr(C)]
pub struct Foo;

#[no_mangle]
pub extern "C" fn foo_new() -> Box<Foo> {
    Box::new(Foo)
}

// The possibility of NULL is represented with the `Option<_>`.
#[no_mangle]
pub extern "C" fn foo_delete(_: Option<Box<Foo>>) {}

但是需要注意,尽管 Box<T> 和 T* 具有相同的表示形式和 ABI,但 Box<T> 仍必须为非 null、align 并准备好由全局分配器释放。为确保这一点,最好仅使用源自全局分配器的 Box。

此外还有一些库的变更,以及即将减少对 32 位 Apple 平台的支持,从 1.42.0 开始,像 i686-apple-darwin 平台将降级到最低的支持层。

完整更新内容查看发布说明:

https://blog.rust-lang.org/2020/01/30/Rust-1.41.0.html

转自 https://www.oschina.net/news/113158/rust-1-41-0-released