2020 年的 Cargo

2020 年 1 月 10 日 · Eric Huss 代表 Cargo 团队

本文概述了 Cargo 团队在 2020 年有兴趣处理的主要项目。

围绕一个资源有限的基于志愿者的开源项目进行规划和预测可能很困难。与其尝试展示一个愿望清单,不如说这些项目已经有扎实的计划来推动它们前进。这并不意味着我们对其他项目不感兴趣。我们在 https://github.com/rust-lang/cargo/projects/1 编制了一个更详细的愿望清单,其中概述了我们希望看到的内容,但今年不太可能取得重大进展。

如果您有兴趣提供帮助,请告诉我们!我们可能没有时间来指导额外的项目,但我们可能有时间提供一些反馈和审查,特别是对于那些有良好动机、能够完成设计和达成共识的人。

功能特性

功能特性提供了一种表达可选依赖项和代码条件编译的方式。修复和增强功能特性是我们听到的最常见的要求之一。在 2020 年初,我们计划实现一个新的特性解析器,这将更容易在实现和试验新行为方面取得进展。我们正在研究各种不同的增强功能,我们希望在保留长期计划的完整蓝图的同时逐步取得进展。

最初,我们计划解决使用不同特性构建的共享依赖项解耦问题。目前,特性对于依赖项的所有用途都是统一的,即使不是必需的。当一个上下文的特性与另一个上下文不兼容时,就会出现问题。这种情况经常发生在具有条件 no_std 支持的包中。这种情况出现在构建依赖项、开发依赖项、特定于目标的依赖项和大型工作区中,每个都有其独特的挑战。

除此之外,以下是我们正在跟踪的未来其他主要增强功能的简要概述

  • 工作区特性选择和统一
  • 自动特性
  • 命名空间特性
  • 互斥特性
  • 私有/不稳定特性
  • 配置文件和目标默认特性
  • 并解决 50 多个特性问题。

在保持向后兼容性以及对增加构建时间保持敏感性方面存在一些重大挑战。我们希望在平衡这些问题的同时解决一些主要的痛点。

std 感知 Cargo

“std 感知 Cargo”项目的目标是使 Cargo 了解 Rust 标准库,并从源代码构建它,而不是使用随 rustc 提供的预构建二进制文件。一些显著的优点是

  • 自定义标准库的编译时标志,例如使用不同的优化、target-cpu、调试设置等。
  • 支持交叉编译到没有官方发行版的新目标。
  • 为未来的增强功能铺平道路,例如使用不同的特性进行编译和使用自定义源。

在 2019 年,使用在 nightly 通道上可用的 -Zbuild-std 功能已经完成大量工作。要将其推向稳定状态还有很长的路要走。这项工作正在 wg-cargo-std-aware 仓库中进行跟踪,我们鼓励任何有兴趣的人在问题跟踪器上留下反馈。

配置文件

配置文件在 2018 年和 2019 年进行了大量工作。覆盖现在是稳定的(在 Rust 1.41 中发布)。自定义命名配置文件在 nightly 通道上可用。在 2020 年,我们希望继续推动这些增强功能向前发展。我们正在努力实现的一些目标是

正在进行的项目

一些正在进行的工作没有终点,我们打算继续在这方面取得进展。文档中添加了几个新章节,还有更多内容即将推出。JSON API 不断扩展,提供新信息,从而更容易集成工具和提取信息。当然,也要努力解决错误和问题!