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 平台将降级到最低的支持层。
完整更新内容查看发布说明:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源游戏引擎 Godot 3.2 稳定版发布:改进文档、支持 Android 和 WebAssembly
开源游戏引擎 Godot 3.2 已按计划在今年 1 月发布了稳定版本,Godot 3.2 基于此前的 3.1 版本进行了重大改进,带来了数十个新的重要功能以及数百个错误修复和功能增强。Godot 团队也希望通过这个拥有更高可用性的版本帮助游戏开发者不断改进他们的作品。 团队还表示可以将 Godot 3.2 视作 LTS 版本,到时将会有定期的维护版本(3.2.x)带来重要的错误修复、可用性增强和一些新功能,直至大家过渡到 Godot 4(4.0 版本计划于今年中旬发布)。 下载地址 Godot 3.2 下载地址:https://godotengine.org/download 新功能概要 文档:提供了更丰富的内容,并为在线版本应用了更好的主题 值得一提的是,这也是 Godot 首次提供多语言版本的文档。 Mono/C#:支持 Android 和 WebAssembly Godot 3.0通过使用Mono 框架实现了对 C# 的初始支持,Godot 3.1 则增加了对将项目导出到桌面平台(Linux, macOS 和 Windows)的支持。到了 Godot 3.2,团队的 C# 维护...
- 下一篇
DBeaver 6.3.4 发布,可视化数据库管理平台
DBeaver6.3.4发布了。DBeaver 是一个可视化通用数据库管理工具和 SQL 客户端,支持 MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB 与 Derby,以及其它兼容 JDBC 的数据库。 此版本更新内容包括: 活动数据库/模式选择器行为得到了显著改善 Smart commit 模式得到增强: 交易结束后切换为自动提交 表编辑器的智能提交 交易首选项页面已添加 数据传输: 添加了 CSV 导出参数(quote 模式) 添加/删除表到现有数据传输任务已修复 SQL 编辑器: “选择所有行”(Select all rows)查询生成已修复 现在在控制台中读取数据使用正确的默认架构 Data viewer: 将布尔值显示为复选框(可配置) 行颜色自定义已修复 连接编辑器(Connection editor): 现在可以打开多个连接编辑器对话框 引入了额外的变量,改进了配置用户界面 Apache Phoenix: 驱动程序版本已更新 Schema-less 表读取已修复 添加了索引创建支持 SQL 自动完成已修复 Exa...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果