Cargo 在 2020 年

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

这篇博文是关于 Cargo 团队在 2020 年感兴趣的主要项目的概述。

对于一个资源有限、由志愿者组成的开源项目来说,规划和预测是困难的。这里不是一个心愿单,而是已经有切实计划推动进展的项目。这不意味着我们对其他项目不感兴趣。我们在 https://github.com/rust-lang/cargo/projects/1 整理了一个更详细的心愿单,其中列出了我们希望看到但在今年不太可能有重大进展的事项。

如果您有兴趣提供帮助,请告知我们!我们可能没有时间来指导额外的项目,但我们可能会有一些反馈和评审的时间,特别是对于那些有动力且能够承担设计和达成共识的实干者。

功能 (Features)

功能 (Features) 提供了一种表达可选依赖和代码条件编译的方式。对功能的修复和增强是我们听到的最常被请求的事项之一。在 2020 年初,我们计划实现一个新的功能解析器,这将使得实现和试验新行为更容易取得进展。我们正在关注各种不同的增强,希望在保持长期计划的全局视图的同时,逐步推进这些增强。

最初,我们计划解决构建时使用不同功能共享依赖项解耦的问题。目前,一个依赖项的所有用途的功能都是统一的,即使没有必要。当一个功能旨在用于某个上下文但与另一个上下文不兼容时,这会引发问题。这通常发生在具有条件 no_std 支持的包中。这会出现在构建依赖 (build-dependencies)、开发依赖 (dev-dependencies)、特定目标依赖 (target-specific dependencies) 和大型工作区 (workspaces) 中,每种情况都有其独特的挑战。

除此之外,以下是我们正在跟踪的未来其他主要增强的简要视图:

  • 工作区功能选择和统一
  • 自动功能
  • 命名空间功能
  • 互斥功能
  • 私有/不稳定功能
  • Profile 和目标默认功能
  • 以及解决 50 多个功能相关问题。

在保持向后兼容性和对增加的构建时间的敏感性方面存在一些重大挑战。我们希望在平衡这些考虑因素的同时,能够解决一些主要的痛点。

std 感知 Cargo

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

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

2019 年,通过 nightly 通道提供的 -Zbuild-std 功能,已经完成了大量工作。要将其稳定下来,还有很长的路要走。相关工作正在 wg-cargo-std-aware 仓库中进行跟踪,鼓励任何感兴趣的人在问题跟踪器上留下反馈。

Profile

2018 年和 2019 年对 Profile 进行了大量工作。覆盖 (Overrides) 现在已经稳定(在 Rust 1.41 中发布)。自定义命名 Profile 在 nightly 通道中可用。在 2020 年,我们希望继续推进这些增强。我们正在努力的一些事项包括:

正在进行的项目

一些正在进行的努力没有终点,我们打算继续推进它们。文档中新增了几章,未来还会有更多。JSON API 也在不断扩展新信息,以便更容易集成工具和提取信息。当然,还有努力解决 Bug 和问题!