APP下载

Rust发布1.41.0松绑Trait实作限制

消息来源:baojiabao.com 作者: 发布时间:2026-07-11

报价宝综合消息Rust发布1.41.0松绑Trait实作限制

Rust团队发布了最新Rust 1.41版本,放宽Trait实作的限制,同时也改进Cargo的安装,而且这个版本将是最后支援32位元苹果系统的版本。

官方提到,由于在Rust 1.41孤立规则(Orphan Rule)太过严格,阻碍了组合(Composition)。孤立规则是用来预防相依性项目,在添加新Trait实作时造成破坏,也就是说只有在当前区域Crate中而非外部Crate时,Rust才会允许Trait或是类型实作。

但是这限制遇到泛型时,情况就变得复杂,当Crate定义了BetterVec结构,而开发者想要把该结构转换成标准函式库的Vec,程式码写作impl From> for Vec{// ...},在Rust 1.40中,这个写法违反孤立原则,因为From和Vec都是定义在标准函式库,对于当前Crate来说是外部的Trait与类型,虽然有许多办法可以绕过这个限制,但除了过程繁琐之外,也无法适用所有案例。

上述案例在Rust 1.41中,From和Vec仍然为外部的Trait与类型,但是Trait将会透过区域类型参数化,因此在最新版本这个实作是可行的。

在最新版本中,Cargo安装还会更新过时的套件。Cargo安装可以用来安装二进制Crate,开发人员常用来安装以Rust撰写的CLI工具,而从Rust 1.41开始,当Crate有新版本释出的时候,Cargo安装将会更新该Crate到最新版本。

另外,为了维持建置的一致性,Cargo会使用名为Cargo.lock的档案,其中包含了相依项目版本与校验和,但是在独立的分支中变更相依项目的时候,该档案的资料排列方式容易产生合并冲突,而从Rust 1.41开始,将开始采用能够避免冲突的新格式,但只有新的锁定档案会使用新格式,原有档案将还是使用之前的格式。

Rust将降低32位Apple装置的支援程度到Tier 3,而这代表相关程式无法以rustup安装程式下载,并且在自动建置的过程也会被忽略,Rust开发团队表示,主要影响的目标是i686 apple darwin,无论是在32位元Mac硬件上使用编译器,或是在其他平台交叉编译的32位元二进制档都会受到影响,遭到降级的还有armv7-apple-ios、armv7s-apple-ios与i386-apple-ios。

由于Apple放弃支援MacOS 10.15和iOS 11的32位元档案,并且还防止开发者从Xcode 10交叉编译32位元的程式,因此Rust降级的这些目标,对开发者来说本来就没用。开发者仍可以继续使用Rust 1.41建置32位元二进制档,在2020年3月12日发布下一个稳定版本之前,Rust开发团队还是会提供重大错误修复与安全补丁。

2020-02-04 11:49:00

相关文章