06-更新日志
134 分钟阅读
译文 · 基于 The Cargo Book(源:cargo 标签 0.98.0 / Rust 1.97 文档)
更新日志
Cargo 1.97 (2026-07-09)
新增
- 为
--manifest-path增加-m简写 #16858
变更
- 改进误输入
-p时的错误信息,会建议相似的工作空间成员名称 #16844 - cargo-clean:当
--target-dir看起来不像 Cargo 目标目录时报错。 这可防止误删非目标目录。 #16712 #16878
修复
仅 Nightly
-Zscript:教用户如何固定 edition #16851-Zcargo-lints:优先使用已定义的 lint 级别,而非默认级别 #16879-Zcargo-lints:unused_dependencies忽略 rustc 的unused_crate_dependencieslint 状态 #16877
文档
- 澄清 registry 的
config.json中 “api” 不应包含尾部斜杠。 #16869
内部
- 更新依赖。 #16883
- ci:将 GitHub Actions 固定到提交 SHA #16867 #16868
- test:为经由 github 快路径的 cargo install 添加测试 #16866
Cargo 1.96 (2026-05-28)
新增
- 在 Cargo 配置中支持
target.'cfg(..)'.rustdocflags。 #16846 - cargo-help:为嵌套子命令显示 manpage。
例如
cargo help report future-incompat。 #16432
变更
- 改进查找父工作空间时的错误信息, 解释 Cargo 为何向上搜索,并建议变通做法。 #16669
- 澄清与 edition 相关的警告信息,
使
Cargo.toml与脚本使用更一致的措辞。 #16676 - Shell 补全会在命令之前补全
--config与--color。 #16780 - 将
build-dir并发文件锁拆分为专用锁, 同时对.cargo-lock保持共享锁,以便新旧 Cargo 可同时在同一目标目录上运行。 #16708 #16887 - 依赖的多位置现已支持
git与备用 registry。 例如{ git = "https://...", registry = "my-registry" }。 #16810 term.progress.term-integration可检测 Ptyxis 终端支持。 #16730- 改进错误信息以遵循 rustc 诊断风格。 #16795 #16711
- 在 macOS 上将目标目录排除在 iCloud Drive 同步之外 #16728
- 在
rustc -vV目标发现探测期间设置CARGO环境变量 #16811 - 当备用 registry 拒绝 token 时,提示预期的认证方案。 #16794
- 对无效的 jobserver 文件描述符发出警告 #16843
- cargo-clean:校验目标目录不是文件 #16765
- cargo-install:使用非默认工具链安装时发出警告 #16131
- cargo-publish:API 请求发送
Content-Type: application/octet-stream头 #16832 - cargo-tree:澄清在未指定包名时使用
-i的错误信息 #16818
修复
- 为 fetch 保留类 SCP 的子模块 URL。这是 1.94 中的回归。 #16727 #16744
- 修复在创建 lockfile 之后,从非 GitHub 主机 使用非默认 refspec 拉取 git 依赖的问题。 #16768
- 修复包 URL 规格以无版本的尾部
#结尾时的 panic。 #16754 - cargo-publish:修复工作空间发布中因循环依赖导致的静默挂起与超时。 #16722
仅 Nightly
unstable-editions:当包声明不稳定 edition 时, 在错误中显示所需的 Rust 版本。 #16653native-completions:补全--config参数 #16249-Zbuild-dir-new-layout:在新布局中简化构建脚本二进制名称 #16812 #16855-Zbuild-std:在unused-crate-dependencieslint 中忽略隐式 std 依赖 #16677-Zcargo-lints:添加unused_dependencieslint #16600-Zlockfile-path:cargo-install 忽略resolver.lockfile-path#16823-Zscript:为cargo fix向脚本注入 edition。 #16678-Zscript:对嵌入式内容抑制unused_featureslint #16714-Zscript:在 quiet 模式下仍强制显示脚本 edition 警告 #16848-Zjson-target-spec:在错误信息中说明这是 cargo 的 Z flag #16793-Zwarnings:build.warnings=allow不应隐藏被拒绝的诊断与硬警告 #16824 #16827-Zwarnings:使 build.warnings 忽略非本地依赖 #16760-Zwarnings:在拒绝警告且未使用--keep-going时停止 #16725-Zwarnings:也将警告摘要转为错误 #16721
文档
内部
- 🎉 新成员 crate
cargo-util-terminal! 其中包含 Cargo 的终端渲染工具, 包括 shell 输出、样式与诊断报告。 它遵循 Rust 的 6 周发布流程。 #16809 - 对 registry 网络操作使用异步 #16745 #16752 #16763
- 从内部 crate 导出公共依赖 #16819
- 将超链接逻辑抽到新的
anstyle-hyperlink包 #16749 - 将终端集成抽到新的
anstyle-progress包 #16757 - 让 git 自行决定何时运行
git gc,而不再手动统计 packfile。 #16459 - cargo-test-support:从测试环境中剥离
RUSTUP_TOOLCHAIN_SOURCE#16857 - cargo-test-support:修复在长目标目录路径下的
symlink_and_directory。 #16775 - ci:检测用户对 src/etc/man 的更改 #16736
- ci:将 cargo-semver-checks 更新到 v0.47.0 #16723
- 更新依赖。 #16685 #16690 #16710 #16716 #16771 #16778 #16786 #16808 #16820 #16825 #16828 #16833 #16859
Cargo 1.95 (2026-04-16)
新增
变更
- ❗️ 禁止在主目录中执行
cargo init,以避免清单发现相关问题。 这此前会导致尝试使用 Cargo 的新用户陷入令人困惑的状态。 #16566 - HTML 计时报告现改用 SVG 而非 canvas 渲染。 canvas 渲染选项已完全移除。 这可提升大型依赖图上的响应性与性能, 并支持在图表中选择文本。 #16602 #16607
- 改进错误信息以遵循 rustc 诊断风格。 #16498 #16625 #16643
- 改进错误清单的错误信息 #16630
- 即使在工作空间根目录之外也建议
workspace.members条目 #16616 term.progress.term-integration可检测 iTerm 是否支持 ANSI OSC 9;4 序列。 #16506- cargo-install:使错误信息感知
build.build-dir#16623 - cargo-remove:当要移除的依赖存在于其他表中时,
建议
--dev、--build或--target标志。 #16533
修复
- 修复
cargo test --frozen尝试下载 指定测试实际并不需要的依赖。 #16221 - 修复
net.known_hosts对否定规则的解析。 #16596 - 仅在 SVG 计时渲染器的
units非空时计算y_ticks。 #16575 - 在建议的 fix 信息中尊重 Clippy CLI 参数
CLIPPY_ARGS。 #16652 - 修复
cargo package在覆盖更大的已有文件时 生成损坏的.crate文件。 #16713
仅 Nightly
- 🔥
-Zhost-config:添加host.runner以包装主机构建目标的执行 #16599 #16674 #16638 #16631 --artifact-dir:移除已弃用的不稳定--out-dir#16608-Zbuild-analysis:向 BuildStarted 消息添加 command 字段 #16577-Zbuild-dir-new-layout:更新 layout 模块文档以说明新布局 #16502-Zbuild-dir-new-layout:将产物依赖存储在构建单元目录中。 #16519-Zbuild-dir-new-layout:在新 build-dir 布局中将构建脚本运行的output目录改为stdout#16644 #16645-Zbuild-dir-new-layout:为新 build-dir 布局重组构建单元目录布局 #16542-Zcargo-lints:添加non_kebab_case_binslint #16524 #16553-Zcargo-lints:添加missing_lints_inheritancelint #16588-Zcargo-lints:添加unused_workspace_package_fieldslint #16585-Zcargo-lints:添加unused_workspace_dependencieslint #16571-Zcargo-lints:添加redundant_homepagelint #16561 #16564-Zcargo-lints:添加redundant_readmelint #16552-Zcargo-lints:添加non_*_case_featureslint #16560-Zcargo-lints:添加互斥的non_{kebab,snake}_case_packages#16554-Zcargo-lints:每个包只显示一次implicit_minimum_version_reqlint 来源。 #16535-Zcargo-lints:当 MSRV 过旧时不运行默认开启的 lint #16618-Zfine-grain-locking:修复并行锁定 #16659-Zhost-config:host.linker不应应用于非主机单元 #16641-Zjson-target-spec:添加新的-Zjson-target-specflag,以协助 使用自定义.json目标规格文件。 #16557-Zlockfile-path:移除--lockfile-path#16621-Zlockfile-path:在 fix、install 中尊重该配置 #16617-Zscript:相对脚本加载配置 #16620-Zscript:使 lockfile 特定于脚本,独立于 build-dir #16619-Zscript:修正帮助信息的风格 #16580-Zscript:显示其余工作空间行为 #16633-Ztrim-paths:使用已稳定的-Cremap-path-scoperustc flag。 #16536
文档
- 改进关于用构建脚本读取 cfg 值的文档 #16671
- 讨论命令与别名 #16581
- 移除多余的主页链接 #16572
- cargo-report:增强
cargo report *的 man page #16430
内部
- 在
--timings与-Zbuild-analysis之间复用计时指标收集逻辑。 #16497 - 添加在符号链接目标变更时检查指纹的测试 #16661
- 更新 build-std 测试以反映编译器更新。 #16550 #16551 #16559 #16658
- 启用 triagebot 新的
[view-all-comments-link]功能 #16629 - 增加 cache_lock 测试超时 #16545
- cargo-help:为 cargo help 测试做快照 #16626 #16627
- 更新依赖。 #16387 #16538 #16548 #16570 #16578 #16579 #16587 #16589 #16593 #16601 #16613 #16615 #16624
Cargo 1.94.1 (2026-03-26)
修复
- 🚨 CVE-2026-33055 与 CVE-2026-33056: 解压恶意 crate 可更改类 Unix 系统上任意路径的权限。 #16769
- 通过将 libcurl 从 8.17.0 降级到 8.15.0,修复 FreeBSD 上的证书行为。该升级在 1.94.0 中被无意引入。未来,Rust 1.95 预计会更新到 libcurl 8.19.0,届时应能从根本上解决该问题。 #16787
Cargo 1.94 (2026-03-05)
新增
- 🎉 稳定配置项
include键。 顶层include配置键允许加载额外的配置文件, 从而更好地在项目与环境之间组织、共享与管理 Cargo 配置。 docs #16284 - 🎉 稳定 registry 索引中的
pubtime字段。 该字段记录 crate 版本的发布时间,并为将来基于时间的依赖解析提供基础。 注意 crates.io 会在发布新版本时逐步回填现有包。 并非所有 crate 都已有pubtime。 #16369 #16372 - Cargo 现为清单与配置文件解析 TOML v1.1。
注意在
Cargo.toml中使用这些功能会提高你的开发 MSRV, 但已发布的清单仍与较旧解析器兼容。 #16415 - 计时 HTML 报告现有新的 SVG 渲染选项, 可在大型构建中获得更好的渲染性能。 Canvas 渲染仍可用,但将被逐步淘汰。 #15091
CARGO_BIN_EXE_<name>环境变量现不仅在编译时可访问,运行时也可访问。 #16421- perf:优化带多个
--package说明符的cargo clean。 #16264 - perf:优化
cargo locate-project --workspace,在仅需工作空间根路径时 避免完整加载工作空间。 #16423
变更
- 改进 Cargo 构建目标源文件缺失时的错误信息。 #16338
- 使用 rustc 诊断风格改进缺失依赖的错误信息。 #16500
- 在与 patch 相关的错误信息中显示 patch 的定义位置。 #16407
- 当请求的 feature 没有近似匹配时,列出所有可用 feature。 #16445
- 等待文件锁时,在非常详细模式
-vv) 下显示 lockfile 路径。 #16491 - cargo-new:改进包名错误信息的质量。 #16398
修复
- 当
$CARGO_HOME为符号链接目录时,不要重复读取配置文件。 #16325 - cargo-info:未显式指定 registry 时,默认检查本地包。 #16358
- cargo-info:解决 schema 查找中下划线与连字符不匹配的问题。 #16455
- cargo-package:使用
--list时跳过 registry 校验。 #16341 - cargo-package:从工作空间成员目录运行时检测脏文件。 #16479
- cargo-vendor:在子目录中递归过滤
.gitattributes与.gitignores。 此前仅过滤顶层 Git 文件, 导致将 vendored 代码提交到 Git 仓库时校验和失败。 #16439 - cargo-vendor:正确从 local-registry 缓存路径解包。 #16435
仅 Nightly
- 🔥
-Zany-build-script-metadata:允许任意构建脚本发出cargo::metadata=KEY=VALUE, 并通过CARGO_DEP_<name>_<key>环境变量暴露给依赖方。 docs #16436 #16486 #16489 #16494 #16496 timings:移除--timings=<FMT>可选格式值。-Zbuild-analysis日志现为机器可读计时数据的推荐方式。 使用不稳定的cargo report timings生成 HTML 报告。 #16420-Zlockfile-path:添加新的resolver.lockfile-path配置以替代 CLI--lockfile-path选项。--lockfile-pathCLI 选项将在未来版本中移除。 #16510-Zbuild-analysis:新增cargo report rebuilds命令,用于分析 先前会话的重建原因。 #16408 #16456-Zbuild-analysis:新增cargo report sessions命令以列出构建会话 ID。 #16428-Zbuild-analysis:新增用于 HTML 回放的cargo report timings命令。 #16346 #16350 #16352 #16377 #16378 #16382 #16390 #16414 #16441 #16448 #16485 #16490-Zbuild-dir:为构建缓存实现细粒度的单元级锁定。 #16155-Zbuild-dir-new-layout:将构建脚本二进制移到deps目录。 #16515-Zbuild-dir-new-layout:使用新布局时不创建examples目录。 #16514-Zbuild-dir-new-layout:在新布局中从二进制名移除哈希。 #16351-Zbuild-dir-new-layout:对 bin/lib 的 pkg_dirs 使用 unit_id 而非 pkg 哈希。 #16345-Zbuild-dir-new-layout:在新构建布局中包含所有搜索路径。 #16348-Zcargo-lints:添加类似 Clippy 的 lint 分组。 #16464-Zcargo-lints:新增implicit_minimum_version_reqlint。 #16321-Zno-embed-metadata:当该 flag 变更时使整个构建缓存失效。 #16513-Zsbom:为空时不设置CARGO_SBOM_PATH。 #16419
文档
- 澄清
OUT_DIR在构建之间不会被清理。 #16437 - 记录构建脚本中
DEBUG的唯一可能取值。 #16413 - 添加如何将生成文件纳入版本控制的最佳实践。 #16405
- 记录更多 Cargo 团队的服务与权限。 #16402
- FAQ:加入关于磁盘空间的条目。 #16349
内部
- 将 Git 子模块缓存到 Git 数据库,以加快后续 fetch。 #16246
- 修复 Git 部分 OID 被错误地补零。 #16511
- 将部分情况迁移到 expect/reason。 #16461
- 为 libcargo 支持仅内存中的
Manifest#16409 - cargo-test-support:运行测试时使用测试名作为目录。 #16121
- test:使用更大的默认终端宽度。 #16403 #16391
- test:为树外 build-dir 调整输出。 #16343
- test:更新到
proc_macro::tracked::path。 #16380 - test:移除未使用的构建脚本。 #16344
- 更新依赖。 #16379 #16381 #16460 #16457 #16454 #16507
Cargo 1.93 (2026-01-22)
新增
- 根据 profile 设置,在构建脚本中启用
CARGO_CFG_DEBUG_ASSERTIONS环境变量。 #16160 - 添加对 Bash 中补全
--config值的支持 #16245 - cargo-clean:添加
--workspace标志以清理工作空间成员的产物。 #16263 - cargo-tree:支持
--format变量的长形式 #16204
变更
- ❗️ 即使未设置
build.build-dir配置,cargo publish也不再将.crate压缩包 保留为最终构建产物。 #15915 - 将更多诊断格式迁移到类似 rustc 的风格(annotate-snippets 风格) #16143
- 在 Cargo 清单中看到未使用字段时,指出该键属于 Cargo 配置。 #16256
- 更新或创建 lockfile 失败时,提供更清晰的上下文与建议的 用户操作以帮助解决。 #16233 #16227
- 当清单中将 GitHub pull request URL 用作依赖时,发出有帮助的错误信息。 #16207
- 对
check构建避免不必要的产物目录锁定。 #16230 #16299 #16307 #16385 #16386 - 在 CLI 帮助文本中称为命令,而非子命令。 #16226
- cargo-install:Cargo 曾将
install.root中无尾部斜杠的相对路径 视为相对于当前工作目录的路径。此情况 现将收到弃用警告。这是疏忽,将来会改为 像其他配置字段一样相对于配置文件的路径。 #16125 - cargo-package:对不可发布到 crates.io 的包抑制缺失元数据警告 #16241
- cargo-publish:同时指定
package.publish与--index时发出警告 #16268 - cargo-run:在帮助文本中说明如何转义参数以便字面 转发给底层程序 #16225
修复
- Zsh shell 补全变量不再泄漏到用户环境 #16144
- 修复 Cargo 在 Windows 上生成带无效尾部反斜杠的 dep-info 文件。 #16223
- 修复来自
--configCLI 的不可合并列表被环境变量覆盖。 #16220 - 修复来自
--configCLI 的嵌套不可合并列表被与其他配置合并。 #16219 - Cargo 现会在解包
.crate源压缩包后,更新cargo package生成文件的 mtime。 这可确保文件不会有过旧的 mtime,以免某些 zip 工具无法处理。 #16250 - 平移
cargo check产物(.rmeta 文件)的 mtime。 这修复了 rustc 增量编译跳过不必要的 rmeta 生成 却未更新已有 rmeta 文件 mtime 的回归。 #16262 - cargo-doc:仅清理所请求目标的已生成文档目录。 此前当 rustc 版本不匹配时,Cargo 会移除所有已生成的文档 目录,包括不属于本次构建的目标平台。 #16331
- cargo-install:修复 crate 名校验中的越界错误 #16314
- cargo-package:压缩包中生成的文件应有确定性时间戳。 #16242
- cargo-package:通过
CACHEDIR.TAG将target/package目录排除在备份之外。 #16272 - cargo-vendor:修复 Windows 上由
fs::rename回退导致的 panic。 #16214
仅 Nightly
- 🔥
-Zrustc-unicode在 Cargo 的错误信息中启用rustc的 unicode 错误格式。 #16243 - 🔥
-Zrustdoc-mergeable-info利用 rustdoc 的可合并 crate 信息,使cargo doc能合并来自不同输出目录的跨 crate 信息(如搜索索引、源 文件索引),并并行运行rustdoc。 docs #16309 - 🔥
cargo generate-lockfile现有不稳定的--publish-time标志, 包解析将不考虑任何晚于指定时间的包。 在 registry 索引开始包含pubtime字段之前,这还没什么用。 #16265 build-plan:完全移除不稳定功能build-plan。 Cargo 团队期待其他替代方案,如 plumbing 命令、 `–unit-graph、 以及 结构化日志 来填补这一空缺。 #16212native-completions:将 host-tuple 放在实际 tuple 之前 #16327native-completions:在cargo tree --target候选中包含all#16322native-completions:不要用括号包裹补全项帮助 #16215native-completions:为cargo tree添加更多原生补全 #16296native-completions:在各种命令上补全--package#16210update-breaking:对不匹配的包说明符配合 –breaking 时静默失败 #16276-Zbindeps:不将产物依赖传播到 proc macro 或构建依赖 #15788-Zbuild-analysis:使用基于 JSONL 的日志基础设施发出计时信息日志。 日志存储在~/.cargo/log/中,每次 cargo 调用有唯一文件。 #16150 #16179 #16303 #16337-Zbuild-analysis:发出重建原因日志条目。 #16203-Zbuild-build:为 LTO 添加测试 #16277-Zbuild-dir-new-layout:更好地区分旧/新布局 #16304-Zbuild-dir-new-layout:用新布局清理主机构建 #16300-Zbuild-dir-new-layout:在新布局中将 examples 放在其单元目录中 #16335-Zcargo-lints:显示 lint 错误编号 #16320 #16324-Zconfig-include:允许使用optional = true以静默跳过 缺失的配置文件。 #16103 #16174 #16180-Zconfig-include:禁止在include.path中使用 glob 与模板语法 #16285-Zconfig-include:移除单字符串简写支持 #16298-Zgit:为 Git CLI 后端(net.git-fetch-with-cli)支持浅层 fetch #16156-Zgit:添加更多 git fetch-index 后端互操作测试 #16162-Zscript:从 rustc 的测试套件更新脚本测试 #16169 #16334-Zscript:对 workspace-path-hash 回退到非规范路径。 这可确保无法规范化的脚本路径(如memfd) 仍能工作。 #16248-Zwarnings:build.warnings=deny 不应阻塞硬警告 #16213
文档
- 将
compile-time-deps移出已稳定章节 #16211 - 将
DEP_NAME_KEY重命名为DEP_LINKS_KEY,使与package.links字段的关联更清晰 #16205 - 澄清
cargo yank仅影响 Cargo 的依赖解析, 不影响 crate 可用性 #16274 - 在构建性能指南中,建议替代开发 profile 时链接到相关 issue。 #16275
- cargo-metadata:记录
-filter-platform也支持字面量"host-tuple"。 #16312 - contrib:链接到 rustc 诊断风格指南 #16216
- resolver:修复伪代码中的编译错误 #16333
内部
- 使在 NFS 挂载上禁用锁定成为显式行为 #16177
- 将 ConfigValue 与配置 schema 提取到各自独立的模块 #16222 #16195
- 将反序列化校验逻辑嵌入
ProgressConfig#16194 - 分离 Cargo 计时数据收集与展示 #16282
- cargo-util-schemas:为 inheritableField 添加 into_value 工具函数 #16234
- ci:添加 typos/spellcheck CI 任务 #16122
- ci:在更多目标上运行 clippy CI #16340
- mdman:修复 mdman 错误剥离
<p>标签的问题 #16158 #16172 - test:重新启用 Windows 保留名测试,因其已不再 flaky #16287
- test:移除遗留的 tmpdir 支持 #16342
- 更新到 mdbook 0.5。 #16292
- 更新依赖。 #16137 #16140 #16178 #16186 #16190 #16200 #16224 #16316 #16318
Cargo 1.92 (2025-12-11)
新增
变更
- 将部分诊断格式迁移到类似 rustc 的风格(annotate-snippets 风格) #15943 #15945 #16019 #16035 #16066 #16113 #16126
- 来自编译诊断的建议
cargo fix命令现更准确。 #16127 - 截断进度时优先使用 unicode 省略号 #15955
- 消除最后三种 “did you mean” 警告措辞 #15356
- 澄清在
patch中使用features或default-features的警告 #15953 - 配置解析错误现显示带数组索引的更精确键路径 #16004
- 改进
rust-version不兼容诊断的错误信息 #16021 - cargo-add:为工作空间依赖报告缺失源错误 #16063
- cargo-info:建议更通用的
cargo tree命令 #15954 - cargo-publish:将“等待时按 ctrl-c”一行改为帮助信息 #15942
- cargo-publish:软弃用
--token选项 #16046
修复
仅 Nightly
- 🔥
immediate-abort:添加panic=immediate-abort支持 #16041 #16054 -Zbuild-dir-new-layout:重组 build-dir 布局 #15947-Zbuild-std:测试从 panic_immediate_abort 迁出 #16006-Zcargo-lints:添加关于全局使用hint-mostly-unused的 lint #15995-Zpublic-dependency:cargo add在选择版本时现会考虑公共依赖 #15966-Zpublic-dependency:将显示公共依赖的cargo tree从--depth public改为--edges public#16081-Zpublic-dependency:改进 public-in-private 清单错误 #16002 #16075-Zscript:改进 frontmatter 解析错误质量 #15972 #15939 #15952-Zscript:围栏后仅允许水平空白 #15975-Zscript:覆盖 cargo 脚本的 arg0 #16027-Zscript:调整 cargo 脚本的 build-dir / target-dir #16086-Zscript:移除严格必要之外的名称清理(sanitization) #16120-Zscript:将 cargo 脚本 lockfile 存储在 build-dir 中 #16087-Zscript:使用 build-dir 模板定义 cargo 脚本的 target-dir #16073-Zscript:阻止 Cargo 脚本中的非脚本字段 #16026-Zscript:将 bin.name 默认设为 package.name #16064multiple-build-scripts:通过<script-name>_OUT_DIR访问各构建脚本的OUT_DIR#15891native-completions:为--features标志添加补全 #15309native-completions:优先显示本地 crate/feature 而非其他成员 #15956native-completions:允许补全第三方子命令名 #15961
文档
- 🎉 新增「优化构建性能」章节 #15924 #15970 #15991 #16078 #16085 #16107 #16108
- 澄清源替换文档中 git 源与 git registry 的区别 #15974
- 澄清 registry 索引文档中“省略 feature”的含义 #15957
- 澄清 lockfile 在依赖解析中的作用 #15958
- 澄清多重版本需求的行为 #15979
- 澄清支持
target.<cfg>.linker#16112 - 解释 Cargo 配置反序列化内部机制 #16105 #16094
- contrib:将文档构建流程移至贡献者指南 #15854
- SemVer:在 Rust 版本章节中推荐
package.rust-version#15806
内部
- 使 GlobalContext 实现 Sync #15967
- 集中管理 Cargo 控制台输出样式 #16124 #16135
- 将
Layout重构为BuildDirLayout与ArtifactDirLayout#16092 - cargo-test-support:添加 track_caller 以获知实际失败位置 #16069
- cargo-test-support:添加更好的文件系统布局测试工具 #15874
- cargo-util-schemas:迁入 lockfile schema #15980 #15990 #16039
- ci:在 fork 中跳过 check-version-bump ci 任务 #15959
- config:对
ConfigValue进行各种内部清理与重构 #16067 #16084 #16091 #16100 #16109 - perf:以更少分配处理 JSON 消息 #16130
- test:用空终止路径检测 Windows 保留名 #16052
- test:不查找特定 ANSI 颜色 #16118
- test:修复假定
CARGO_CFG_TARGET_FAMILY为单值的测试 #16079 - 更新依赖。 #15988 #15984 #15989 #15992 #15993 #16009 #16031 #16034
Cargo 1.91 (2025-10-30)
新增
- 🎉 稳定
build.build-dir。 该配置设置中间构建产物的存放目录。 这些产物由 Cargo 与 rustc 在构建过程中生成。 最终用户通常无需与之交互,且build-dir内部布局是实现细节,可能在无通知的情况下变更。 (config 文档) (构建缓存文档) #15833 #15840 --target标志与build.target配置现可接受字面量"host-tuple"字符串,内部会替换为主机 机器的目标三元组。 #15838 #16003 #16032
变更
- ❗️ 当设置了
build.build-dir时,cargo publish不再将.crate压缩包 保留为最终构建产物。这些压缩包此前因疏忽被包含, 现视为中间产物。 若要将.crate压缩包作为最终产物,请使用cargo package。 在未来版本中,此变更将不论是否设置build.build-dir均适用。 #15910 - 调整 Cargo 信息以匹配 rustc 诊断风格 #15928
- 对无效的
cargo-features = []给出更有帮助的错误 #15781 - 发出 lint 与警告时不在第一个错误处停止 #15889
- 在错误信息中显示错误的清单路径 #15896
- 对无效的布尔依赖建议工作空间提示 #15507
- cargo-package:打包校验期间始终复用工作空间的 target-dir。 此前 Cargo 会在解包后的源码内创建新的独立目标目录。 #15783
- cargo-publish:为发布失败错误信息添加更多上下文 #15879
修复
仅 Nightly
- 🔥
-Zsection-timings扩展cargo build --timings的输出。它让 rustc 产出各个编译阶段的计时,然后显示在 计时 HTML/JSON 输出中。 (文档) #15780 #15923 - 🔥
-Zbuild-dir-new-layout启用新的 build-dir 文件系统布局, 可为缓存与锁定方面的改进扫清障碍。 (文档) (项目目标) #15848 - 🔥
-Zbuild-analysis跨运行记录并持久化详细构建指标(计时、重建原因等), 并提供查询历史构建的新命令。 (文档) (项目目标) #15845 multiple-build-scripts:按正确顺序访问各构建脚本的OUT_DIR#15776-Zcargo-lints:lint 系统基础设施改进 #15865-Zscript:覆盖一些 frontmatter 边界情况 #15886-Zscript:匹配 rustc 中的测试更新 #15878-Zscript:将 frontmatter 测试改为端到端 #15899-Zscript:对正确行号报告脚本清单错误 #15927-Zscript:抽成独立模块 #15914
文档
- 澄清
cargo doc --no-deps是累积的,不会删除先前结果 #15800 - 在文档与帮助文本中将
--nocapture改为--no-capture。 #15930 - 说明 Cargo 如何获取 git 子模块 #15853 #15860
- 链接到 Plumbing 命令相关工作 #15821
- 改用原生 mdbook 片段重定向 #15861
- 重新排列 profiles 中的
lto选项 #15841 #15855
内部
- 用标准库 flock 替换临时 flock 实现 #15935 #15941
- 为在更多地方生成 annotate-snippets
Report做准备 #15920 #15926 - test:避免硬编码目标规格 json #15880
- test:确保无论是否使用 rustup 行为一致 #15949
- test:将更多凭证进程的预期结果改为快照 #15929
- ci:添加 Arm64 Windows CI 任务 #15790
- ci:从 CI 与测试中移除 x86_64-apple-darwin #15831
- 更新依赖。 #15795 #15804 #15815 #15816 #15819 #15825 #15832 #15851 #15898 #15904 #15909 #15918 #15950
Cargo 1.90 (2025-09-18)
新增
- 🎉 稳定多包发布。
这允许 cargo 在工作空间中发布多个 crate,即使它们
有相互依赖。例如
cargo publish --workspace或cargo publish -p foo -p bar。 注意此时cargo publish仍非原子操作。若发布过程中出现 服务端错误,工作空间会处于部分已发布状态。 #15636 #15711 - 添加用于代理 TLS 证书的
http.proxy-cainfo配置。 docs #15374
变更
- cargo-package:使用
gix将 Git 状态检查加速 10–20%。 #15534 - 使计时图可随用户窗口缩放。 #15766
- 当找不到
name = "foo.rs"的构建目标时报告有效文件名 #15707
修复
- cargo-credential-libsecret:为 FFI 提供正确大小的对象 #15767
- cargo-publish:校验时在错误中包含清单路径 #15705
- cargo-tree:修复
no-proc-macro被后续 edges 覆盖。 #15764
仅 Nightly
- 🔥
multiple-build-scripts:允许在包中拥有多个构建脚本。 docs #15630 #15704 - 🔥
-Zprofile-hint-mostly-unused:在Cargo.toml中添加[hints]表, 以及hints.mostly-unused提示。 docs #15673 -Zfeature-unification:实现按包的 feature 统一 #15684-Zsbom:澄清 SBOM 中的包 ID 规格是完全限定的 #15731
文档
内部
- build-rs:在工具链发布时自动发布 #15708
- cargo-util-schemas:暴露
IndexPackage,即 Registry 索引中包的描述 #15770 - ci:将 cargo-semver-checks 更新到 v0.42.0 #15730
- perf:通过升级 toml 加速 TOML 解析 #15736 #15779
- test:改造
cargo-test-support与testsuite以用CARGO_BIN_EXE_*指向 Cargo #15692 - test:使用不同 lint 模拟诊断重复 #15713 #15717
- test:将配置测试改为使用快照 #15729
- test:从目标规格中移除不必要的 target-c-int-width #15759
- test:将依赖进程间阻塞行为的 cachelock 测试标为 AIX 上不支持。 #15734
- 在 cargo-as-a-library 中暴露产物依赖 getter #15753
- 允许使用带 gix 的 reqwest 后端的 Cargo-as-a-library #15653
- 更新到 Rust 2024 #15732
- 更新依赖。 #15706 #15709 #15722
Cargo 1.89 (2025-08-07)
新增
- 为 SSH known hosts 匹配添加
*与?模式支持。 #15508 - 稳定 doctest-xcompile。交叉编译到与主机不同的目标时,doctest 现会像其他测试一样自动运行。 #15462
变更
- ❗️
cargo fix与cargo clippy --fix现默认仅在默认 Cargo 目标上运行,与cargo check行为一致。若要在所有 Cargo 目标上运行,请使用--all-targets标志。此变更使行为 与其他命令对齐。--edition与--edition-idioms等 edition 标志默认仍隐含--all-targets。 #15192 - 与 registry 通信时,对 HTTP 429 响应尊重
Retry-After头。 #15463 - 改进以
v为前缀的CRATE[@<VER>]参数的错误信息。 #15484 - 改进含无效包名字符的
CRATE[@<VER>]参数的 错误信息。 #15441 - cargo-add:建议名称相近的 feature #15438
修复
- 修复
CacheState::lock中的潜在死锁 #15698 #15699 - 修复
cargo fix中--manifest-path参数被忽略 #15633 - 发布时,不要在未说明后果的情况下让人按 ctrl-c。 #15632
- 在 shell 补全中补上缺失的
--offline。 #15623 - cargo-credential-libsecret:仅加载一次 libsecret #15295
- 无法找到用于重建检测的文件 mtime 时,报告明确原因,而非 “stale; unknown reason”。 #15617
- 修复 cargo add 覆盖符号链接的 Cargo.toml 文件 #15281
- Vendor 带 .rej/.orig 后缀的文件 #15569
- 对 registry 源使用直接解压进行 vendor。这应确保 vendored 文件始终与原始文件匹配。 #15514
- 在网络重试信息中,最后一次重试用单数 “try”。 #15328
仅 Nightly
- 🔥
-Zno-embed-metadata:这让 Cargo 向编译器传递-Zembed-metadata=no标志,指示其不要在 rlib 与 dylib 产物中嵌入元数据。此时元数据仅存储在.rmeta文件中。 (文档) #15378 - 🔥 将 rustc
-Zhint-mostly-unused标志贯通为 profile 选项 (文档) #15643 - 添加 “future” edition #15595
- 添加
-Zfix-edition#15596 - 为
cargo build添加永久不稳定的--compile-time-deps选项 #15674 -Zscript:使 cargo 脚本忽略工作空间。 #15496-Zpackage-workspace:若有版本则保留 dev-dependencies。 #15470- 为
cargo remove <TAB>添加自定义补全器 #15662 - 为
-Zpackage-workspace稳定化准备的测试改进 #15628 - 允许用
-Zpackage-workspace打包自循环 #15626 - 使用 trim-paths 时,将所有路径重映射到
build.build-dir#15614 - 为 windows-msvc 启用更多 trim-paths 测试 #15621
- 通过向 rustdoc-depinfo 跟踪传递
toolchain-shared-resources以获取文档样式,修复文档重建检测 #15605 - 修复
-Zscriptfrontmatter 解析器中的多个 bug #15573 - 移除
-Zscript对 rustc frontmatter 支持的变通方案 #15570 - 允许配置任意 codegen 后端 #15562
- 对
-Zpackage-workspace发布整个工作空间时跳过publish=false的包。 #15525 - 更新使用 native-completions 的说明 #15480
- 对
-Zpackage-workspace在不需要时跳过 registry 检查。 #15629
文档
- 澄清哪些命令需要什么,并移除令人困惑的示例 #15457
- 更新指纹脚注 #15478
- home:更新弃用移除的版本通知 #15511
- docs(contrib):将 clap URL 改为 docs.rs/clap #15682
- 更新贡献文档中的链接 #15659
- docs:澄清并非所有命令都可用
--all-features#15572 - docs(README):修复 Cargo book 中指向更新日志的链接 #15597
内部
- 重构 FeatureResolver::deps 中的产物依赖 #15492
- 为 rustc 调用添加 tracing span #15464
- ci:迁移 renovate 配置 #15501
- ci:要求 schema 任务通过 #15504
- test:移除未使用的 nightly 要求 #15498
- 更新依赖。 #15456
- refactor:在 IndexPackage 中用 Cow 替换 InternedString #15559
- 使用
Not::not而非自定义的is_false函数 #15645 - fix:使 UI 测试一致地处理超链接 #15640
- 更新依赖 #15635 #15557
- refactor:清理
clippy::perflint 警告 #15631 - chore(deps):将 alpine docker 标签更新到 v3.22 #15616
- chore:移除 PR 模板与内联指南中的 HTML 注释 #15613
- 添加 .git-blame-ignore-revs #15612
- refactor:清理
CompileMode#15608 - refactor:将 “global” 模式从 CompileMode 中分离 #15601
- chore:升级 schemars #15602
- 更新 gix 与 socket2 #15600
- chore(toml):除非必要,禁用
toml的默认功能,以缩短 cargo-util-schemas 构建时间 #15598 - chore(gh):添加 new-lint issue 模板 #15575
- 修复 cargo/core/compiler/fingerprint/mod.rs 的注释 #15565
Cargo 1.88 (2025-06-26)
新增
🎉 稳定化全局缓存的自动垃圾回收。
构建时,Cargo 会下载并缓存作为依赖所需的 crate。 历史上,这些下载的文件从不会被清理,导致 Cargo 主目录中的磁盘占用无上限地增长。在本版本中, Cargo 引入了垃圾回收机制,以自动清理旧 文件(例如 .crate 文件)。Cargo 会移除从网络下载、 且超过 3 个月未访问的文件,以及从本地系统获取、 且超过 1 个月未访问的文件。请注意,若以离线方式运行 (使用
--offline或--frozen),则不会执行此自动垃圾回收。Cargo 1.78 及更新版本会跟踪此垃圾回收所需的访问信息。 若你经常使用早于 1.78 的 Cargo 版本, 同时还运行当前版本的 Cargo,并且预期有一些 crate 仅由较旧版本的 Cargo 访问,又不希望 大约每 3 个月重新下载这些 crate,则可能希望在 Cargo 配置中设置
cache.auto-clean-frequency = "never"。 (docs) #14287允许在 Cargo.toml 与配置中将布尔字面量用作 cfg 谓词。 例如,
[target.'cfg(not(false))'.dependencies]是有效的 cfg 谓词。 (RFC 3695) #14649
变更
- 不为
CARGO环境变量规范化可执行文件路径。 #15355 - 将目标和包名称打印为文件超链接格式。 #15405
- 确保
OUT_DIR内的库搜索路径优先于外部路径。 #15221 - 在缺少 feature 时建议外观相似的 feature 名称。 #15454
- 对
.cratetar 包的 gzip(解)压缩使用zlib-rs。 #15417
修复
- build-rs:更正
CARGO_CFG_FEATURE的名称 #15420 - cargo-tree:使输出更确定 #15369
- cargo-package:当脏检查失败时不要使整个命令失败, 因为 git status 检查主要是信息性的。 #15416 #15419
- 修复
cargo rustc --bin在未知 bin 名称上 panic #15515 #15497
仅 Nightly
- 🔥
-Zrustdoc-depinfo:一个新的不稳定标志,利用 rustdoc 的 dep-info 文件来判断文档是否需要重新生成。 (docs) #15359 #15371 build-dir:为 build-dir 模板中未匹配的括号添加校验 #15414build-dir:改进 build-dir 模板变量无效时的错误消息 #15418build-dir:在 cargo metadata 输出中添加build_directory字段 #15377build-dir:为workspace-path-hash添加符号链接解析 #15400build-dir:在 cargo metadata 文档中添加 build_directory #15410unit-graph:切换到 Package ID Spec。 #15447-Zgc:将gc配置表重命名为[cache]。 底层设置现在位于[cache.global-clean]下。 #15367-Zdoctest-xcompile:更新 doctest xcompile 标志。 #15455
文档
内部
- 修复 CliUnstable 解析的格式化 #15434
- ci:恢复 cargo-util 的 semver-checks #15389
- ci:添加 aarch64 linux runner #15077
- rustfix:对快照测试使用
snapbox#15429 - test:防止未声明的公网访问 #15368
- 更新依赖。 #15373 #15381 #15391 #15394 #15403 #15415 #15421 #15446
Cargo 1.87 (2025-05-15)
新增
- 通过
term.progress.term-integration配置字段, 借助 ANSI OSC 9;4 序列加入终端集成。这会将进度 报告给终端模拟器,以便在任务栏等位置显示。 (docs) #14615 - 转发第三方子命令的 bash 补全 #15247
- cargo-tree:为输出着色。 #15242
- cargo-package:添加
--exclude-lockfile标志,若存在 lock 文件则 停止验证它。 #15234
变更
- ❗️ Cargo 现在依赖 OpenSSL v3。这意味着官方 Rust 发行版中的 Cargo 在 32 位平台上将硬依赖 libatomic。 #15232
- 向用户报告
<target>.edition的弃用。 #15321 - 借助 clap 为
--vcs、--color与--message-format标志提供默认值。 #15322 - 在错误消息中提及 “3” 是 “resolver” 字段的有效值 #15215
- 提升 windows Cygwin DLL 导入库 #15193
- 在目标提示消息中也包含包名。 #15199
- cargo-add:折叠大型 feature 列表 #15200
- cargo-vendor:添加哪个 workspace 解析失败的上下文 #15297
修复
- 不将
cargo::rustc-link-arg-cdylib的 cdylib 链接参数传给测试。 #15317 #15326 - 在
cargo metadata中不使用$CARGO_BUILD_TARGET。 #15271 - 允许
term.progress.when具有默认值。即使缺少其他设置,CARGO_TERM_PROGRESS_WIDTH现在也能正确设置。 #15287 - 修复外部子命令的
CARGO环境变量指向错误的 Cargo 二进制路径。请注意,该环境变量 从未设计为通用的 Cargo 包装器。 #15208 - 修复 future-incompat 报告生成的一些问题。 #15345
- 在所有接受
--offline或--locked的地方也尊重--frozen。 #15263 - cargo-package:若脏,也报告 workspace 清单的 VCS 状态。 #15276 #15341
- cargo-publish:修复含格式错误的
{{#options}}块的手册页 #15191 - cargo-run:区分来自不同包但同名的 bin。 #15298
- cargo-rustc:对 crate 类型去重。 #15314
- cargo-vendor:不要移除未缓存的源。 #15260
仅 Nightly
- 🔥 cargo-package:添加不稳定的
--message-format标志。该标志为--list标志的文件列表提供另一种 JSON 输出格式。 (docs) #15311 #15354 - 🔥
build-dir:build.build-dir配置选项用于设置 存放中间构建产物的目录。 中间产物由 Rustc/Cargo 在构建过程中生成。 (docs) #15104 #15236 #15334 - 🔥
-Zsbom:build.sbom配置允许在每个编译产物旁 生成所谓的 SBOM 前驱文件。 (RFC 3553) (docs) #13709 - 🔥
-Zpublic-dependency:为cargo tree新增--depth public值, 以显示公共依赖。 #15243 -Zscript:处理更多 frontmatter 解析边界情况 #15187-Zpackage-workspace:修复对首字母大写的 workspace 成员索引条目的查找 #15216-Zpackage-workspace:在 overlay 中注册 workspace 成员重命名 #15228-Zpackage-workspace:确保可以打包以 ‘.rs’ 结尾的目录 #15240native-completions:为--profile添加补全 #15308native-completions:为别名添加补全 #15319native-completions:为cargo add --path添加补全 #15288native-completions:为--manifest-path添加补全 #15225native-completions:为--lockfile-path添加补全 #15238native-completions:为cargo install --path添加补全 #15266native-completions:为+<toolchain>添加补全 #15301
文档
- 注明 target-edition 已弃用 #15292
- 提及错误 URL 是 git 认证错误的原因之一 #15304
- 将重点转向 resolver v3 #15213
- 自 1.84 起始终包含 Lockfile #15257
- 在示例中从
package.include移除Cargo.toml#15253 - 更清楚地说明
rust_version在编译期间会强制执行 #15303 - 修复参考文档中
[env]relative的描述 #15332 - 在 Cargo Book 中使用构建脚本时,为
extern添加unsafe#15294 - 提及
x.y.*是应避免的一种版本要求形式。 #15310 - contrib:扩展团队会议的描述 #15349
内部
- 通过
CFG_VER_DESCRIPTION环境变量显示来自 bootstrap 的额外构建描述。 #15269 - 用
std::fmt选项控制字节显示精度。 #15246 - 用 jiff 替换 humantime crate。 #15290
- 在 1.86 发布前不检查 cargo-util semver #15222
- Redox OS 属于 unix 家族 #15307
- cargo-tree:抽象 NodeId 概念 #15237
- cargo-tree:抽象边的概念 #15233
- ci:自动更新 cargo-semver-checks #15212
- ci:在 Github 中可视化分组输出 #15218
- manifest:集中化 Cargo 目标描述 #15291
- 更新依赖。 #15250 #15249 #15245 #15224 #15282 #15211 #15217 #15268
Cargo 1.86 (2025-04-03)
新增
变更
- ❗️ 合并时,对引用程序路径及其参数的配置键,
采用替换而非合并。
#15066
这些键包括:registry.credential-providerregistries.*.credential-providertarget.*.runnerhost.runnercredential-alias.*doc.browser
- ❗️ 若同时传入
--package与--workspace但请求的 包缺失,则报错。此前会静默忽略,这被视为 缺陷,因为缺失的包应当被报告。 #15071 - 更新索引缓存失败时添加警告。 #15014
- 错误中不再使用 “did you mean”。直接说明建议是什么。 #15138
- 为依赖源中无效的 SSH URL 提供更好的错误消息。 #15185
- 当包没有给定 feature 时,建议相似的 feature 名称。 #15133
- 找不到 workspace 成员时打印 glob。 #15093
- cargo-fix:使
--allow-dirty隐含--allow-staged#15013 - cargo-login:为准备弃用,在 CLI 帮助中隐藏
token参数。 #15057 - cargo-login:使用不兼容的凭证提供程序时,不要建议
cargo login。 #15124 - cargo-package:通过用 pathspec 匹配特定路径前缀, 改进 VCS 状态检查的性能。 #14997
修复
rerun-if-env-changed构建脚本指令现在能正确检测[env]配置表中的变更。 #14756- 在为不受支持的 crate 类型学习 Rust 目标信息时,强制将警告作为警告发出。 #15036
- cargo-package:当符号链接指向当前包根目录之外的路径时, 验证其 VCS 状态。 #14981
仅 Nightly
- 🔥
-Z feature-unification:此新的不稳定标志启用resolver.feature-unification配置选项,以控制 workspace 中 feature 如何统一。 (RFC 3529) (docs) #15157 - cargo-util-schemas:纠正并更新 JSON Schema #15000
- cargo-util-schemas:修复
[lints]JSON Schema #15035 - cargo-util-schemas:修复 ‘metadata’ JSON Schema #15033
cargo rustc --print:为cargo rustc --print设置 cargo 环境。 #15026-Zbuild-std:将值解析为逗号分隔列表,并将该行为 扩展到build-std-features。 #15065-Zgc:使缓存跟踪对意外文件更具弹性。 #15147-Zscript:合并从清单路径创建 SourceId 的逻辑 #15172-Zscript:将 cargo-script 逻辑集成到主解析器 #15168-Zscript:为 cargo-script 添加cargo pkgid支持 #14961-Zpackage-workspace:报告所有不可发布的包 #15070
文档
- 说明自 1.46 起,Cargo 会自动注册
env!宏中使用的变量以触发重新构建。 #15062 - 将 changelog 移至 The Cargo Book。 #15119 #15123 #15142
- 注明
package.authors已弃用。 #15068 - 修复 Package Id Specification 的错误语法。 #15049
- 修复关于 MSRV 的倒置逻辑 #15044
- cargo-metadata:修复
"root"字段的描述。 #15182 - cargo-package:注明始终包含 lock 文件。 #15067
- contrib:开始 schema 设计指南。 #15037
内部
- 在 Solaris 上不使用
libc::LOCK_*。 #15143 - 清理 field → env var 处理。 #15008
- 简化 SourceID Ord/Eq。 #14980 #15103
- 为 SourceKind 添加手动 Hash 实现并记录原因。 #15029
- ci:在 CI 中允许 Windows 保留名 #15135
- cargo-test-macro:移除对
RUSTUP_WINDOWS_PATH_ADD_BIN的条件 #15017 - resolver:简化 backtrack #15150
- resolver:小清理 #15040
- test:清理浅获取测试 #15002
- test:修复 macOS 上的
https::self_signed_should_fail#15016 - test:修复较新 git 版本下的 benchsuite 问题 #15069
- test:修复 Windows 上运行的 shared_std_dependency_rebuild #15111
- test:更新测试以修复 nightly 错误 #15110
- test:移除未使用的
-C link-arg=-fuse-ld=lld#15097 - test:使用
LazyLock移除unsafe#15096 - test:移除不必要的 into 转换 #15042
- test:修复 panic_abort_tests 中的竞态条件 #15169
- 更新 deny.toml #15164
- 更新依赖。 #14995 #14996 #14998 #15012 #15018 #15041 #15050 #15121 #15128 #15129 #15162 #15163 #15165 #15166
Cargo 1.85 (2025-02-20)
新增
- 🎉 Cargo 现在支持 2024 edition。 更多信息见 edition guide。 #14828
- cargo-tree:
--depth标志现在接受workspace, 仅显示属于当前 workspace 成员的依赖。 #14928 - 构建脚本现在会收到新的环境变量
CARGO_CFG_FEATURE, 其中包含正在构建的包的每个已激活 feature。 #14902 - perf:由于对
ActivationsKey使用了更高效的哈希,依赖解析现在更快 #14915
变更
- ❗️ cargo-rustc:尾随标志现在具有更高优先级。 该行为自 1.83 起仅在 nightly 可用,现已稳定。 #14900
- ❗️ Cargo 现在使用来自
rustc-stable-hash的跨平台哈希算法。 因此,依赖缓存路径中的哈希部分 (例如$CARGO_HOME/registry/index/index.crates.io-<hash>)将改变。 这将触发 registry 索引与.cratetar 包的重新下载, 以及 Git 依赖的重新克隆。 #14917 - 为 Cargo.toml 与 Cargo 配置中
cfg里的关键字添加 future-incompatibility 警告。像cfg(true)与cfg(false)这类 带关键字的cfg曾被错误接受。为保持向后兼容,已引入对原始 标识符的支持;例如,请改用cfg(r#true)。 #14671 - 依赖解析现在提供更丰富的错误消息,解释为何某些版本被拒绝、未匹配或无效。
#14897 #14921 #14923 #14927 - cargo-doc:改进在未生成文档时
--open打开文档的错误消息。 #14969 - cargo-package:若符号链接被检出为纯文本文件则警告 #14994
- cargo-package:显示相对于 Git 工作目录的脏文件路径。 #14968 #14970
修复
- 设置
GIT_DIR以确保在net.git-fetch-with-cli=true时 与裸仓库兼容。 #14860 - 修复修改 workspace Cargo.toml 未使构建缓存失效。 #14973
- 防止更改
RUSTFLAGS后丢弃构建缓存。 #14830 #14898 - cargo-add:规范化名称时不选择已 yank 的版本。 #14895
- cargo-fix:对虚拟清单也将 workspace 依赖迁移到 2024 edition。 #14890
- cargo-package:当
package.readme与package.license-file指向当前包根目录之外的路径时,验证其 VCS 状态。 #14966 - cargo-package:确保可能阻塞的非文件(如 FIFO)不会 被拾取用于发布。 #14977
仅 Nightly
path-bases:在虚拟清单的[patch]中支持 bases #14931unit-graph:使用已配置的 shell 打印输出。 #14926-Zbuild-std:通过探测目标规范 JSON 中的metadata.std字段, 检查构建目标是否支持std。 #14183 #14938 #14899-Zbuild-std:测试 proc-macro 时始终链接到 std。 #14850 #14861-Zbuild-std:清理 build-std 测试 #14943 #14933 #14896-Zbuild-std:对 std workspace 哈希相对路径而非绝对路径。 #14951-Zpackage-workspace:允许未 bump 的 workspace 进行 dry-run。 #14847-Zscript:允许从 cargo script 添加/移除依赖 #14857-Zscript:跨 edition 迁移 cargo script 清单 #14864-Zscript:不要覆盖 release profile。 #14925-Ztrim-paths:使用Path::push构造remap-path-prefix标志。 #14908
文档
- 澄清如何选择
cargo::metadata环境变量。 #14842 - cargo-info:从
cargo-info文档中移除对默认 registry 的引用 #14880 - contrib:为 Rustup Cargo 变通方案补充缺失参数 #14954
- SemVer:添加关于 RPIT 捕获的章节 #14849
内部
- 在编译器变更之前,将
testcfg 添加为已知 cfg。 #14963 - 启用 triagebot 合并冲突通知 #14972
- 将发布触发限制为
0.*标签 #14940 - 简化
SourceIDHash。 #14800 - build-rs:访问 Cargo 为构建脚本执行设置的环境变量时,
自动发出
rerun-if-env-changed。 #14911 - build-rs:在 assert 中正确引用该项 #14913
- build-rs:添加 ’error’ 指令 #14910
- build-rs:移除无意义的 ‘cargo_cfg_debug_assertions’ #14901
- cargo-package:将
cargo_package拆分为模块 #14959 #14982 - cargo-test-support:
requires属性接受 cmds 的字符串字面量 #14875 - cargo-test-support:从 ’exec_with_output’ 切换到 ‘run’ #14848
- cargo-test-support:跟踪
.crate文件发布验证的调用者 #14992 - test:直接验证
-Cmetadata,而非通过-Cextra-filename#14846 - test:确保 PGO 可用 #14859 #14874 #14887
- 更新依赖。 #14867 #14871 #14878 #14879 #14975
Cargo 1.84 (2025-01-09)
新增
- 🎉 稳定化 resolver v3,亦即感知 MSRV 的依赖解析器。
稳定化包括 Cargo.toml 中的
package.resolver = "3", 以及 Cargo 配置中的[resolver]表。 (RFC 3537) (manifest docs) (config docs) #14639 #14662 #14711 #14725 #14748 #14753 #14754 - 新增构建脚本调用
cargo::error=MESSAGE以报告错误消息。 (docs) #14743
变更
- ❗️ cargo-publish:发布的 crate 中始终包含 Cargo.lock。
原先仅对带有可执行文件或示例、
以便与
cargo install一起使用的包包含。 #14815 - 依赖解析器性能改进,包括共享缓存、 减少迭代开销,以及移除冗余的获取与克隆。 #14663 #14690 #14692 #14694
- 弃用
cargo verify-project。 #14736 - 依赖解析期间找不到匹配包时,添加源替换信息。 #14715
- 发现
[patch.crates.io]时提示使用crates-io。 #14700 - 规范化 Cargo 目标的源路径以获得更好的诊断。 #14497 #14750
- 允许 registry 在索引元数据 JSON 中省略空/默认字段。 出于向后兼容,crates.io 继续发出它们。 #14838 #14839
- cargo-doc:在额外详细模式下显示环境变量。 #14812
- cargo-fix:替换仅插入式重复替换的特例处理。 #14765 #14782
- cargo-remove:找不到依赖时,尝试建议名称相似的 其他依赖。 #14818
- git:对 Git 依赖的全新检出跳过不必要的子模块校验。 #14605
- git:增强获取 Git 依赖时找不到 refspec 的错误消息。 #14806
- git:当
net.git-fetch-with-cli = true时,默认向 git CLI 传递--no-tags。 #14688
修复
- 修复旧版 Cargo 无法读取构建缓存中较新格式的 dep-info。 #14751 #14745
- 修复重建检测不尊重
[env]表中的变更。 #14701 #14730 - cargo-fix:为
rustfix添加事务语义,以便在多个建议 包含重叠 span 时保持代码修复处于有效状态。 #14747
仅 Nightly
- 已移除不稳定环境变量
CARGO_RUSTC_CURRENT_DIR。 #14799 - 🔥 Cargo 现在在源代码中包含用于
Cargo.toml的实验性 JSON Schema 文件。 它帮助外部工具验证或自动补全清单的 schema。 (manifest.schema.json) #14683 - 🔥
Zroot-dir:新的不稳定-Zroot-dir标志,用于配置 应从哪个路径调用 rustc。 (docs) #14752 - 🔥
-Zwarnings:新的不稳定功能,通过build.warnings配置字段 控制 Cargo 如何处理警告。 (docs) #14388 #14827 #14836 edition2024:验证 2024 edition / resolver=3 不影响解析 #14724native-completions:在 zsh 中包含描述 #14726-Zbindeps:修复对带有交叉编译 bindep 的包运行 cargo tree 时的 panic #14593-Zbindeps:按 artifact 依赖的目标平台下载其有针对性的传递依赖 #14723-Zbuild-std:移除对--target的要求。 #14317-Zpackage-workspace:在cargo publish中支持包选择选项, 例如--exclude#14659-Zscript:移除对接受Cargo.toml的支持。 #14670-Zscript:更改配置路径,仅检查CARGO_HOME#14749-Zscript:按 RFC 3503 更新 frontmatter 解析器。 #14792
文档
- 澄清
--tests与--benches标志的含义。 #14675 - 澄清工具应仅将以
{开头的行解释为 JSON。 #14677 - 澄清
cargo package包含与不包含的内容 #14684 - 记录官方外部命令:
cargo-clippy、cargo-fmt与cargo-miri。 #14669 #14805 - 增强环境变量文档 #14676
- 简化文档中使用的英语。 #14825 #14829
- 新增关于已弃用与已移除命令的文档页。 #14739
- cargo-test-support:根据移植工作量文档化
Execs断言 #14793
内部
- 🎉 将
build-rscrate 迁移到rust-lang/cargo仓库,作为 Cargo 团队的有意产物。 #14786 #14817 - 在 triagebot 中启用 transfer 功能 #14777
- 在需要时对 InternedString 写时复制 #14808
- ci:将 CI 从 bors 切换到 merge queue #14718
- ci:使
lint-docs作业成为必需 #14797 - ci:检查 clippy
correctness#14796 - ci:对 renovate 将 matchPackageNames 切换为 matchDepNames #14704
- fingerprint:跟踪每次使用
UnitHash的意图 #14826 - fingerprint:为
rustc_fingerprint添加更多元数据。 #14761 - test:将其余快照迁移到 snapbox #14642 #14760 #14781 #14785 #14790
- 更新依赖。 #14668 #14705 #14762 #14766 #14772
Cargo 1.83 (2024-11-28)
新增
--timingsHTML 输出现在可根据浏览器偏好 在浅色与深色配色方案之间自动切换。 #14588- 引入新的
CARGO_MANIFEST_PATH环境变量, 类似于CARGO_MANIFEST_DIR,但直接指向清单文件。 #14404 - manifest:添加
package.autolib,允许禁用[lib]自动发现。 #14591
变更
- ❗️ Lockfile 格式 v4 现在是创建/更新 lockfile 的默认格式。
Rust 工具链 1.78+ 支持 lockfile v4。
为与更早的 MSRV 兼容,
可考虑将
package.rust-version设为 1.82 或更早。 #14595 - ❗️ cargo-package:使用
--package标志时,仅打包指定的 包。此前,当前工作目录中的包会自动被选中打包。 #14488 - cargo-publish:若包版本已发布则立即失败。 #14448
- 改进缺少 feature 时的错误消息。 #14436
- 若未见错误,则记录
rustc调用失败的详细信息 #14453 - 提升
windows-gnullvm导入库,使其与windows-gnu对齐。 #14451 - 在
cargo search结果中建议cargo info命令 #14537 - 增强依赖更新状态消息,现在以不同颜色显示更新 (compatible、incompatible、direct-dep), 以及消息与 MSRV。 #14440 #14457 #14459 #14461 #14471 #14568
Locking状态消息不再显示 workspace 成员。 #14445
修复
- 防止递归调用
cargo时重复的库搜索环境变量。 #14464 - 不要对
$CARGO_HOME/config缺少.toml扩展名双重警告。 #14579 - 使用
--message-format json时更正诊断计数消息。 #14598 - cargo-add:翻译包名时执行模糊搜索 #13765
- cargo-new:仅相对于清单自动将新包加入 workspace, 而非相对于当前目录。 #14505
- cargo-rustc:修复
--crate-type标志中逗号分隔值的解析。 #14499 - cargo-vendor:仅在 crate 版本来自 registry 时信任该版本。 这会导致即使未更改,git 依赖也会被重新 vendor。 #14530
- cargo-publish:在 dry-run 上将 version-exists 错误降级为警告 #14742 #14744
仅 Nightly
- ❗️ cargo-rustc:在 nightly 上让尾随标志具有更高优先级。
该 nightly gate 将在几个版本后移除。
若破坏任何工作流,请反馈。
提供临时环境变量
__CARGO_RUSTC_ORIG_ARGS_PRIO=1以选择退出该行为。 #14587 - 🔥 cargo-install:新的
--dry-run标志,不实际安装二进制文件。 #14280 - 🔥
native-completions:将手写 shell 补全脚本迁移到 Rust 原生实现,便于我们添加、扩展与测试新补全。 (docs) #14493 #14531 #14532 #14533 #14534 #14535 #14536 #14546 #14547 #14548 #14552 #14557 #14558 #14563 #14564 #14573 #14590 #14592 #14653 #14656 - 🔥
-Zchecksum-freshness:用文件校验和算法替换 cargo 重建检测中 对文件 mtime 的使用。这在 mtime 实现较差的系统上, 或在 CI/CD 中最为有用。 (docs) #14137 - cargo-update:添加
matches_prerelease语义 #14305 build-plan:将其记录为已弃用。 #14657edition2024:从 2024 edition 中移除隐式 feature 移除。 #14630lockfile-path:在cargo install上隐含--locked。 #14556open-namespaces:允许在PackageIdSpec中使用开放命名空间 #14467path-bases:cargo [add|remove|update]支持 #14427-Zmsrv-policy:按其中最多数量的 MSRV 确定 workspace 的 MSRV。 #14569-Zpackage-workspace:允许在 workspace 中发布多个 crate, 即使它们有相互依赖。 (docs) #14433 #14496-Zpublic-dependency:在cargo metadata中包含公共/私有依赖状态 #14504-Zpublic-dependency:不要求 bump MSRV #14507
文档
- 🎉 新增关于
package.rust-version(亦即 MSRV)的用途、支持预期与管理的 章节。 (docs) #14619 #14636 - 澄清
target.'cfg(...)'不尊重构建脚本中的 cfg #14312 - 澄清
[[bin]]目标自动发现可以是src/main.rs和/或在src/bin/中 #14515 - 消除 feature resolver v2 文档中 ’target’ 一词用法的歧义。 #14540
- 使
--config <PATH>更突出 #14631 - 对页面做小幅重新分组。 #14620
- contrib:更新关于如何发布 cargo 的文档 #14539
- contrib:在 Cargo 章程 / crate 文档中声明每个 crate 的支持级别 #14600
- contrib:将新的 Intentional Artifacts 声明为 ‘small’ 变更 #14599
内部
- 清理重复的 check-cfg lint 逻辑 #14567
- 修复因 nightly rustc 变更导致的省略生命周期 #14487
- 改进在
activated_features中找不到 feature 时的错误报告。 #14647 - cargo-info:使用
shell.note打印 note #14554 - ci:提升 CI 工具 #14503 #14628
- perf:在可能时对编译器消息进行零拷贝反序列化 #14608
- resolver:添加更多 SAT resolver 测试 #14583 #14614
- test:将更多测试迁移到 snapbox #14576 #14577
- 更新依赖。 #14475 #14478 #14489 #14607 #14624 #14632
Cargo 1.82 (2024-10-17)
新增
变更
- ❗️ Doctest 通过向 rustdoc 调用传递
--color来尊重 Cargo 的颜色选项。 #14425 - 改进 Cargo.toml 中同时缺少
[package]与[workspace]时的错误消息。 #14261 - 为错误消息枚举
profile.*.debug的所有可能值。 #14413
修复
- 使用完整形式的 gitoxide path-spec 模式。此前实现使用
简写 pathspec,在某些情况下会产生无效语法,例如当
清单文件路径包含前导
_下划线时 #14380 - cargo-package:修复在裸提交 git 仓库上的失败。 #14359
- cargo-publish:不要从发送到 registry 的 HTTP JSON 正文中, 剥离已重命名依赖的非 dev feature。 该缺陷仅影响第三方 registry。 #14325 #14327
- cargo-vendor:vendor 时不要复制被排除的 Cargo 目标的源文件。 #14367
仅 Nightly
- 🔥
lockfile-path:添加--lockfile-path标志,允许指定 非默认路径<workspace_root>/Cargo.lock的 lockfile 路径。 (docs) #14326 #14417 #14423 #14424 - 🔥
path-bases:在 Cargo 配置文件中引入路径 “bases” 表, 可用于为路径依赖与 patch 条目的路径加前缀。 (RFC 3529) (docs) #14360 - 🔥
-Zpackage-workspace:增强 workspace 中 crate 有依赖时cargo package --workspace的体验。 workspace 中的 crate 不再需要发布到实际 registry。 这是迈向支持cargo publish --workspace的一步。 #13947 #14408 #14340 - cargo-update:将预发布匹配语义限制为仅用于
OptVersionReq::Req#14412 edition2024:还原 “fix: Ensure dep/feature activates the dependency on 2024”。 #14295update-breaking:改进update --breaking含无效 spec 时的错误消息 #14279update-breaking:使用--breaking更新时,不要因预发布VersionReq而降级 #14250-Zbuild-std:移除创建虚拟 std workspace 的 hack #14358 #14370-Zmsrv-policy:调整 MSRV 解析配置字段名/值。 此前的占位符resolver.something-like-precedence现已重命名为resolver.incompatible-rust-versions。 #14296-Zmsrv-policy::在选择不兼容 rust-version 的包时报告 #14401-Ztarget-applies-to-host:修复在使用 target-applies-to-host 与隐式目标时 links-overrides 的传递 #14205-Ztarget-applies-to-host:-Cmetadata包含额外 rustflags 是否与 host 相同 #14432-Ztrim-paths:rustdoc 支持用于诊断的 trim-paths #14389
文档
- 将
Workspace的注释转换为文档注释。 #14397 - 修复
workspace.package与workspace.dependencies的 MSRV 指示。 #14400 - FAQ:移除过时的 Cargo 离线用法章节。 #14336
内部
- 增强
cargo-test-support的可用性与文档。 #14266 #14268 #14269 #14270 #14272 - 通过使用 Arc 而非 Rc 使 summary 同步 #14260
- 使用
Rc而非Arc存储 rustflags #14273 - 移除对
--check-cfg支持的 rustc 探测 #14302 - 将所有与清单规范化相关的项从 ‘resolved’ 重命名为 ’normalized’。 #14342
- cargo-util-schemas:添加
TomlPackage::new、TomlWorkspace的Default#14271 - ci:将 macos aarch64 切换到 nightly #14382
- mdman:渲染选项时规范化换行 #14428
- perf:在无操作的
source_id::with*中不调用 wrap #14318 - test:将更多测试迁移到 snapbox #14242 #14244 #14293 #14297 #14319 #14402 #14410
- test:不依赖缺少
RUST_BACKTRACE#14441 - test:在 AIX 上使用 gmake #14323
- 更新到
gix0.64.0 #14332 - 更新到
rusqlite0.32.0 #14334 - 更新到
windows-sys0.59 #14335 - 更新依赖。 #14299 #14303 #14324 #14329 #14331 #14391
Cargo 1.81 (2024-09-05)
新增
变更
- ❗️ cargo-package:打包期间禁止
package.license-file与package.readme指向 不存在的文件。 #13921 - ❗️ cargo-package:始终包含生成的
.cargo_vcs_info.json, 即使传入了--allow-dirty。 #13960 - ❗️ 禁止将
--release/--debug标志与--profile标志同时使用。 #13971 - ❗️ 移除 Cargo.toml 中对
lib.plugin键的支持。 Rust 插件支持已弃用四年,并在 1.75.0 中移除。 #13902 #14038 - 使 rustc 的
-Cmetadata计算在各平台上保持一致。 #14107 - 即使未设置 MSRV,在未设置
edition时也发出警告。 #14110
修复
- 修复来自依赖的 proc-macro 示例影响 feature 解析。 #13892
- 不要因使用 ‘..’ 而对重复包发出警告。 #14234
- 不要在每次加载 git 源时执行
du。 #14252 - 不要对未引用的重复包发出警告 #14239
- cargo-publish:不要从发送到 registry 的 HTTP JSON 正文中, 剥离已重命名依赖的非 dev feature。 该缺陷仅影响第三方 registry。 #14328
- cargo-vendor:vendor 时不要复制被排除的 Cargo 目标的源文件。 #14368
仅 Nightly
- 🔥
update-breaking:为cargo update添加--breaking, 允许将依赖升级到破坏性版本。 docs #13979 #14047 #14049 --artifact-dir:将--out-dir重命名为--artifact-dir。 保留--out-dir标志以保持兼容, 并可能在该功能稳定后移除。 #13809edition2024:确保未使用的可选依赖对遮蔽依赖也会触发。 #14028edition2024:解决隐式 → 显式 feature 迁移的问题 #14018-Zcargo-lints:将unknown_lints添加到 lints 列表。 #14024-Zcargo-lints:添加用于文档化 lints 的工具。 #14025-Zcargo-lints:保持 lints 更新并已排序。 #14030-Zconfig-include:允许在配置中启用config-include功能。 #14196-Zpublic-dependency:从解析器中移除一些遗留的公共依赖代码 #14090-Ztarget-applies-to-host:使用 target-applies-to-host 时,将 rustflags 传给以隐式目标构建的产物 #13900 #14201- cargo-update:跟踪
--precise <prerelease>的行为。 #14013
文档
- 澄清
CARGO_CFG_TARGET_FAMILY是多值的。 #14165 - 记录
CARGO_CFG_TARGET_ABI#14164 - 为每个清单字段与构建脚本调用记录 MSRV。 #14224
- 移除重复的
strip章节。 #14146 - 更新 Cargo 配置摘要以包含缺失的键。 #14145
- 更新 Cargo 文档索引。 #14228
- 不要提及不存在的
workspace.badges字段。 #14042 - contrib:建议使用带独立测试提交的原子提交。 #14014
- contrib:记录如何为 Cargo 撰写 RFC。 #14222
- contrib:改进分流说明 #14052
内部
- cargo-package:更改打包期间的验证顺序。 #14074
- ci:添加自动发布 Cargo 的工作流 #14202
- ci:提升 CI 工具 #14062 #14257
- registry:添加本地 registry overlay。 #13926
- registry:将
get_source_id移出 registry #14218 - resolver:简化依赖环检查 #14089
- rustfix:添加
CodeFix::apply_solution并实现Clone#14092 - source:清理
PathSource/RecursivePathSource拆分之后的内容 #14169 #14231 - 移除临时的
__CARGO_GITOXIDE_DISABLE_LIST_FILES环境变量。 #14036 - 简化 feature 语法检查 #14106
- 不要在热路径中新建常量
InternedString#14211 - 使用
std::fs::absolute而非重新实现它 #14075 - 从 cargo 中移除不必要的 feature 激活。 #14122 #14160
- 还原 #13630,因为 rustc 在 MSVC 上忽略
-C strip。 #14061 - test:在
user_specific_cfgs测试中允许unexpected_builtin_cfgslint #14153 - test:将 cargo_test 添加到 test-support prelude #14243
- test:将 Cargo 测试套件迁移到
snapbox。 完整的迁移拉取请求列表见 #14039 - 更新到
gix0.64.0 #14431 - 更新依赖。 #13995 #13998 #14037 #14063 #14067 #14174 #14186 #14254
Cargo 1.80 (2024-07-25)
新增
🎉 稳定化
-Zcheck-cfg!这默认启用 rustc 在编译时对 条件编译的检查,验证 crate 是否正确 处理不同目标平台或 feature 的条件编译。在内部,cargo 会向所有 rustc 与 rustdoc 调用传递新的命令行选项--check-cfg。随此次稳定化新增构建脚本调用
cargo::rustc-check-cfg=CHECK_CFG, 作为向预期的 cfg 名称与值列表添加自定义 cfg 的方式。若你的包无法使用构建脚本,Cargo 提供配置
[lints.rust.unexpected_cfgs.check-cfg]以静态添加已知的自定义 cfg。(RFC 3013) (docs) #13571 #13865 #13869 #13884 #13913 #13937 #13958
🎉 cargo-update:允许
--precise指定已 yank 的包版本, 并会相应更新 lockfile。 #13974
变更
- ❗️ manifest:禁止
[badges]从[workspace.package.badges]继承。 这被视为缺陷。 请注意[badges]实际上已弃用。 #13788 - build-script:根据 MSRV 建议旧语法。 #13874
- cargo-add:通过使用字符串字面量避免转义双引号。 #14006
- cargo-clean:通过
-p标志清理特定包的性能改进。 #13818 - cargo-new:在库模板中使用
i32而非usize作为“默认整数”。 #13939 - cargo-package:打包期间若排除 Cargo 目标则警告而非失败。 #13713
- manifest:对
[lints]表中不支持的 lint 工具警告而非报错。 #13833 - perf:在已知 Cargo 目标时避免推断。 #13849
- 从 Rust 的源码 tar 包构建 Cargo 时填充 git 信息。 #13832
- 改进从部分环境变量反序列化 Cargo 配置时的错误消息。 #13956
修复
- resolver:使同名的路径依赖保持锁定。 #13572
- cargo-add:在 Unix 上的
write_atomic期间保留文件权限。 #13898 - cargo-clean:在 Windows 上移除符号链接目录。 #13910
- cargo-fix:不要修复进标准库。 #13792
- cargo-fix:支持仅 IPv6 的网络。 #13907
- cargo-new:当根目录是普通包时,不要说正在加入 workspace。 #13987
- cargo-vendor:对忘记 vendor 的警告保持静默。 #13886
- cargo-publish/cargo-vendor:确保生成的 Cargo.toml 中的目标顺序确定。 #13989 #14004
- cargo-credential-libsecret:按其
SONAMElibsecret-1.so.0加载libsecret。 #13927 - 别名不包含子命令时不要 panic。 #13819
- 规避 macOS 上 ZFS 复制文件返回 EAGAIN。 #13845
- 即使 GitHub 快速路径失败,也获取特定提交。 #13946 #13969
- 区分共享相同前缀但来自不同环境变量的 Cargo 配置。 #14000
仅 Nightly
-Zcargo-lints:不要总是继承 workspace lints。 #13812-Zcargo-lints:添加测试以确保 cap-lints 可用。 #13829-Zcargo-lints:指定了不稳定 lints 但未启用时报错。 #13805-Zcargo-lints:将 cargo-lints 添加到不稳定文档。 #13881-Zcargo-lints:重构 cargo lint 测试。 #13880-Zcargo-lints:移除在 lint 名称中指定-的能力。 #13837-Zscript:移除 cargo script 中被拒绝的不稳定 frontmatter 语法。 现在唯一允许的 frontmatter 语法是---。 #13861 #13893-Zbindeps:当有多种类型可用时,仅构建指定的 artifact 库。 #13842-Zmsrv-policy:将未设置的 MSRV 视为兼容。 #13791-Zgit/-Zgitoxide:默认配置从环境变量与 Cargo 配置两者获取。 #13687-Zpublic-dependency:继承依赖时不要丢失 ‘public’。 #13836edition2024:继承时禁止被忽略的default-features。 #13839edition2024:像其他 Cargo 目标一样校验 bin 的 crate-types/proc-macro。 #13841
文档
- cargo-package:澄清不保证 VCS 出处。 #13984
- cargo-metadata:澄清 Cargo 目标名称中的破折号替换规则。 #13887
- config:修复构建脚本覆盖中
rustc-flags的错误类型。 #13957 - resolver:为
resolver-tests添加 README。 #13977 - contrib:更新贡献者指南中的 UI 示例代码。 #13864
- 修复 libcurl 代理文档链接。 #13990
- 为插件补充缺失的
CARGO_MAKEFLAGS环境变量。 #13872 - 在持续集成章节中包含 CircleCI 参考。 #13850
内部
- ci:不要对照 beta 通道检查
cargo。 #13827 - test:在 apache 容器中为 git 仓库设置 safe.directory。 #13920
- test:对运行嵌入式单元测试的警告保持静默。 #13929
- test:因 nightly rustc 变更更新测试格式。 #13890 #13901 #13964
- test:使
git::use_the_cli测试真正与 locale 无关。 #13935 - cargo-test-support:将直接断言从 cargo-test-support 过渡到 snapbox。 #13980
- cargo-test-support:自动遮盖经过时间。 #13973
- cargo-test-support:清理不必要的
match_exact使用。 #13879 - 从
PathSource拆分出RecursivePathSource。 #13993 - 因 libgit2 1.8 变更调整来自 cert-check 的自定义错误。 #13970
- 将诊断打印移至 Shell。 #13813
- 更新依赖。 #13834 #13840 #13948 #13963 #13976
Cargo 1.79 (2024-06-13)
新增
- 🎉
cargo add在添加新依赖时尊重package.rust-version(亦即 MSRV)。 可通过指定版本要求,或传入--ignore-rust-version标志覆盖该行为。 (RFC 3537) #13608 - 新的
Locking状态消息在任意命令上显示依赖变更。 对cargo update,还会告知是否有任何依赖版本过时。 #13561 #13647 #13651 #13657 #13759 #13764
变更
- ❗️
RUSTC_WRAPPER、RUSTC_WORKSPACE_WRAPPER以及[env]表中的变量,现在也应用于 Cargo 用于探测 rustc 信息的 初始rustc -vV调用。 #13659 - ❗️ 将形如
foo = { optional = true }、相当于version="*"的依赖 从警告变为错误。 该行为从一开始就被视为缺陷。 #13775 - ❗️ 若从
package.name推断lib.name,也将破折号替换为下划线。 此变更与文档行为对齐。需要注意的是,Cargo 发出的 JSON 消息, 例如通过cargo metadata或--message-format=json, 将开始报告带下划线的 lib 名称。 #12783 - 改用
gitoxide列出文件。这改进了构建脚本与cargo doc计算缓存新鲜度的性能, 并修复了cargo publish的一些细微缺陷。 #13592 #13696 #13704 #13777 - 对传入且不再必要的
-Zlints发出警告。 #13632 - 对虚拟 workspace 上未使用的
workspace.dependencies键发出警告。 #13664 - 仅在 msrv 不兼容时发出 1.77 构建脚本语法错误。 #13808
- 不对
lints.rust.unexpected_cfgs.check-cfg发出警告。 #13925 - cargo-init:若值可推断,则不在 Cargo.toml 中赋值
target.name。 #13606 - cargo-package:规范化
Cargo.toml中的路径,包括将\替换为/。 #13729 - cargo-test:将 cargo test 的
--doc标志重新归类到“目标选择”下。 #13756
修复
- 确保尊重
--config net.git-fetch-with-cli=true。 #13992 #13997 - 解析空别名时不要 panic。 #13613
- 使用
--target时,默认的 debuginfo strip 规则也同样适用。 请注意,在 Windows MSVC 上 Cargo 默认不再 strip。 #13618 - 不要在指向多字节字符的 Cargo.toml 解析错误上崩溃 #13780
- 若
.cargo/{config,config.toml}之一是指向另一个的符号链接, 则不要发出弃用警告。 #13793 - 检查 GitHub 上仓库是否最新时跟随 HTTP 重定向。 #13718
- 在
nounset模式下的 Bash 补全回退。 #13686 - 当 rustflags 变更且传入了
--target时重新运行构建脚本。 #13560 - 修复推断名称中带破折号的 lib/bin 的文档冲突。 #13640
- cargo-add:保持依赖 feature 的排序。 #13682
- cargo-add:更新简单依赖时保留注释 #13655
- cargo-fix:不要应用同一建议两次。 #13728
- cargo-package:通过
--package指定的包找不到时报错 #13735 - credential-provider:修剪来自 stdin 的 token 中的换行。 #13770
仅 Nightly
- 🔥 cargo-update:允许
--precise指定包的预发布版本 (RFC 3493) (docs) #13626 - RFC 3491:未使用依赖清理 #13778
-Zcargo-lints:为 Cargo 添加基本 lint 系统。 仍在开发中,尚不可供一般使用。 #13621 #13635 #13797 #13740 #13801 #13852 #13853- 🔥
edition2024:为 resolver v3(感知 MSRV 的解析器)添加默认 Edition2024。 #13785 edition2024:在 2024 中移除下划线字段支持。 #13783 #13798 #13800 #13804edition2024:在 Edition 2024 中对[project]报错 #13747-Zmsrv-policy:尊重 ‘–ignore-rust-version’ #13738-Zmsrv-policy:为 update/generate-lockfile 添加--ignore-rust-version#13741 #13742-Zmsrv-policy:将感知 MSRV 的解析器置于配置之后 #13769-Zmsrv-policy:对 rust-version ‘x’ 报错而非 panic #13771-Zmsrv-policy:MSRV 解析回退到 ‘rustc -V’。 #13743-Zmsrv-policy:为感知 MSRV 的解析添加 v3 解析器 #13776-Zmsrv-policy:对非本地安装不尊重 MSRV #13790-Zmsrv-policy:跟踪 MSRV 是否被显式设置(无论何种方式) #13732- test:不要压缩测试 registry crate。 #13744
文档
- 澄清
--locked确保 Cargo 使用 lockfile 中的依赖版本 #13665 - 澄清
RUSTC_WORKSPACE_WRAPPER与RUSTC_WRAPPER的优先级。 #13648 - 澄清仅在根 Cargo.toml 中允许
[workspace]节。 #13753 - 澄清虚拟清单与真实清单的区别。 #13794
内部
- 🎉 新的成员 crate
cargo-test-support与cargo-test-macro! 它们专为测试 Cargo 自身而设计, 因此不保证跨版本的任何稳定性。 该 crate 在 crates.io 上的发布与其他成员 crate 相同。 它们遵循 Rust 的 6 周发布流程。 #13418 - 因 crates.io CDN 变更修复发布脚本 #13614
- 将诊断复杂度推给 annotate-snippets #13619
- cargo-package:简化获取已发布 Manifest #13666
- ci:将 macos 镜像更新到 macos-13 #13685
- manifest:拆分出解析
Cargo.toml的显式步骤 #13693 - manifest:将目标发现与 Target 创建解耦 #13701
- manifest:为 VirtualManifests 暴露 source/spans #13603
- 更新依赖 #13609 #13674 #13675 #13679 #13680 #13692 #13731 #13760 #13950
Cargo 1.78 (2024-05-02)
新增
- 稳定化全局缓存数据跟踪。
-Zgc标志仍不稳定。 这仅用于让 Cargo 开始收集数据,以便在自动 gc 稳定后,不太可能看到缓存未命中。 #13492 #13467 - 稳定化锁文件格式 v4。锁文件 v3 仍是默认版本。 #12852
- 自动检测输出是否可以使用非 ASCII Unicode 字符渲染。
新增配置值
term.unicode以手动控制该行为。 docs #13337 - 在 Cargo 配置中支持
target.<triple>.rustdocflags。 docs #13197
变更
- cargo-add:在创建依赖 feature 时打印状态 #13434
- cargo-add:改进从被替换源添加包时的错误消息。 #13281
- cargo-doc:在无
--verbose时折叠Generated状态。 #13557 - cargo-new:打印 ‘Creating’ 状态,而非 ‘Created’ #13367
- cargo-new:打印 note,而非 comment,以提供更多信息 #13371
- cargo-new:在向工作区添加成员时打印提示 #13411
- cargo-test:为 libtest 参数建议
--#13448 - cargo-update:告知用户部分依赖仍落后于最新版本。 #13372
- 弃用不带扩展名的
.cargo/config文件。 #13349 - 默认在失败时不打印 rustdoc 命令行 #13387
- 生成新锁文件时尊重
package.rust-version。 #12861 - 与远程注册表通信时发送
User-Agent: cargo/1.2.3头。 此前是cargo 1.2.3,不符合 HTTP 规范。 #13548 - 当 Cargo.toml 中缺少
package.edition字段时发出警告。 #13499 #13504 #13505 #13533 - 从解析虚拟清单发出警告。 #13589
- 在收集工作区成员时的错误消息中提及工作区根位置。 #13480
- 在
Finished状态消息中澄清所用的 profile。 #13422 - 将更多 note/warning 改为小写。 #13410
- 报告所有与
package.rust-version.不兼容的包,而非随机一个。 #13514
修复
- cargo-add:若 Cargo.toml 中不存在工作区,则不将新包添加到
workspace.members。 #13391 - cargo-add:修复 cargo-add 中的 markdown 换行 #13400
- cargo-run:使用 Package ID Spec 匹配包 #13335
- cargo-doc:doctest 在构建脚本输出中搜索原生库。 #13490
- cargo-publish:发布时也从 Cargo.toml 中剥离开发依赖的 features。 #13518
- 通过
cargo add/rm/init/new编辑 TOML 时不重复注释。 #13402 - 修复稀疏索引被替换源的令人困惑的错误消息。 #13433
- 在 ‘–list’ 和 ‘-Zhelp’ 中尊重
CARGO_TERM_COLOR。 #13479 - 通过
CARGO_TERM_COLOR控制 clap 错误与帮助文本的颜色。 #13463 - Cargo.toml 中空 span 时不 panic。 #13375 #13376
仅 Nightly
- 🔥 cargo-update:允许
--precise指定包的已 yank 版本 #13333 -Zcheck-cfg:将docsrscfg 添加为已知的--check-cfg#13383-Zcheck-cfg:静默忽略cargo::rustc-check-cfg,以避免在稳定化-Zcheck-cfg时造成 MSRV 困扰。 #13438-Zmsrv-policy:未设置 MSRV 时回退到rustc -v#13516-Zscript:改进与 cargo script 相关的错误 #13346-Zpanic-abort-tests:也适用于 doctest #13388-Zpublic-dependency:支持通过-Zpublic-dependency标志启用。 #13340 #13556 #13547-Zpublic-dependency:测试打包公共依赖 #13536-Zrustdoc-map:为doc.extern-map选项递归添加单元的所有子项 #13481 #13544edition2024:启用 2024 edition 迁移。 #13429open-namespaces:开放命名空间的基本支持 (RFC 3243) (docs) #13591
文档
- cargo-fetch:在
--offlineman page 中隐藏cargo-fetch递归链接。 #13364 - cargo-install:
--list选项描述以大写开头 #13344 - cargo-vendor:澄清 vendored 源为只读及修改它们的方式 #13512
- build-script:澄清通过
cargo::metadata=KEY=VALUE设置的构建脚本元数据。 #13436 - 澄清 Cargo.toml 中
[package]的version字段是可选的 #13390 - 改进“Registry Authentication”文档 #13351
- 改进“Specifying Dependencies”文档 #13341
- 从“发布前”列表中移除
package.documentation。 #13398
内部
- 🎉 集成 tracing-chrome 作为 Cargo 自身的基础分析器。 docs #13399 #13551
- 更新至
gix0.58.0 #13380 - 更新至
git20.18.2 #13412 - 更新至
jobserver0.1.28 #13419 - 更新至
supports-hyperlinks3.0.0 #13511 - 更新至
rusqlite0.31.0 #13510 - bump-check:比较源代码时使用对称差 #13581
- bump-check:包含 rustfix 与 cargo-util-schemas #13421
- ci:启用 m1 runner #13377
- ci:通过
cargo-hack确保 MSRV 测试期间尊重锁文件。 #13523 - cargo-util-schemas:通过
RustVersion::is_compatible_with一致地比较 MSRV。 #13537 - console:使用新的 fancy
anstyleAPI #13368 #13562 - fingerprint:移除
Freshness::Dirty中不必要的 Option #13361 - fingerprint:从磁盘索引缓存中抽象掉
std::fs#13515 - mdman:更新至
pulldown-cmark0.10.0 #13517 - refactor:将
Config重命名为GlobalContext#13409 #13486 #13506 - refactor:移除未使用的
sysroot_host_libdir。 #13468 - refactor:向 Manifest 暴露 source/spans 以便发出 lint #13593
- refactor:扁平化清单解析 #13589
- refactor:使锁文件 diff/打印更可复用 #13564
- test:更新至
snapbox0.5.0 #13441 - test:通过 snapbox 的
term-svg功能验证终端样式。 #13461 #13465 #13520 - test:确保
nonzero_exit_code测试不受开发者RUST_BACKTRACE设置影响 #13385 - test:添加使用 worktree 的测试。 #13567
- test:修复 old_cargos 测试 #13435
- test:因 rust-lang/rust 变更而修复测试。 #13362 #13382 #13415 #13424 #13444 #13455 #13464 #13466 #13469
- test:禁用 lldb 测试,因其在 macOS 上需要特权才能运行 #13416
Cargo 1.77.1 (2024-03-28)
修复
- 默认不再为 Windows MSVC 目标剥离 Debuginfo。这导致了 1.77.0 中意外的回归,破坏了回溯。 #13654
Cargo 1.77 (2024-03-21)
新增
- 🎉 将包标识符格式稳定为 Package ID Spec。
此格式可用于 Cargo 中的大多数命令,包括
--package/-p标志、cargo pkgid、cargo metadata,以及来自--message-format=json的 JSON 消息。 #12914 #13202 #13311 #13298 #13322 - 为
-Zhelp控制台输出添加颜色 #13269 - build script:用
cargo::扩展构建指令语法。 #12201 #13212
变更
- 🎉 禁用 debuginfo 现在隐含
strip = "debuginfo"(当未设置strip时), 以剥离来自标准库的既有 debuginfo, 显著减小默认 release 二进制体积 (在 Linux x64 上 helloworld 从约 ~4.5 MiB 降至约 ~450 KiB)。 #13257 - 为清单解析添加
rustc风格错误。 #13172 - 在 cargo 中弃用 rustc plugin 支持 #13248
- cargo-vendor:在 vendoring 时持有 mutate 排他锁。 #12509
- crates-io:仅对带 body 载荷的请求设置
Content-Type: application/json#13264
修复
- jobserver:对所有种类的 runner 从环境继承 jobserver #12776
- build script:为所有带构建脚本的单元设置
OUT_DIR#13204 - cargo-add:从包含多个包的 Git 仓库中,按给定 features 找到正确的包。 #13213
- cargo-fix:始终继承 jobserver #13225
- cargo-fix:减少调用 rustc 的次数以提升性能。 #13243
- cargo-new:仅当新包是成员时才继承工作区 package 表 #13261
- cargo-update:
--precise接受任意 git revision #13250 - manifest:为 lints 表提供未使用键警告 #13262
- rustfix:支持插入新行。 #13226
仅 Nightly
- 🔥
-Zgit:在不稳定标志后实现浅层 libgit2 fetch docs #13252 - 🔥 为
cargo rustdoc添加不稳定的--output-format选项,为工具提供 依赖 rustdoc 实验性 JSON 格式的方式。 docs #12252 #13284 #13325 -Zcheck-cfg:重做--check-cfg生成注释 #13195-Zcheck-cfg:在未声明 features 时恢复传递空的values()#13316-Zprecise-pre-release:已添加该标志但尚未实现。 #13296 #13320-Zpublic-dependency:支持发布带public字段的包。 #13245-Zpublic-dependency:cargo add的--public/--no-public标志帮助文本 #13272-Zscript:添加前缀字符 frontmatter 语法支持 #13247-Zscript:添加多种实验性清单语法 #13241-Ztrim-paths:仅重映射公共前缀 #13210
文档
- 添加了关于在清单中设置 homepage 的指导 #13293
- 澄清了自定义子命令的查找方式。 #13203
- 澄清了为何
du函数使用 mutex #13273 - 突出显示“How to find features enabled on dependencies” #13305
- 删除关于 license 中不支持括号的句子 #13292
- resolver:澄清依赖解析中如何处理预发布版本。 #13286
- cargo-test:澄清测试选项的目标选择。 #13236
- cargo-install:澄清
--path是安装源而非目标 #13205 - contrib:修复团队 HackMD 链接 #13237
- contrib:突出显示非阻塞 feature gating 技术 #13307
内部
- 🎉 新成员 crate
cargo-util-schemas! 其中包含底层 Cargo schema 类型,专注于serde与FromStr, 用于读取文件与解析命令行。 要从这些类型得到最终语义,很可能需要其他工具 来处理,例如cargo metadata。 该 crate 在 crates.io 上的发布与其他成员 crate 相同。 它遵循 Rust 的 6 周发布流程。 #13178 #13185 #13186 #13209 #13267 - 更新至
gix0.57.1。 #13230 - cargo-fix:移除
cargo fix中的 error-format 特例 #13224 - cargo-credential:升级至 0.4.3 #13221
- mdman:更新至
handlebars5.0.0。 #13168 #13249 - rustfix:移除无用的 clippy 规则并修复一处拼写错误 #13182
- ci:修复 Dependabot 的 MSRV 自动更新 #13265 #13324 #13268
- ci:添加 dependency dashboard。 #13255
- ci:将 alpine docker 标签更新至 v3.19 #13228
- ci:改进 GitHub Actions CI 配置 #13317
- resolver:排序空 summaries 时不 panic #13287
Cargo 1.76 (2024-02-08)
新增
- 为 Windows MSVC 构建的
cargo.exe添加 Windows 应用程序清单文件。 #13131
显著变更:- 声明与 Windows 7、8、8.1、10 和 11 的兼容性。
- 将代码页设置为 UTF-8。
- 启用长路径感知。
- 为
cargo --list添加彩色输出。 #12992 - cargo-add:
--optional <dep>会创建<dep> = "dep:<dep>"feature。 #13071 - 扩展 Package ID spec 以支持无歧义规格。
docs
#12933
具体而言,- 支持
git+与path+方案。 - 支持 Git ref 查询字符串,例如
?branch=dev或?tag=1.69.0。
- 支持
变更
- ❗️ 禁止在虚拟工作区中使用
[lints],因为它们会被忽略,而用户很可能本意是[workspace.lints]。 这是初始实现中的疏忽(例如[dependencies]会产生相同错误)。 #13155 - 在包 ID spec 与
cargo new等多处禁止空名称。 #13152 - 尊重
rust-lang/rust的omit-git-hash选项。 #12968 - 即使只有一个错误,也以数字显示错误计数。 #12484
all-staticfeature 现在包含vendored-libgit2。 #13134- crates-io:与注册表交互时支持其他 2xx HTTP 状态码。 #13158 #13160
- home:用 SHGetKnownFolderPath 替换 SHGetFolderPathW。 #13173
修复
- 在 wincon 上彩色打印 rustc 消息。 #13140
- 修复含空格目录中的 bash 补全。 #13126
- 修复在 Windows 上卸载正在运行的二进制失败。 #13053 #13099
- 修复重复链接的错误消息。 #12973
- 修复与嵌套子命令一起使用
--quiet。 #12959 - 修复开发依赖中存在环时的 panic。 #12977
- 解析 rustc commit-hash 失败时不 panic。 #12963 #12965
- 更新工作区成员时不进行 git fetch。 #12975
- 若 CACHEDIR.TAG 已存在则避免写入。 #13132
- 若
--package标志中的?是有效的 pkgid spec 则接受它。 #13315 #13318 - cargo-package:仅当
target目录在包根目录中时才过滤掉它。 #12944 - cargo-package:当构建脚本不存在或在包根目录外时报错。 #12995
- cargo-credential-1password:为
op signin命令添加缺失的--account参数。 #12985 #12986
仅 Nightly
- 🔥
-Zgc标志为删除 cargo 缓存中旧的、未使用的文件启用垃圾回收。 即CARGO_HOME目录下已下载的源文件与注册表索引。 docs #12634 #12958 #12981 #13055 - 🔥 添加新的环境变量
CARGO_RUSTC_CURRENT_DIR。 这是调用 rustc 时所在的路径。 docs #12996 -Zcheck-cfg:在-Zcheck-cfg的 fingerprint 中包含已声明的 features 列表。 #13012-Zcheck-cfg:修复零 features 时的--check-cfg调用。 #13011-Ztrim-paths:为-Zbuild-std重排--remap-path-prefix标志。 #13065-Ztrim-paths:通过使用.显式重映射当前目录。 #13114-Ztrim-paths:用真实世界调试器进行演练。 #13091 #13118-Zpublic-dependency:将exported-private-dependencieslint 限制为库。 #13135-Zpublic-dependency:禁止通过工作区继承依赖的 public 状态。 #13125-Zpublic-dependency:为cargo add添加--public。 #13046-Zpublic-dependency:移除未使用的 public-deps 错误处理 #13036-Zmsrv-policy:优先 MSRV,而非忽略不兼容项。 #12950-Zmsrv-policy:在 MSRV 解析器中降低无 rust-version 的优先级。 #13066-Zrustdoc-scrape-examples:抓取文档示例时不过滤工作区成员。 #13077
文档
- 推荐更广泛的与 libsecret 兼容的密码管理器选择。 #12993
- 澄清不同目标具有不同的
CARGO_CFG_*值集合。 #13069 - 澄清
[lints]表仅影响当前包的本地开发。 #12976 - 澄清
cargo search可以在备用注册表中搜索。 #12962 - 添加了验证
rust-version(MSRV)字段的常见 CI 实践。 #13056 - 添加了指向 rustc lint 级别文档的链接。 #12990
- 添加了从相关工作区表到包 lint 表的链接 #13057
- contrib:向 contrib 文档添加更多资源。 #13008
- contrib:更新凭证 crate 的发布方式。 #13006
- contrib:移除评审容量通知。 #13070
内部
- 🎉 将
rustfixcrate 迁移到rust-lang/cargo仓库。 #13005 #13042 #13047 #13048 #13050 - 更新至
curl-sys0.4.70,对应 curl 8.4.0。 #13147 - 更新至
gix-index0.27.1。 #13148 - 更新至
itertools0.12.0。 #13086 - 更新至
rusqlite0.30.0。 #13087 - 更新至
toml_edit0.21.0。 #13088 - 更新至
windows-sys0.52.0。 #13089 - 更新至
tracing0.1.37 以与 rustc_log 兼容。 #13239 #13242 - 得益于更新到
gix-config,重新启用不稳定的 gitoxide auth 测试。 #13117 #13129 #13130 - 自用 Cargo
-Zlints表功能。 #12178 - 重构
Cargo.toml解析代码,为提取官方 schema API 做准备。 #12954 #12960 #12961 #12971 #13000 #13021 #13080 #13097 #13123 #13128 #13154 #13166 - 在
query{_vec}函数中使用IndexSummary。 #12970 - ci:迁移 renovate 配置 #13106
- ci:始终一起更新 gix 包 #13093
- ci:尽早捕获对 AtomicU64 的幼稚使用 #12988
- xtask-bump-check:不对 beta/stable 分支检查
home#13167 - cargo-test-support:处理 JSON 诊断中的 $message_type #13016
- cargo-test-support:为注册表测试支持添加更多选项。 #13085
- cargo-test-support:向默认 Cargo.toml 文件添加 features #12997
- cargo-test-support:修复 clippy-wrapper 测试竞态条件。 #12999
- test:不依赖 mtime 来测试变更 #13143
- test:为
optionals测试移除不必要的包与版本 #13108 - test:从测试中移除已删除的 feature
test_2018_feature。 #13156 - test:在某些测试中移除 jobserver 环境变量。 #13072
- test:修复使用错误构建文件名的 rustflags 测试 #12987
- test:修复部分测试输出验证。 #12982
- test:在 windows-gnu 上忽略 changing_spec_relearns_crate_types #12972
Cargo 1.75 (2023-12-28)
新增
Cargo.toml中的package.version字段现在是可选的,默认值为0.0.0。 没有package.version字段的包无法发布。 #12786--timings与cargo doc输出中的链接在受支持的终端上可点击, 可通过term.hyperlinks配置值控制。 #12889- 使用
-vv时打印构建脚本执行的环境变量。 #12829 - cargo-new:自动将新包添加到 [workspace.members]。 #12779
- cargo-doc:打印新的
Generated状态,显示完整路径。 #12859
变更
- cargo-new:若 crate 名称不遵循 snake_case 或 kebab-case 则警告。 #12766
- cargo-install:澄清要安装的参数
<crate>是位置参数。 #12841 - cargo-install:在 MSRV 失败时建议替代版本。 #12798
- cargo-install:报告更详细的 SemVer 错误。 #12924
- cargo-install:若存在重复的 crate 则只安装一次。 #12868
- cargo-remove:澄清不同依赖种类的标志行为。 #12823
- cargo-remove:建议要移除的依赖仅存在于另一节中。 #12865
- cargo-update:当差异仅在构建元数据时不称之为“Downgrading”。 #12796
- 增强帮助文本以澄清
--test标志针对 Cargo 目标,而非测试函数。 #12915 - 在构建脚本警告中包含包名/版本。 #12799
- 为错误的 -Z 标志提供后续步骤。 #12857
- 当找不到
cargo-<command>时建议cargo search。 #12840 - 不允许空的 feature 名称。 #12928
- 为
--target与--exclude标志添加不支持的短标志建议。 #12805 - 为
--out-dir标志添加不支持的短标志建议。 #12755 - 为
-Z标志添加不支持的小写-z标志建议。 #12788 - 为不支持的
--path标志添加更好的建议。 #12811 - 当目标目录路径无效时添加详细消息。 #12820
修复
- 修复 cargo 在写入文件时被杀死导致的损坏。 #12744
- cargo-add:保留更多注释 #12838
- cargo-fix:在调用 rustc 时保留 jobserver 文件描述符。 #12951
- cargo-remove:保留 feature 注释 #12837
- 错误发生时移除 timings HTML 报告中不必要的反斜杠。 #12934
- 修复关于无效 feature 名称可包含
-的错误消息。 #12939 - 当锁文件中存在某依赖的某个版本时, Cargo 会使用该“精确”版本,包括构建元数据。 #12772
仅 Nightly
- 添加了
Edition2024不稳定功能。 docs #12771 - 🔥
-Ztrim-paths功能添加了新的 profile 设置,以控制结果二进制中路径的清理方式。 (RFC 3127) (docs) #12625 #12900 #12908 -Zcheck-cfg:针对新的 rustc 语法与行为进行了调整。 #12845-Zcheck-cfg:移除-Zcheck-cfg警告中过时的选项。 #12884public-dependency:支持通过工作区依赖配置public依赖。 #12817
文档
- profile:添加缺失的
strip信息。 #12754 - features:关于 feature 数量新限制的说明。 #12913
- crates-io:为
NewCrate结构体添加文档注释。 #12782 - resolver:突出显示回答依赖解析问题的命令。 #12903
- cargo-bench:
--bench无条件传递给 bench harness。 #12850 - cargo-login:在 manpage 中提及
--之后的参数。 #12832 - cargo-vendor:澄清使用 vendored 源的配置会打印到 stdout #12893
- manifest:更新至 SPDX 2.3 license 表达式与 3.20 license 列表。 #12827
- contrib:清单编辑策略 #12836
- contrib:在 mdbook 搜索中使用
AND搜索词并修复失效链接。 #12812 #12813 #12814 - contrib:描述如何添加新包 #12878
- contrib:移除评审容量通知。 #12842
内部
- 更新至
itertools0.11.0。 #12759 - 更新至
cargo_metadata0.18.0。 #12758 - 更新至
curl-sys0.4.68,对应 curl 8.4.0。 #12808 - 更新至
toml0.8.2。 #12760 - 更新至
toml_edit0.20.2。 #12761 - 更新
gix至 0.55.2 #12906 - 在 windows-gnu 上禁用
custom_target::custom_bin_target测试。 #12763 - 重构
Cargo.toml解析代码,为提取官方 schema API 做准备。 #12768 #12881 #12902 #12911 #12948 - 将 SemVer 逻辑拆分到其自己的模块。 #12926 #12940
- source:为新的
PackageIDSpec语法做准备 #12938 - resolver:整合
VersionPreferences中的逻辑 #12930 - 将
SourceId::precise字段设为 Enum。 #12849 - shell:一次写入而非分段写入。 #12880
- 上移查看索引 summary 枚举 #12749 #12923
- 在 CI 中为 Cargo Contributor Guide 生成重定向 HTML 页面。 #12846
- 添加新的包缓存锁模式。 #12706
- 为 issue 6915 添加回归测试:features 与传递开发依赖。 #12907
- PR 评审状态变更时自动打标签。 #12856
- credential:在所有已发布 crate 中包含 license 文件。 #12953
- credential:按操作系统过滤
cargo-credential-*依赖。 #12949 - ci:将 cargo-semver-checks 升级至 0.24.0 #12795
- ci:自动为 Cargo 的 crate 设置并验证所有 MSRV。 #12767 #12654
- ci:为发布 Cargo Contributor Book 使用单独的并发组。 #12834 #12835
- ci:将
actions/checkoutaction 更新至 v4 #12762 - cargo-search:改进输出的边距计算。 #12890
Cargo 1.74 (2023-11-16)
新增
- 🎉
[lints]表已稳定,允许你在Cargo.toml中为 rustc 及其他工具 lint 配置报告级别。 (RFC 3389) (docs) #12584 #12648 - 🎉 不稳定功能
credential-process与registry-auth已稳定。 这些功能整合了与私有注册表进行身份验证的方式。 (RFC 2730) (RFC 3139) (docs) #12590 #12622 #12623 #12626 #12641 #12644 #12649 #12671 #12709
显著变更:- 引入新协议,供外部与内置提供者存储和检索注册表身份验证凭证。
- 在注册表索引的
config.json中添加auth-required字段,支持经身份验证的稀疏索引、crate 下载与搜索 API。 - 使用带身份验证的备用注册表时,必须配置凭证提供者,以避免在不知情的情况下将未加密凭证存储在磁盘上。
- 这些设置可在
[registry]与[registries]表中配置。
- 🎉
--keep-going标志已稳定,现已在每个构建命令中可用 (bench与test除外,它们改为使用--no-fail-fast)。 (docs) #12568 - 为
cargo clean添加了--dry-run标志以及末尾的摘要行。 #12638 - 为 cli 选项
--dry-run添加了短别名-n。 #12660 - 添加了对
target.'cfg(..)'.linker的支持。 #12535 - 允许在无歧义时对
--package等标志使用不完整版本。 #12591 #12614 #12806
变更
- ❗️ 更改了配置中数组合并的方式。 顺序此前未指定,现在为保持一致性而遵循其他配置类型的工作方式。 summary #12515
- ❗️ cargo-clean:若
--doc与-p混用则报错退出。 #12637 - ❗ cargo-new / cargo-init 不再在库的 VCS ignore 文件中排除
Cargo.lock。 #12382 - cargo-update:静默弃用
--aggressive,改用新的--recursive。 #12544 - cargo-update:
-p/--package可用作位置参数。 #12545 #12586 - cargo-install:当包名看起来像 URL 时建议
--git。 #12575 - cargo-add:当 feature 列表过长时进行汇总。 #12662 #12702
--target的 Shell 补全使用 rustup,但回退到 rustc。 #12606- 帮助用户了解可能的
--target值。 #12607 - 增强“registry index not found”错误消息。 #12732
- 增强
--explain的 CLI 帮助消息。 #12592 - 使用
serde-untagged增强无标签枚举的反序列化错误。 #12574 #12581 - 增强预发布版本候选不匹配时的错误。 #12659
- 增强对有歧义 Package ID spec 的建议。 #12685
- 增强 TOML 解析错误以显示上下文。 #12556
- 通过在
std::fs::metadata周围添加包装器来增强文件系统错误。 #12636 - 增强解析器版本不匹配警告。 #12573
- 使用 clap 为不支持的参数建议替代参数。 #12529 #12693 #12723
- 从 cargo new/init
--help输出中移除冗余信息。 #12594 - 控制台输出与样式微调。 #12578 #12655 #12593
修复
- 对
cargo rustc --print --target使用完整目标规格。 #12743 - 也为 EFI 目标复制 PDB。 #12688
- 修复解析器行为与包顺序无关。 #12602
- 修复
cargo remove对profile.release.package."*"的不必要清理。 #12624
仅 Nightly
-Zasymmetric-token:为 asymmetric-token 支持创建专用不稳定标志。 #12551-Zasymmetric-token:改进非对称令牌的注销消息。 #12587-Zmsrv-policy:非常初步的 MSRV 解析器支持。 #12560-Zscript:临时加入代码围栏支持。 #12681-Zbindeps:支持来自注册表的依赖。 #12421
文档
- ❗ 策略变更:将
Cargo.lock纳入版本控制现在是默认选择, 即使对于库也是如此。锁文件与 CI 集成文档也已扩充。 Policy docs, Lockfile docs, CI docs, #12382 #12630 - SemVer:更新关于移除可选依赖的文档。 #12687
- Contrib:添加安全响应流程。 #12487
- cargo-publish:警告上传超时。 #12733
- mdbook:有多个词时使用 AND 搜索。 #12548
- 确立发布最佳实践 #12745
- 澄清 caret 要求。 #12679
- 澄清
version对git依赖如何工作。 #12270 - 澄清并区分 split-debuginfo 的默认值。 #12680
- 在
dev与releaseprofile 中添加缺失的strip条目。 #12748
内部
- 更新至
curl-sys0.4.66,对应 curl 8.3.0。 #12718 - 更新至
gitoxide0.54.1。 #12731 - 更新至
git20.18.0,对应 libgit2 1.7.1。 #12580 - 更新至
cargo_metadata0.17.0。 #12758 - 更新目标架构感知 crate 以支持 mips r6 目标 #12720
- publish.py:移除过时的
sleep()调用。 #12686 - 定义
{{command}}供 src/doc/man/includes 使用 #12570 - 为网络消息设置 tracing 目标
network。 #12582 - cargo-test-support:添加
with_stdout_unordered。 #12635 - dep:从
termcolor切换到anstream。 #12751 - 将
Sourcetrait 置于cargo::sources下。 #12527 - SourceId:将
name与alt_registry_key合并为一个枚举。 #12675 - TomlManifest:当 package_root 不是目录时失败。 #12722
- util:增强
network::retry文档。 #12583 - refactor:抽出 cargo-add MSRV 代码以便复用 #12553
- refactor(install):将值解析移至 clap #12547
- 修复网络测试中的虚假错误。 #12726
- 对
CARGO_LOG内部日志使用更紧凑的相对时间格式。 #12542 - 使用更新的 std API 以获得更清晰的代码。 #12559 #12604 #12615 #12631
- 缓冲控制台状态消息。 #12727
- 使用枚举描述索引 summaries,以便在解析时 summaries 不可用时提供更丰富的信息。 #12643
- 使用最短路径解析从给定依赖到根的路径。 #12678
- 在同一位置读/写编码后的
cargo update --precise#12629 - 为内部包设置 MSRV。 #12381
- ci:更新 Renovate schema #12741
- ci:在 MSRV 中忽略补丁版本 #12716
Cargo 1.73 (2023-10-05)
新增
变更
- ❗️ Cargo 现在在自定义构建脚本中使用
cargo::时会退出。这是 为即将到来的构建脚本调用变更做准备。 #12332 - ❗️
cargo login不再接受--语法之后的任何令牌。--之后的参数现在被保留,为新的凭证提供者功能做准备。 这引入了一项回归:忽略了先前版本中对cargo login -- <token>的支持。 #12499 - 使 Cargo
--help更易于浏览。 #11905 - 若
cargo test进程通过信号终止,则提示使用--nocapture标志。 #12463 - 在获取目标信息的 rustc 调用上保留 jobserver 文件描述符。 #12447
- 在
--help中澄清cargo test --all-targets排除 doctest。 #12422 - 发布时将
cargo.toml规范为Cargo.toml,并在其他Cargo.toml大小写情况下发出警告。 #12399
修复
- 仅在
~/.cargo/{git,registry}上跳过 mtime 检查。 #12369 - 修复 WSL2 上
cargo doc --open崩溃。 #12373 - 修复对某些字符串启用
http.debug时的 panic。 #12468 - 修复
cargo remove错误地移除仍在使用的 patches。 #12454 - 修复 crate 校验和查找查询应匹配 semver 构建元数据。 #11447
- 修复为
[registries]表中未使用字段打印多条警告消息。 #12439
仅 Nightly
- 🔥
-Zcredential-process已用更清晰的方式重新实现,以便 与不同的凭证提供者通信。若干内置提供者也 已添加到 Cargo。 docs #12334 #12396 #12424 #12440 #12461 #12469 #12483 #12499 #12507 #12512 #12518 #12521 #12526
一些显著变更:- 在 Cargo 配置中将
credential-process重命名为credential-provider。 - 通过 stdin/stdout 与外部凭证提供者通信的新 JSON 协议。
- GNOME Secret 提供者现在动态加载
libsecert。 - 1password 提供者不再内置。
- 将非对称令牌的不稳定键从
registry-auth更改为credential-process。
- 在 Cargo 配置中将
- ❗️ 从
cargo test与cargo bench中移除--keep-going标志支持。 #12478 #12492 - 修复由
-Zscript生成的无效包名。 #12349 -Zscript现在对不支持的命令——publish与package——报错退出。 #12350- 在 Cargo.lock 中为 source ID 正确编码 URL 参数。 #12280
- 用
panic-unwind替换无效的panic_unwindstd feature。 #12364 -Zlints:doctest 提取应尊重[lints]。 #12501
文档
- SemVer:添加关于更改定义良好类型的对齐、布局或大小的章节。 #12169
- 使用标题属性控制 fragment。 #12339
- 在解释 Cargo 对 semver 的使用时用“number”代替“digit”。 #12340
- contrib:添加关于发布如何工作的更多细节。 #12344
- 澄清
cargo metadata中的“Package ID”与“Source ID”是不透明字符串。 #12313 - 澄清
rerun-if-env-changed不会监视其为 crate 与构建脚本 设置的环境变量。 #12482 - 澄清仅在元数据标签上不同的多个版本 在 crates.io 上是不允许的。 #12335
- 澄清
lto设置传递-Clinker-plugin-lto。 #12407 - 在配置与环境变量文档中添加了
profile.strip。 #12337 #12408 - 添加了 artifact JSON debuginfo 级别的文档。 #12376
- 添加了关于向后兼容的
.cargo/credential文件存在的通知。 #12479 - 提高对工作区内使用
resolver = 2的认识。 #12388 - 在文档中用默认分支替换
master分支。 #12435
内部
- 更新至
criterion0.5.1。 #12338 - 更新至
curl-sys0.4.65,对应 curl 8.2.1。 #12406 - 更新至
indexmapv2。 #12368 - 更新至
miow0.6.0,其移除了旧版本的windows-sys。 #12453 - ci:通过使用
--workspace自动测试新包。 #12342 - ci:使用 Renovate 每月自动更新依赖。 #12341 #12466
- ci:重写
xtask-bump-check,通过采用cargo-semver-checks以尊重 semver。 #12395 #12513 #12508 - 重新排列并重命名测试目录 #12397 #12398
- 从
log迁移到tracing。 #12458 #12488 - 在测试中跟踪
--help输出。 #11912 - 清理并在工作区内共享包元数据。 #12352
crates-io:暴露 HTTP 头与Error类型。 #12310- 对于
cargo update,在 clap 中捕获--aggressive与--precise之间的 CLI 标志冲突。 #12428 - 若干修复,以使 Cargo 测试套件在 nightly 或
rust-lang/rust中通过。 #12413 #12416 #12429 #12450 #12491 #12500
Cargo 1.72 (2023-08-24)
新增
- ❗ 默认启用
-Zdoctest-in-workspace。运行每个文档 测试时,工作目录设置为该测试所属包的根目录。 docs #12221 #12288 - 添加对“default”关键字的支持,以将先前设置的
build.jobs并行度重置回默认值。 #12222
变更
- 🚨 CVE-2023-40030: 恶意依赖可以向 cargo 生成的 timing 报告中注入任意 JavaScript。 为缓解此问题,feature 名称验证检查现在变为硬错误。 该警告在 Rust 1.49 中添加。这些扩展字符在 crates.io 上不允许, 因此这应仅影响其他注册表的用户,或不向注册表发布的人。 #12291
- 当 edition 2021 包位于虚拟工作区中且未设置
workspace.resolver时,Cargo 现在会发出警告。建议为工作区 显式设置解析器版本。 #10910 - 将 IBM AIX 共享库搜索路径设置为
LIBPATH。 #11968 - 不向 rustc 传递
-C debuginfo=0,因为那是默认值。 #12022 #12205 - 在
cargo install失败时添加关于重用先前临时路径的消息。 #12231 - 当
rustupoverride 简写放在错误位置时添加消息。 #12226 - 在获取嵌套子模块时尽可能尊重类似 scp 的 URL。 #12359 #12411
修复
cargo clean使用remove_dir_all作为回退以解决竞态条件。 #11442- 降低 Cargo 重新格式化用户
[features]表的可能性。 #12191 - 修复嵌套 Git 子模块无法获取。 #12244
仅 Nightly
- 🔥
-Zscript是一项实验性功能,为 Cargo 中的单文件包添加不稳定支持, 以便我们可以通过实现来探索设计并解决问题,从而收集反馈。 (eRFC 3424) docs #12245 #12255 #12258 #12262 #12268 #12269 #12281 #12282 #12283 #12284 #12287 #12289 #12303 #12305 #12308 - 运行
cargo new/cargo init时自动继承工作区 lints。 #12174 - 再次移除
-Zjobserver-per-rustc。 #12285 - 为
-Zconfig-include添加.toml文件扩展名限制。 #12298 - 添加
-Znext-lockfile-bump以为下一次锁文件升级做准备。 #12279 #12302
文档
- 在 Cargo FAQ 中添加了关于
Cargo.lock冲突的描述。 #12185 - 添加了关于索引忽略 SemVer 构建元数据的小注记。 #12206
- 为
cargo::sources模块中的类型及其相关项添加了文档注释。 #12192 #12239 #12247 - 为
Source下载函数添加了更多文档。 #12319 - 为凭证助手添加了 README。 #12322
- 修复了 Dependency Resolution 中的版本要求示例。 #12267
- 澄清 cargo-install 的默认行为。 #12276
- 澄清默认使用“default”分支而非
main。 #12251 - 提供关于版本要求的指导。 #12323
内部
- 更新至
gix0.45 以支持多轮 pack 协商。 #12236 - 更新至
curl-sys0.4.63,对应 curl 8.1.2。 #12218 - 更新至
openssl0.10.55。 #12300 - 更新了若干依赖。 #12261
- 从
windows-sys依赖中移除未使用的 features。 #12176 - 重构编译器调用。 #12211
- 重构 git 与注册表源,以及注册表数据。 #12203 #12197 #12240 #12248
- 按字典序排列
-Z标志。 #12182 #12223 #12224 - Cargo 自身测试基础设施的若干改进与加速。 #12184 #12188 #12189 #12194 #12199
- 将 print-ban 从测试迁移到 clippy #12246
- 对 interning 用途切换到
OnceLock。 #12217 - 移除一处不必要的
.clone。 #12213 - 不在非 Linux 平台上尝试编译
cargo-credential-gnome-secret。 #12321 - 使用宏移除可继承工作区字段 getter 的重复。 #12317
- 提取并重新排列注册表 API 项到它们自己的模块。 #12290
- 当容器测试失败时显示更好的错误。 #12264
Cargo 1.71.1 (2023-08-03)
修复
- 🚨 CVE-2023-38497: Cargo 1.71.1 及更高版本在解压 crate 归档时尊重 umask。它还会 清除其尝试访问的、由旧版 Cargo 生成的缓存。
Cargo 1.71 (2023-07-13)
新增
- 允许在 Cargo.toml 中使用命名 debuginfo 选项。 docs #11958
- 在
cargo metadata的输出中添加了workspace_default_members。 #11978 - 运行
cargo new/cargo init时自动继承工作区字段。 #12069
变更
- ❗ 优化了在
rustup下的使用。当 Cargo 检测到它将运行指向 rustup 代理的rustc时,它会尝试绕过代理并直接使用底层 二进制。这与 rustup 及RUSTUP_TOOLCHAIN的交互存在一些假设。 不过,预计不会影响普通用户。 #11917 - ❗ 查询包时,Cargo 只尝试原始名称、全部连字符以及 全部下划线以处理拼写错误。此前,Cargo 会尝试连字符与 下划线的每种组合,导致对 crates.io 的过多请求。 #12083
- ❗ 禁止在
[env]配置表中使用RUSTUP_HOME与RUSTUP_TOOLCHAIN。 这被视为 Cargo 不希望支持的用例, 因为它很可能导致问题或造成困惑。 #12101 #12107 - 在 Cargo.toml 中获取到空依赖表时给出更好的错误消息。 #11997
- 在 Cargo.toml 中指定空依赖时给出更好的错误消息。 #12001
--help文本现在会换行,以便在窄屏幕上阅读。 #12013- 调整了
--help文本中参数的顺序以澄清--bin的作用。 #12157 rust-version包含在发往注册表的cargo publish请求中。 #12041
修复
- 更正了
cargo clippy --fix的错误报告 URL。 #11882 - Cargo 现在将
[env]应用于目标信息发现的 rust 调用。 #12029 - 修复使用 HTTP/2 时 http debug 中令牌未被遮蔽。 #12095
- 修复某些情况下未传递
-C debuginfo,导致构建缓存未命中。 #12165 - 修复
cargo install找到同名包时的歧义。 该歧义发生在包依赖自身旧版本等情况。 #12015 - 修复
cargo package检查冲突文件时的误报。 #12135 - 修复
dep/feat语法在与dep:语法共存且 试图启用可选依赖的 features 时不工作。 #12130 - 修复
cargo tree未正确处理带-e no-proc-macro的输出。 #12044 - 在
cargo package中对 Cargo.toml 里空的readme或license-file发出警告而非错误。 #12036 - 修复当使用 HTTP 代理且 Cargo 可执行文件链接到 特定版本的系统 libcurl 时,CURL 连接可能失败。受影响的 libcurl 版本:7.87.0、7.88.0、7.88.1。 #12234 #12242
仅 Nightly
- 🔥
-Zgitoxide功能现在支持对依赖与注册表索引进行 浅克隆与 fetch。 docs #11840 - 🔥
-Zlints功能支持在 Cargo.toml 中配置 lint 规则 docs #12148 #12168 -Zbuild-std在nightly-2023-05-04中缺失 features 的破坏 已在nightly-2023-05-05中修复。 #12088- 在 profile rustflags 变更时重新编译。 #11981
- 添加了
-Zmsrv-policy功能标志占位符。 #12043 cargo add在使用-Zmsrv-policy选择包时现在会考虑rust-version。 #12078
文档
- 添加了 Cargo 团队章程。 docs #12010
- SemVer:在现有项上添加
#[non_exhaustive]是破坏性变更。 #10877 - SemVer:将 unsafe 函数变为 safe 不是破坏性变更。 #12116
- SemVer:更改 MSRV 通常是次要变更。 #12122
- 澄清何时以及如何使用
cargo yank。 #11862 - 澄清 crates.io 不会立即链接到 docs.rs。 #12146
- 澄清围绕测试目标设置的文档。 #12032
- 在 Index 格式中指定
rust_version。 #12040 - 在 owner-remove 注册表 API 响应中指定
msg。 #12068 - 添加了更多关于 artifact-dependencies 的文档。 #12110
- 为作为库的 cargo 的
Source与构建脚本添加了文档注释。 #12133 #12153 #12159 - 若干拼写与失效链接修复。 #12018 #12020 #12049 #12067 #12073 #12143
- home:澄清各平台上的行为 #12047
内部
- 更新至
linux-raw-sys0.3.2 #11998 - 更新至
git20.17.1,对应 libgit2 1.6.4。 #12096 - 更新至
windows-sys0.48.0 #12021 - 更新至
libc0.2.144 #12014 #12098 - 更新至
openssl-src111.25.3+1.1.1t #12005 - 更新至
home0.5.5 #12037 - 启用已使用的
Win32_System_Consolefeature。 #12016 - Cargo 现在是一个 Cargo 工作区。我们终于开始自用了! #11851 #11994 #11996 #12024 #12025 #12057
- 🔥 为 Cargo 贡献者提供的新的、直观的 issue 标签系统。 docs #11995 #12002 #12003
- 允许 win/mac 凭证管理器在所有平台上构建。 #11993 #12027
- 仅在非 Windows 平台上使用
openssl。 #11979 - 使用受限的 Damerau-Levenshtein 算法提供拼写建议。 #11963
- 添加了新的 xtask
cargo build-man。 #12048 - 添加了新的 xtask
cargo stale-label。 #12051 - 添加了新的 xtask
cargo unpublished。 #12039 #12045 #12085 - CI:检查成员 crate 是否需要任何版本升级。 #12126
- 修复了一些测试基础设施问题。 #11976 #12026 #12055 #12117
Cargo 1.70 (2023-06-01)
新增
- 🎉 新增
cargo logout命令,用于从本地移除 registry 的 API 令牌。 docs #11919 #11950 - 为
cargo install新增--ignore-rust-version标志。 #11859 - 编译 crate 时,现在会将
CARGO_PKG_README环境变量设置为 README 文件的路径。 #11645 - Cargo 现在会显示更丰富的 Cargo 目标编译失败信息。 #11636
变更
- 🎉
sparse协议现已成为 crates.io 的默认协议! (RFC 2789) (docs) #11791 #11783 - ❗
cargo login与cargo logout现在使用registry.default中指定的 registry。这是一次非预期的回归修复。 #11949 cargo update在降级依赖时准确显示Downgrading状态。 #11839- 为 HTTP 错误增加了更多信息以帮助调试。 #11878
- 为 Cargo 的网络重试增加了延迟。 #11881
- 优化了等待发布完成时的
cargo publish消息。 #11713 - 从 git 仓库执行
cargo install但发现多个包时, 错误消息更完善。 #11835
修复
- 移除了
cargo tree的--charset选项中可能值的重复项。 #11785 - 修复了同时以带值与不带值方式定义的配置对应的
CARGO_CFG_变量。 #11790 - 打破了
cargo add在新增依赖中因循环 features 导致的死循环。 #11805 - 当
[patch]参与依赖解析导致冲突时不再 panic。 #11770 - 修复了凭据令牌格式校验。 #11951
- 在发布时补充了缺失的令牌格式校验。 #11952
- 修复了在 Config 快照中查找环境变量时的大小写不匹配问题。 #11824
cargo new生成正确的.hgignore,语义与其他 VCS ignore 文件对齐。 #11855- 停止进行不必要的模糊 registry 索引查询。这显著减少了
对名称中包含
-或_的 crate 向远程 registry 发起的 HTTP 请求数量。 #11936 #11937
仅 Nightly
- 新增
-Zdirect-minimal-versions。行为类似-Zminimal-versions,但 仅作用于直接依赖。 (docs) #11688 - 新增
-Zgitoxide,将 Cargo 中所有git fetch操作切换为 使用gitoxidecrate。目前仍是 MVP,但可将性能 提升最高达 2 倍。 (docs) #11448 #11800 #11822 #11830 - 移除了
-Zjobserver-per-rustc。其 rustc 对应实现从未落地。 #11764
文档
- 清理了不稳定功能文档。 #11793
- 用图表增强了 timing report 文档。 #11798
- 澄清了发布后 registry 索引状态的相关要求。 #11926
- 澄清了
-C文档:它出现在命令之前。 #11947 - 澄清了
cargo test、cargo bench与cargo run的工作目录行为。 #11901 - 修复了
registries.name.index配置的文档。 #11880 - 在
cargo-add的帮助文本中提示潜在的意外 shell 展开。 #11826 - 更新了 external-tools JSON 文档。 #11918
- 指出索引 JSON 与 API 或元数据之间的差异。 #11927
- 提及 pkgid 格式时统一使用
@。 #11956 - 增强了 Cargo 贡献者指南。 #11825 #11842 #11869 #11876
- 将 Cargo 贡献者指南的一部分移至 Cargo API 文档。 docs #11809 #11841 #11850 #11870
- Cargo 团队现已安排 办公时间! #11903
内部
- 改用
sha2crate 进行 SHA256 计算。 #11795 #11807 - 将 benchsuite 切换为索引归档。 #11933
- 更新至
base640.21.0。 #11796 - 更新至
curl-sys0.4.61,对应 curl 8.0.1。 #11871 - 更新至
proptest1.1.0。 #11886 - 更新至
git20.17.0,对应 libgit2 1.6.3。 #11928 - 更新至
clap4.2。 #11904 - 在 Cargo 自身的 CI 流水线中集成了
cargo-deny。 #11761 - 使非阻塞 IO 调用更加稳健。 #11624
- 从
cargo-platform中的serde移除了derivefeature。 #11915 - 用更稳健的
try_canonicalize替换std::fs::canonicalize。 #11866 - 对
std::env::var及其同类启用 clippy 的disallowed_methods警告。 #11828
Cargo 1.69 (2023-04-20)
新增
- 当编译警告可自动修复时,Cargo 现在会建议
cargo fix或cargo clippy --fix。 #11558 - 若尝试安装库 crate,Cargo 现在会建议使用
cargo add。 #11410 - Cargo 现在也会为二进制示例设置
CARGO_BIN_NAME环境变量。 #11705
变更
- ❗ 当工作区依赖的
default-features设为 false, 而成员继承的依赖具有default-features = true时, Cargo 将启用该依赖的默认 features。 #11409 - ❗ 禁止在
[env]配置表中使用CARGO_HOME。Cargo 自身不会 读取该值,但对 cargo 的递归调用会,而这并非预期行为。 #11644 - ❗ 构建依赖的 Debuginfo 若未显式设置,现在默认关闭。这预期 能改善整体构建时间。 #11252
- Cargo 现在会对 registry 令牌中的无效字母数字字符报错。 #11600
cargo add现在仅检查[dependencies]的顺序, 而不考虑[dependencies.*]。 #11612- 通过更新依赖
jobserver,Cargo 现在支持 GNU Make 4.4 中的 新 jobserver IPC 风格。 #11767 - 当没有二进制目标满足要求时,
cargo install现在会报告所需的 features。 #11647
修复
- 将
.dwpDWARF 包文件提升到可执行文件旁,以便调试器 定位它们。 #11572 - 修复了当
rerun-if-changed指向文件系统未保留 mtime 的 目录时,构建脚本触发重新编译的问题。 #11613 - 修复了将
[workspace.dependencies]中的依赖用于[patch]时的 panic。此用法本不应受支持。 #11565 #11630 - 修复了
cargo report多次保存相同 future-incompat 报告的问题。 #11648 - 修复了将以
.rs结尾的目录错误推断为文件的问题。 #11678 - 修复了
.cargo-ok文件被错误截断、导致无法使用依赖的问题。 #11665 #11724
仅 Nightly
-Zrustdoc-scrape-example在构建脚本出错时必须失败。 #11694- 将 1password 凭据管理器集成更新至版本 2 CLI。 #11692
- 对包并不直接交互的目标上的传递性 artifact 依赖发出错误消息。 #11643
- 新增
-C标志,用于在构建开始前更改当前目录。 #10952
文档
- 澄清了
CARGO_CRATE_NAME与CARGO_PKG_NAME的区别。 #11576 - 为出现目标三元组的位置添加了指向术语表 Target 小节的链接。 #11603
- 描述了当前解析器有时会重复依赖的原因。 #11604
- 添加了关于在 crates.io 验证邮箱地址的说明。 #11620
- 在
publish.timeout文档中提及当前默认值。 #11652 - 为
cargo::core::compiler模块增加了更多文档注释。 #11669 #11703 #11711 #11758 - 增加了如何实现不稳定功能的更多指导。 #11675
- 修复了不稳定章节中
codegen-backend的布局。 #11676 - 添加了指向 LTO 文档的链接。 #11701
- 在手册页中为
cargo install的配置发现 添加了文档 #11763 - 记录了
cargo add中-F标志作为--features的别名。 #11774
内部
- 在 Windows 上禁用网络 SSH 测试。 #11610
- 将部分阻塞测试改为非阻塞。 #11650
- 在 CI 中拒绝警告,而非本地。 #11699
- 将
cargo_new::NewProjectKind重新导出为公开。 #11700 - 使依赖按字母顺序排列。 #11719
- 将部分测试从
build切换为check。 #11725 - 统一了 Cargo 内部读取环境变量的方式。 #11727 #11754
- 修复了具有非确定性排序的测试 #11766
- 添加测试以验证中间产物会保留在临时目录中。 #11771
- 更新了 aarch64-apple-darwin 的交叉测试说明。 #11663
- 更新至
tomlv0.6 与toml_editv0.18 以进行 TOML 操作。 #11618 - 更新至
clapv4.1.3。 #11619 - 用
windows-syscrate 替换winapi以进行 Windows 绑定。 #11656 - 改用
urlcrate 进行百分号编码,而不再使用percent-encoding。 #11750 - Cargo 贡献者在撰写文档时可受益于智能标点,例如
---会自动转换为破折号。 (docs) #11646 #11715 - Cargo 的 CI 流水线现在覆盖 nightly 上的 macOS。 #11712
- 在 Cargo 自身中重新启用了部分 clippy lint。 #11722
- 在 Cargo 的 CI 中启用了 sparse 协议。 #11632
- Cargo 中的拉取请求现在会自动打上
A-*与Command-*标签。 #11664 #11679
Cargo 1.68.2 (2023-03-28)
- 更新了 cargo 内置捆绑的 GitHub RSA SSH 主机密钥。 该密钥于 2023-03-24 在旧密钥泄露后由 GitHub 轮换。 #11883
- 新增对 SSH known hosts 标记
@revoked的支持。 #11635 - 将旧的 GitHub RSA 主机密钥标记为已吊销。这将防止 Cargo 即使在系统信任该密钥时也接受已泄露的密钥。 #11889
Cargo 1.68 (2023-03-09)
新增
- 🎉 新的 “sparse” 协议已稳定。 访问 crates.io 时应能带来显著的性能提升。 (RFC 2789) (docs) #11224 #11480 #11733 #11756
- 🎉
homecrate 现已成为rust-lang/cargo仓库中的子 crate。欢迎! #11359 #11481 - 长诊断消息现在可截断以提高可读性。 #11494
- 即使启用了
net.git-fetch-with-cli,也会显示 crates.io 索引更新的进度。 #11579 cargo build --verbose会告知更多关于为何重新编译的信息。 #11407- Cargo 的文件锁定机制现在通过使用
fcntl支持 Solaris。 #11439 #11474 - 新增一条 SemVer 兼容性规则,说明围绕诊断 lint 的期望 #11596
cargo vendor对来自同一 git 仓库的每个修订版本 生成不同的源替换条目。 #10690- Cargo 贡献者可通过 triagebot 重新为 issue 打标签。 doc #11498
- Cargo 贡献者可在容器中编写测试。 #11583
变更
- Cargo 现在默认将凭据保存到
.cargo/credentials.toml。 若.cargo/credentials存在,则出于向后兼容写入该文件。 #11533 - 为防止敏感数据被记录,Cargo 在内部引入了新的包装类型。 #11545
- 若干文档改进。 #11475 #11504 #11516 #11517 #11568 #11586 #11592
修复
- ❗
cargo package与cargo publish现在会尊重工作区的Cargo.lock。 这是预期行为,但此前被遗漏。 #11477 - 修复了
cargo vendor在解析从工作区继承的 git 依赖时失败的问题。 #11414 - 当指定了
workspace.default-members时,cargo install现在可以正确安装根包。 #11067 - 修复了目标特定依赖错误时的 panic。 #11541
- 若子命令没有手册页,则显示
--help。 #11473 - 设置
target.cfg(…).rustflags不应清除build.rustdocflags。 #11323 - 不支持的
profile.split-debuginfo选项现在会被忽略, 此前这会使 Cargo 在某些平台上编译失败。 #11347 #11633 - 在具有极长文件名的 Windows 无头会话中不再 panic。 #11759
仅 Nightly
- 实现了 registry 非对称令牌认证的初始支持。 (RFC 3231) (docs) #10771
- 在没有
-Z sparse-registry时,不对auth-required: true报错 #11661 - 支持配置文件中 profile 的
codegen-backend与rustflags。 #11562 - 当警告/错误可用 clippy 修复时,建议使用
cargo clippy --fix。 #11399 - 修复了在指定 target 字段且同时存在
optional = true时 artifact 依赖不工作的问题。 #11434 - 使 Cargo 区分带与不带 artifact 目标的
Unit。 #11478 cargo metadata支持 artifact 依赖。 #11550- 允许在可选的文档抓取期间部分 crate 的构建失败。 #11450
- 若潜在可抓取的示例因开发依赖而被跳过,则发出警告。 #11503
- 默认不从库目标抓取示例。 #11499
- 修复了 proc-macro crate 的示例被抓取的问题。 #11497
Cargo 1.67 (2023-01-26)
新增
cargo remove现在在成功移除依赖后,会清理根 工作区清单中引用的依赖,以及profile、patch与replace小节。 #11194 #11242 #11351cargo package与cargo publish现在在打包后报告 crate 的总大小与压缩后大小。 #11270
变更
- ❗ 若环境中已设置
$CARGO,Cargo 现在会复用该值, 并在执行外部子命令与构建脚本时转发该值。 #11285 - ❗ 在没有
-p标志时运行cargo update --precise,Cargo 现在会报错。 #11349 - ❗ 若配置中存在多个具有相同索引 URL 的 registry,Cargo 现在会报错。 #10592
- Cargo 现在在解压 crate 文件时会考虑压缩比。 这放宽了 1.64.0 中为缓解 zip bomb 攻击而引入的硬性大小限制。 #11337
- 在有未提交更改的 git 仓库上运行
cargo fix时,Cargo 现在会报错退出。 #11400 - 当
cargo tree -i <spec>找不到任何包时,Cargo 现在会发出警告。 #11377 - 运行
cargo new/init且项目路径中包含PATH环境分隔符时, Cargo 现在会发出警告。 #11318 - 当找到多个包且
cargo add/remove感到困惑时,错误消息更完善。 #11186 #11375 - 当
cargo init但现有 ignore 文件不是 UTF-8 时,错误消息更完善。 #11321 cargo install .的错误消息更完善。 #11401- 当多个构建目标中发现相同文件路径时,警告更完善。 #11299
- 更新了内部 HTTP 库 libcurl,包含多项修复与更新。 #11307 #11326
修复
- 修复了
cargo clean,使其仅移除所请求包的指纹与 构建脚本产物 #10621 - 修复了在设置了配置
registry.default时cargo install --index不工作的问题。 #11302 - 修复了在未找到网络配置时 git2 safe-directory 被意外禁用的问题。 #11366
- 从 crate
atty迁移,以解决潜在的 soundness 问题。 #11420 - 清理 libgit2 索引被中断时留下的陈旧 git 临时文件。 #11308
仅 Nightly
- 当某些编译警告/错误可自动修复时,建议使用
cargo fix。 #10989 #11368 - 将
rustdoc-scrape-examples改为目标级配置。 #10343 #11425 #11430 #11445 - 将 artifact bin 依赖的变更传播到其父指纹。 #11353
- 修复了
wait-for-publish以支持 sparse registry。 #11356 #11327 #11388 - 在 sparse registry 的
SourceId中存储sparse+前缀 #11387 #11403 - 实现了替代 registry 认证支持。 (RFC 3139) (docs) #10592
- 添加了配置选项
registries.crates-io.protocol的文档。 #11350
Cargo 1.66.1 (2023-01-10)
修复
- 🚨 CVE-2022-46176: 为 git URL 增加了 SSH 主机密钥校验。 关于如何配置 known host 密钥,详见文档。
Cargo 1.66 (2022-12-15)
新增
- 🎉 新增
cargo remove命令,用于从Cargo.toml移除依赖。 docs #11059 #11099 #11193 #11204 #11227 - 新增对具有相对路径 git 子模块的 git 依赖的支持。 #11106
- Cargo 现在向 registry 发送带有
Accept-Encoding头的请求。 #11292 - Cargo 现在将非 UTF8 参数转发给外部子命令。 #11118
变更
- ❗ 从多个角度消除源替换的歧义。
RFC-3289
#10907
- 当 crates-io 源被替换时,用户在执行 API 操作时必须使用
--registry <NAME>指定要使用的 registry。 - 不再允许使用 crates.io 令牌(
registry.token)向被源替换的 crates.io 发布。 - 在源替换中,
replace-with键可以引用[registries]表中替代 registry 的名称。
- 当 crates-io 源被替换时,用户在执行 API 操作时必须使用
- ❗
cargo publish现在会阻塞,直到在索引中看到已发布的包。 #11062 #11210 #11216 #11255 - Cargo 现在使用 clap v4 库进行命令行参数解析。 #11116 #11119 #11159 #11190 #11239 #11280
- Cargo 现在仅在用户定义的别名遮蔽外部命令时发出警告。 #11170
- 若干文档改进。 #10770 #10938 #11082 #11093 #11157 #11185 #11207 #11219 #11240 #11241 #11282
修复
- ❗ 通过
cargo --config <file>加载的配置文件现在优先于 环境变量。这是已文档化的行为,但旧 实现意外弄错了。 #11077 - ❗ Cargo 更正确地收集
target.cfg(…).rustflags中的 rustflags, 并在不足以收敛时发出警告。 #11114 - 链接器未移除的最终产物应在编译开始前被移除。 #11122
cargo add现在以更易发现的方式报告未知 features。 #11098- Cargo 现在以更多错误上下文报告命令别名失败。 #11087
- 当
cargo login提示收到空输入时,错误消息更完善。 #11145 - 在支持工作区继承的字段类型错误时, 错误消息更完善。 #11113
- 混合使用 feature 语法
dep:与/时,错误消息更完善。 #11172 - 发布时清单中
package.publish为false时, 错误消息更完善。 #11280
仅 Nightly
- 在
-Zpublish-timeout背后新增配置选项publish.timeout。 docs #11230 - 为 sparse registry 新增重试支持。 #11069
- 修复了 sparse registry 锁文件 URL 包含
registry+sparse+的问题。 #11177 - 新增配置选项
registries.crates-io.protocol以控制 crates.io 协议。 #11215 - 移除了 index.crates.io 的
sparse+前缀。 #11247 - 修复了依赖 sparse registry 时的发布问题。 #11268
- 修复了使用
-Zsparse-registry时令人困惑的错误消息。 #11283 - 修复了 sparse registry 的 410 gone 响应处理。 #11286
Cargo 1.65 (2022-11-03)
新增
- 外部子命令现在可以从 Cargo 继承 jobserver 文件描述符。 #10511
- 为 cargo-the-library 中的私有项添加了 API 文档。参见 https://doc.rust-lang.org/nightly/nightly-rustc/cargo。 #11019
变更
- 若 Cargo 的 bin 路径已在
PATH中,Cargo 现在停止再添加。 #11023 - 通过对待处理作业队列排序, 改进了 Cargo 构建调度的性能。 #11032
- 即使在
rev字段中使用部分哈希, 也改进了从 GitHub 获取 git 依赖的性能。 #10807 - Cargo 现在使用 git2 v0.15 与 libgit2-sys v0.14, 带来了与 git 新行为的若干兼容性修复。 #11004
- Registry 索引文件基于内容哈希以更细粒度的方式缓存。 #11044
- Cargo 现在使用标准库的
std::thread::scope,而不再使用crossbeamcrate 来生成作用域线程。 #10977 - Cargo 现在使用标准库的
available_parallelism,而不再使用num_cpuscrate 来确定默认并行度。 #10969 - 当看到
rust-version要求未满足的错误消息时, Cargo 现在会指导你如何解决。 #10891 - 当找不到子命令时, Cargo 现在会告知更多可能原因及如何修复。 #10924
- 当给定的 Cargo 目标找不到时,Cargo 现在会列出可用的目标名称。 #10999
- 若给出
--precise但没有--package标志,cargo update现在会发出警告。 这将在过渡期后变为硬性错误。 #10988 #11011 cargo bench与cargo test现在在测试失败后立即报告 更精确的测试执行错误。 #11028cargo add现在会告知 features 是为哪个版本添加的。 #11075- 指出 Rust 不再支持非 ASCII 的 crate 名称。 #11017
- 增强了清单中字段期望为数组但使用了字符串时的 错误消息。 #10944
修复
- 移除了除 Linux 以外平台上对文件锁定支持的限制。 #10975
- 通过将 os_info 提升至 3.5.0 修复了不正确的 OS 检测。 #10943
- 扫描包目录时现在忽略来自已损坏但被排除的 符号链接文件的错误。 #11008
- 修复了构建脚本在 stdin 等待输入时的死锁。 #11257
Nightly
- sparse registry 的进度指示变得更直观。 #11068
Cargo 1.64 (2022-09-22)
新增
- 🎉 包现在可以从工作区继承设置,从而将设置
集中在一处。关于如何定义这些公共设置,参见
workspace.package与workspace.dependencies。 #10859 - 为
cargo rustc新增--crate-type标志以覆盖 crate 类型。 #10838 - Cargo 命令现在可以接受多个
--target标志以一次为 多个目标构建,并且build.target配置选项现在可以取多个目标的数组。 #10766 --jobs参数现在可以取负数,以从最大 CPU 数 向后倒数。 #10844
变更
cargo install --path的 Bash 补全现在支持路径补全。 #10798- 在
rev字段中使用哈希时,显著改进了从 GitHub 获取 git 依赖的性能。 #10079 - 已发布的包现在将包含来自工作区的 resolver 设置, 以确保它们在独立使用时使用相同的解析器。 #10911 #10961 #10970
cargo add现在会更新Cargo.lock。 #10902cargo vendor配置输出中的路径现在将反斜杠 转换为正斜杠,以便设置可跨平台工作。 #10668workspace.default-members设置现在允许在非虚拟工作区中使用"."值以引用 根包。 #10784
修复
- 🚨 CVE-2022-36113: 解压恶意 crate 可能破坏任意文件。 #11089 #11088
- 🚨 CVE-2022-36114: 解压恶意 crate 可能填满文件系统。 #11089 #11088
cargo --version --verbose中的os输出现在支持更多平台。 #10802- 若缓存的 git checkout 已损坏,现在会重新构建。这可能发生在
使用
net.git-fetch-with-cli并中断克隆 过程时。 #10829 - 修复了
cargo add --offline中的 panic。 #10817
仅 Nightly
- 修复了
config.toml中不稳定check-cfg的反序列化。 #10799
Cargo 1.63 (2022-08-11)
新增
- 🎉 新增
--configCLI 选项,可直接在 CLI 上传递配置选项。 #10755 - 若清单设置了
rust-version字段,编译 crate 时现在会设置CARGO_PKG_RUST_VERSION环境变量。 #10713
变更
- 在 git 依赖中遇到多个同名包时会发出警告。
这将忽略
publish=false的包。 #10701 #10767 - 变更跟踪现在使用
.json目标规范文件的内容,而非 其路径。若路径变化,这应有助于避免重新构建。 #10746 - 在
.gitmodules中配置了update=none策略的子模块的 git 依赖现在会被遵守,且不会获取该子模块。 #10717 - Crate 文件现在使用更近的日期(2006 年 7 月 23 日而非 1973 年 11 月 29 日) 以实现确定性行为。 #10720
cargo new使用的初始模板现在包含稍更 真实的测试结构,在测试模块中有use super::*;。 #10706- 更新了内部 HTTP 库 libcurl,包含多项小修复与更新。 #10696
修复
- 修复了
cargo add与cargo locate-project的 zsh 补全 #10810 #10811 - 修复了在虚拟工作区根目录中
cargo publish忽略-p的问题。 还增加了额外检查,以便在选择了多个包时生成错误(此前会选取第一个)。 #10677 - 使用 JSON 输出时,
cargo test不再显示人类可读的可执行文件名。 #10691
仅 Nightly
- 新增
-Zcheck-cfg=output,以支持构建脚本通过cargo:rustc-check-cfg声明其支持的cfg值集合。 #10539 -Z sparse-registry在访问 crates-io 时现在使用 https://index.crates.io/。 #10725- 修复了
cargo add中用于工作区继承的.workspace键的格式。 #10705 - Sparse HTTP registry URL 现在必须以
/结尾。 #10698 - 修复了
cargo add与工作区继承default-features键的问题。 #10685
Cargo 1.62 (2022-06-30)
新增
- 🎉 新增
cargo add命令,可从命令行向Cargo.toml添加依赖。 docs #10472 #10577 #10578 - Package ID 规格现在除了先前的
name:version外,还支持name@version语法,以与cargo add及其他工具的行为对齐。cargo install和cargo yank现在也支持该语法,因此版本不必再作为单独的标志传入。 #10582 #10650 #10597 - 新增 CLI 选项
-F,作为--features的别名。 #10576 - Cargo 主目录(通常为
~/.cargo)中的git和registry目录现在被标记为缓存目录,因此不会被纳入备份或内容索引(在 Windows 上)。 #10553 - 为
cargo yank新增--version标志以替代--vers标志,从而与cargo install保持一致。 #10575 - 新增自动
@argfile 支持:当传给rustc的命令行超出操作系统限制时,将使用“响应文件”。 #10546 cargo clean现在有进度条(若耗时超过半秒)。 #10236
变更
- 若未找到可安装的二进制文件(例如缺少必需的 features),
cargo install不再报错。 #10508 - 若指定的 target 与主机 target 相同,
cargo test现在会将--target传给rustdoc。 #10594 - 为二进制文件生成文档时,
cargo doc现在会自动传入-Arustdoc::private-intra-doc-links(这会自动包含--document-private-items)。private-intra-doc-linkslint 仅在不为私有项生成文档时才相关,而这不适用于二进制文件。 #10142 cargo --version输出中短 git hash 的长度现在固定为 9 个字符。此前不同平台上的长度不一致。 #10579- 尝试发布包含
Cargo.toml.orig文件的包现在会报错。否则该文件名会与自动生成的文件冲突。 #10551
修复
build.dep-info-basedir配置设置现在正确支持在路径中使用..来引用父目录。 #10281- 修复了在使用 cgroups v1 的系统上自动检测默认 CPU 数量的回归。 #10737 #10739
仅 Nightly
cargo fetch现在可与-Zbuild-std一起使用,以获取标准库的依赖。 #10129- 新增对 workspace inheritance 的支持。 docs #10584 #10568 #10565 #10564 #10563 #10606 #10548 #10538
- 新增
-Zcheck-cfg,以多种形式校验cfg表达式中的未知名称和值。 docs #10486 #10566 --configCLI 选项不再允许设置 registry token。 #10580- 修复了 proc-macros 与
-Z rustdoc-scrape-examples相关的问题。 #10549 #10533
Cargo 1.61 (2022-05-19)
新增
变更
cargo test --no-run现在会显示测试可执行文件的路径。 #10346cargo tree --duplicates不再将主机与 target 之间共享的依赖报告为重复。 #10466- 更新到 libgit2 的 1.4.2 版本,带来若干修复 #10442 #10479
cargo vendor不再允许为--sync传入多个值,必须改为多次传入--sync标志。 #10448- 现在会对同时混用下划线与短横线变体的 manifest 键发出警告(例如同时指定
proc_macro和proc-macro) #10316 - Cargo 现在使用标准库的
available_parallelism而非num_cpuscrate 来确定默认并行度。 #10427 cargo search的搜索词现在会高亮显示。 #10425
修复
- 传给
hg等 VCS 工具的路径现在会加在--之后,以避免与 VCS 标志冲突。 #10483 - 修复了
http.timeout配置值使其真正生效。 #10456 - 修复了
cargo rustc --crate-type在某些情况下不工作的问题。 #10388
仅 Nightly
- 新增
-Z check-cfg-features以启用 features 的编译期检查 #10408 - 新增
-Z bindeps以支持二进制产物依赖(RFC-3028) #9992 -Z multitarget现在可在build.target配置值中以数组形式使用。 #10473- 新增
--keep-going标志,即使某个 crate 编译失败也会继续编译。 #10383 - 开始在 workspace 中继承 manifest 值的相关工作。 #10497 #10517
- 新增对稀疏 HTTP registries 的支持。 #10470 #10064
- 修复了 artifact target 用于
[target.'cfg(<target>)'.dependencies]时的 panic #10433 - 修复了传给构建脚本的主机标志(
-Z target-applies-to-host) #10395 - 为 rustdoc 新增
-Z check-cfg-features支持 #10428
Cargo 1.60 (2022-04-07)
新增
- 🎉 在
[features]表中新增dep:前缀,用于引用可选依赖。这允许创建与依赖同名的 feature 名称,并允许“隐藏”可选依赖,使其不会隐式暴露一个 feature 名称。 docs #10269 - 🎉 在
[features]表中新增dep-name?/feature-name语法,仅当可选依赖dep-name已被某个其他 feature 启用时,才启用 featurefeature-name。 docs #10269 - 🎉 新增
--timings选项,可生成关于构建耗时、并发与 CPU 使用的 HTML 报告。 docs #10245 - 在 registry index 中新增
"v"和"features2"字段。"v"字段为未来 index 变更提供兼容方法。 docs #10269 - 为
cargo clippy新增 bash 补全 #10347 - 为
cargo report新增 bash 补全 #10295 - 为构建脚本新增对
rustc-link-arg-tests、rustc-link-arg-examples和rustc-link-arg-benches的支持。 docs #10274
变更
- Cargo 现在使用 clap 3 库进行命令行参数解析。 #10265
build.pipelining配置选项现已弃用,pipelining 现在将始终启用。 #10258cargo new现在生成的.gitignore仅忽略仓库根目录下的Cargo.lock,而非任意目录。 #10379- 改进了 bash 补全的启动时间。 #10365
- 与
--all-features标志一起使用时,--features标志现在会被遵循,从而允许启用其他包的 features。 #10337 - Cargo 现在使用不同的 TOML 解析器。这不应引入任何用户可见的变更。这为支持可保留格式的程序化修改 TOML 文件铺平道路,以支持
cargo add及其他未来增强。 #10086 - 将库设置为同时产出
dylib和cdylib现在是错误,因为不支持该组合。 #10243 cargo --list现在包含help命令。 #10300
修复
- 修复了对带有 dev-dependencies 的 examples 运行
cargo doc。 #10341 - 修复了
cargo install --path:当路径相对于当前目录下 workspace 之外的目录时的问题。 #10335 cargo test TEST_FILTER不应再构建被显式以test = false禁用的二进制文件。 #10305- 修复了有
term.verbose而无term.quiet(以及反过来)时的回归。 #10429 #10436
仅 Nightly
- 为 profile 定义新增
rustflags选项。 #10217 - 变更
--config,使其仅支持点分键。 #10176 - 修复了 profile
rustflags在 profile overrides 中未受门控的问题。 #10411 #10413
Cargo 1.59 (2022-02-24)
新增
- 🎉 现在可以在 profile 中指定
strip选项,以指定从二进制文件中移除符号与调试信息的行为。 docs #10088 #10376 - 🎉 新增未来不兼容报告。
这可在
rustc的未来变更可能导致某个包或其任一依赖停止构建时提供报告。 docs #10165 - Windows 上的 SSH 认证现在支持 ssh-agent。 docs #10248
- 新增
term.quiet配置选项,可从配置文件启用--quiet行为。 docs #10152 - 新增
-rCLI 选项,作为--release的别名。 #10133
变更
- 扫描包目录现在应对错误更具韧性,例如文件系统环或访问问题。 #10188 #10214 #10286
cargo help <alias>现在会显示该别名的目标。 #10193- 移除了已弃用的
--hostCLI 选项。 #10145 #10327 - Cargo 现在应报告其版本始终与
rustc同步。 #10178 - 将 EOPNOTSUPP 加入被忽略的文件锁定错误,这与 BSD 操作系统相关。 #10157
修复
- macOS:修复了运行可执行文件会偶发被内核杀死的问题(可能始于 macOS 12)。 #10196
- 修复了依赖的
[lib]定义中doc=false设置会被遵循。 #10201 #10324 - JSON 选项中的
"executable"字段在为二进制文件生成文档时错误地包含了index.html的路径。现在为 null。 #10171 - 为二进制文件生成文档现在会等待包的库完成文档生成后再开始。这修复了若二进制文件对库有 intra-doc 链接时的一些竞态条件。 #10172
- 修复了向已关闭的管道显示帮助文本时的 panic。 #10164
仅 Nightly
- 为
cargo rustc新增--crate-type标志。 #10093
Cargo 1.58 (2022-01-13)
新增
变更
修复
- Doctests 现在会包含来自构建脚本的 rustc-link-args。 #9916
- 修复了
cargo tree在有环状 dev-dependencies 时进入无限循环的问题。 修复了 resolver 无法处理带有 feature 的环状 dev-dependency 的边界情况。 #10103 - 修复了当目录路径包含 glob 字符时的
cargo clean -p。 #10072 - 修复了
cargo的 debug 构建:当服务器重定向带有非空正文时,下载 crate 可能 panic。 #10048
仅 Nightly
- 使 future-incompat-report 输出更友好。 #9953
- 新增支持从
examples目录抓取代码示例以包含在文档中。 docs #9525 #10037 #10017 - 修复了
cargo report future-incompatibilities:检查 stdout 是否支持颜色。 #10024
Cargo 1.57 (2021-12-02)
新增
- 🎉 新增自定义命名 profiles。这也使
test和benchprofiles 从其dev和release继承设置,并且 Cargo 现在在给定命令期间只使用单一 profile,而不再对依赖与 cargo-targets 使用不同 profiles。 docs #9943 - git 依赖的
rev选项现在支持以refs/开头的 git 引用。一个可用示例是在类似 GitHub 的服务上,于拉取请求合并之前依赖它。 #9859 - 在
.cargo_vcs_info.json文件中新增path_in_vcs字段。 docs #9866
变更
- ❗ 构建脚本不再设置
RUSTFLAGS。该变更在 1.55 中已做出,但发布说明未突出强调。构建脚本应改用CARGO_ENCODED_RUSTFLAGS。更多细节见 documentation。 cargo version命令现在包含一些额外信息。 #9968- 将 libgit2 更新到 1.3,带来若干关于 git 处理的修复与变更。 #9963 #9988
- Shell 补全现在包含简写 b/r/c/d 子命令。 #9951
cargo update --precise现在允许指定不含 semver 元数据(版本号中+之后的内容)的版本。 #9945- zsh 补全现在可补全
--example名称。 #9939 - 进度条现在会区分正在构建 unittests 的情况。 #9934
- 对无效 TOML 语法的一些向后兼容支持已被移除。 #9932
- 撤销了 1.55 中对未包含任何字段的依赖规格触发错误的变更。 #9911
修复
- 移除了一条可能泄漏 token 的日志消息(来自
CARGO_LOG)。 #9873 cargo fix现在会避免将修复写入全局 registry 缓存。 #9938- 修复了与简写别名(b/c/r/d)一起使用时的
-Z helpCLI 选项。 #9933
仅 Nightly
Cargo 1.56 (2021-10-21)
新增
- 🎉 Cargo 现在支持 2021 edition。 更多信息见 edition guide。 #9800
- 🎉 在
Cargo.toml中新增rust-version字段以指定最低支持的 Rust 版本,以及用于覆盖它的--ignore-rust-version命令行选项。 #9732 - 在配置文件中新增
[env]表,用于指定要设置的环境变量。 docs #9411 - 现在可在配置文件中指定
[patch]表。 docs #9839 cargo doc现在支持--example和--examples标志。 #9808- 🎉 构建脚本现在可为二进制文件或所有可链接目标传递额外的链接器参数。docs #9557
- 为
cargo publish新增对-p标志的支持,以便发布 workspace 中的特定包。cargo package现在也支持-p和--workspace。 #9559 - 新增关于第三方 registries 的文档。 #9830
- 为 registry
config.json中的 URL 新增{sha256-checksum}占位符。 docs #9801 - 当依赖没有库时新增警告。 #9771
变更
- Doc tests 现在支持
-q标志以显示简洁的测试输出。 #9730 - 在
[replace]表中使用的features现在会发出警告,因为它们会被忽略。 #9681 - 变更使得仅
wasm32-unknown-emscripten可执行文件在文件名中不带 hash 构建。此前是所有wasm32目标。 此外,所有apple二进制文件现在在文件名中带 hash 构建。这允许同时缓存多个副本,并与其他平台(除msvc外)的行为一致。 #9653 cargo new现在生成的 example 不会在 clippy 下产生警告。 #9796cargo fix --edition现在仅应用 edition 特定的 lints。 #9846- 改进 resolver 消息以包含依赖要求。 #9827
cargo fix现在可通过CARGO_LOG环境变量获得更多调试日志。 #9831- 变更
cargo fix --edition:在 stable 上运行且已处于最新 stable edition 时发出警告,而非报错。 #9792 cargo install现在会在开始安装前确定所有要安装的包,这应有助于在未部分安装的情况下报告错误。 #9793cargo fix --edition的 resolver 报告现在包含 dev-dependencies 的差异。 #9803cargo fix现在会对来自rustc的异常错误显示更好的诊断。 #9799cargo --list中的条目现在会去重。 #9773- 别名现在包含在
cargo --list中。 #9764
修复
- 修复了 proc-macro 的 build-std 时的 panic。 #9834
- 修复了在运行
cargo fix时从 proc-macros 递归运行cargo。 #9818 - 对命令别名环返回错误,而非栈溢出。 #9791
- 更新到 curl 7.79.1,希望能修复间歇性的 http2 错误。 #9937
仅 Nightly
- 新增
[future-incompat-report]配置节。 #9774 - 修复了自定义命名 profiles 的 value-after-table 错误。 #9789
- 新增
different-binary-namefeature,以支持为二进制名称指定非 rust 标识符。 docs #9627 - 新增用于选择 codegen backend 的 profile 选项。 docs #9118
Cargo 1.55 (2021-09-09)
新增
cargo metadata中的包定义现在包含来自 manifest 的"default_run"字段。 #9550- ❗ 构建脚本现在可访问以下环境变量:
RUSTC_WRAPPER、RUSTC_WORKSPACE_WRAPPER、CARGO_ENCODED_RUSTFLAGS。 构建脚本不再设置RUSTFLAGS;应改用CARGO_ENCODED_RUSTFLAGS。 docs #9601 - 新增
cargo d作为cargo doc的别名。 #9680 - 在
cargo tree --format选项中新增{lib},以显示包的库名称。 #9663 - 为
WorkspaceAPI 新增members_mut方法。 #9547
变更
- 使用
--all-targets、--bins、--tests、--examples或--benches标志时,若构建命令未匹配任何目标,现在会显示警告以告知没有匹配的目标。 #9549 cargo init检测现有源文件是二进制还是库的方式已变更,改为尊重命令行标志,而不再尝试猜测类型。 #9522- 在可能时现在显示 registry 名称而非 registry URL。 #9632
- 不再显示重复的编译器诊断。这在
cargo test并行构建同一代码的多份副本时经常发生。 这也会更新警告摘要以提供更多上下文。 #9675 - 警告或错误的输出现在已改进,更精简、更清晰,并显示更多上下文。 #9655
- 网络发送错误现在被视为“spurious”,意味着会重试。 #9695
- 非 git 依赖上的 Git 键(
branch、tag、rev)现在是错误。 此外,同时指定git和path现在也是错误。 #9689 - 不带任何键指定依赖现在是错误。 #9686
- resolver 现在在可能时优先使用依赖的
[patch]表条目。 #9639 - 依赖中的包名拼写错误现在会与原文对齐显示,以便更容易看出差异。 #9665
- Windows 平台现在可能对大小写错误的环境变量发出警告。 #9654
- 在
[patch]表中使用的features现在会发出警告,因为它们会被忽略。 #9666 - 在 Windows 上,
target目录现在被排除在内容索引之外。 #9635 - 找不到
Cargo.toml时,错误消息现在会检测是否因小写c而命名错误,并建议正确形式。 #9607 - 使用新 resolver 构建
diesel时会显示兼容性提示。 #9602 - 更新了处理打开网页浏览器的
opener依赖,包含若干变更,例如在 WSL 上运行时的新行为,以及在 Linux 上使用系统的xdg-open。 #9583 - 更新到 libcurl 7.78。 #9809 #9810
修复
- 修复了 dep-info 文件包含非本地构建脚本路径的问题。 #9596
- 处理 cargo 配置文件中 “jobs = 0” 的情况 #9584
- 实现对
--之后被忽略的尾随参数的警告 #9561 - 修复了 rustc/rustdoc 配置值相对于配置的路径解析。 #9566
cargo fix现在支持 rustc 带有多个 spans 的建议。 #9567cargo fix现在串行修复每个目标,而非并行,以避免并发修复同一文件的问题。 #9677- 对目标
linker配置值的变更现在会触发重建。 #9647 - 使用
cargo publish或cargo package的--allow-dirty标志时,现在会忽略 Git 未暂存的已删除文件。 #9645
仅 Nightly
- 启用了对 2021 的
cargo fix --edition支持。 #9588 - 对命名 profiles 的若干变更。 #9685
- 扩展了在 2021 edition 上运行
cargo fix --edition时应做什么的说明。 #9694 - 对使用 nightly features 的错误消息进行多项更新,以更好地解释情况。 #9657
- 调整了 edition 2021 resolver 差异报告。 #9649
- 修复了与
doc.extern-map一起使用cargo doc --open时的错误。 #9531 - 统一了 weak 与 namespaced features。 #9574
- 对 future-incompatible 报告的各项更新。 #9606
[env]环境变量不允许设置由 Cargo 设置的变量。 #9579
Cargo 1.54 (2021-07-29)
新增
- 从 git 仓库(例如 crates.io index)获取时现在会显示网络传输速率。 #9395
- 为
cargo tree新增--prune选项以限制显示内容。 #9520 - 为
cargo tree新增--depth选项以限制显示内容。 #9499 - 新增
cargo tree -e no-proc-macro以隐藏过程宏依赖。 #9488 - 新增
doc.browser配置选项,用于设置用cargo doc --open打开的浏览器。 #9473 - 为集成测试与 benches 新增设置
CARGO_TARGET_TMPDIR环境变量。这在target目录中为测试与 benches 提供临时或“scratch”目录供使用。 #9375
变更
--featuresCLI 标志现在会在新的 feature resolver 下提供拼写建议。 #9420- Cargo 现在对 SemVer 版本使用新的解析器。这应与之前行为大体相同,但有一些小例外:无效的版本要求语法现在会被拒绝。 #9508
- 已发布
.crate包的 mtime 处理略有变更,以避免 mtime 值为 0。这会导致 lldb 拒绝读取这些文件的问题。 #9517 - 改进了
cargo package中 git status 检查的性能。 #9478 - 使用 fossil 的
cargo new现在将 ignore 设置放在新仓库中,而不再使用fossil settings进行全局设置。这也包含若干其他清理,使其与其他 VCS 配置更一致。 #9469 rustc-cdylib-link-arg传递式应用会显示警告:这并非预期行为,未来可能变为错误。 #9563
修复
- 修复了在非 git 仓库中或 vendoring 依赖时,
Cargo.toml中的package.exclude使用反向排除(!somefile)的问题。 #9186 - Dep-info 文件现在会将构建脚本的
rerun-if-changed路径调整为绝对路径。 #9421 - 修复了在 resolver = “1” 时,非虚拟包允许未知 features 的 bug。 #9437
- 修复了 index 缓存错误处理仅构建元数据不同的版本(例如
110.0.0与110.0.0+1.1.0f)的问题。 #9476 - 修复了带有 semver 元数据版本的
cargo install。 #9467
仅 Nightly
- 新增
report子命令,并将cargo describe-future-incompatibilitie变更为cargo report future-incompatibilities。 #9438 - 在配置文件中新增
[host]表,以便能为主机目标设置构建标志。还新增了target-applies-to-host以控制[target]表的行为。 #9322 - 对构建脚本的
rustc-link-arg-*指令增加了一些校验:若目标不存在则返回错误。 #9523 - 为构建脚本新增
cargo:rustc-link-arg-bin指令。 #9486
Cargo 1.53 (2021-06-17)
新增
变更
- 🔥 Cargo 现在支持默认
HEAD分支不是 “master” 的 git 仓库。这还包括切换到可正确处理默认分支的版本 3Cargo.lock格式。 #9133 #9397 #9384 #9392 - 🔥 macOS 目标现在默认使用
unpackedsplit-debuginfo。 #9298 - ❗ 新项目的
Cargo.toml不再包含authors字段。 #9282 cargo update现在可能可与--offline标志一起工作。 #9279cargo doc现在会在切换不同工具链版本时擦除doc目录。存在共享的、未版本化的文件(例如搜索索引),在使用不同版本时可能会损坏。 #8640 #9404- 改进了路径依赖/workspace 成员缺失时的错误消息。 #9368
修复
- 修复了
cargo doc:在变更某些设置(例如 features)时检测是否需要重建文档。 #9419 cargo doc现在会在运行 rustdoc 之前删除该包的输出目录,以清除任何陈旧文件。 #9419- 修复了
-C metadata值始终为所有构建包含全部信息。此前在某些情况下,hash 仅包含包名与版本。这修复了一些问题,例如在 macOS 上使用 split-debuginfo 的增量构建在某些情况下损坏增量缓存。 #9418 - 修复了若
PATH中有man,Windows 上 man pages 不工作的问题。 #9378 rustc缓存现在会感知RUSTC_WRAPPER和RUSTC_WORKSPACE_WRAPPER。 #9348- 若代码使用
env!("CARGO"),则在重建指纹中跟踪CARGO环境变量。 #9363
仅 Nightly
- 修复了 config includes 不工作的问题。 #9299
- 当
--future-incompat-report无可报告内容时发出 note。 #9263 - nightly features 标志(如
-Z和cargo-features)的错误消息现在提供更多信息。 #9290 - 新增在
Cargo.toml中为单个包设置 target 的能力。 docs #9030 - 修复了 build-std 每次构建都更新 index 的问题。 #9393
-Z help现在显示所有-Z选项。 #9369- 新增
-Zallow-features以指定允许使用哪些 nightly features。 #9283 - 新增
cargo config子命令。 #9302
Cargo 1.52 (2021-05-06)
新增
变更
- 现在禁止构建脚本在稳定版上设置
RUSTC_BOOTSTRAP。 #9181 #9385 - crates.io 现在支持 SPDX 3.11 许可证。 #9209
- 若
CARGO_TARGET_DIR为空字符串,现在会报告错误。 #8939 - 文档测试现在会将
--message-format标志传入测试,因此 “short” 格式现在也可用于文档测试。 #9128 cargo test现在会更清晰地指示当前正在运行的 target。 #9195- 若
CARGO_TARGET_<TRIPLE>环境变量使用小写字母, 现在会发出警告。 #9169
修复
- 修复了带有 metadata 与 resolver 字段的包在
Cargo.toml中的发布。 #9300 #9304 - 修复了确定 dylib 的 prefer-dynamic 时,在工作区与 单个包之间逻辑不一致的问题。 #9252
- 修复了排他的目标专用依赖在不同依赖种类之间重叠 (如普通依赖与 build-dependencies)时,会错误地 同时包含在两者中的问题。 #9255
- 修复了向
-p标志传入某些样式的 Package ID 时的 panic。 #9188 - 当运行 cargo 且输出未到 TTY,但强制启用进度条 与颜色时,输出现在会正确清除进度行。 #9231
- 当 JSON 可能包含非 utf8 路径时返回错误而非 panic。 #9226
- 修复了在损坏的 stderr 上可能发生的挂起。 #9201
- 修复了设置
lto=off时 thin-local LTO 未正确禁用的问题。 #9182
仅 Nightly
stripprofile 选项现在支持true和false值。 #9153- 切换到 2021 时,若新解析器更改了 features,
cargo fix --edition现在会显示报告。 #9268 - 在
.cargo/config文件中新增[patch]表支持。 #9204 - 新增
cargo describe-future-incompatibilities,用于生成 含有未来不兼容警告的依赖报告。 #8825 - 新增更便捷的 2021 edition 测试支持。 #9184
- 在 2021 edition 中将默认解析器切换为 “2”。 #9184
cargo fix --edition现在支持 2021。 #9184- 为
cargo rustc新增--print标志,以传递给rustc显示来自 rustc 的信息。 #9002 - 新增
-Zdoctest-in-workspace,用于更改 doctest 运行 与 编译 所在目录。 #9105 - 支持在
.cargo/config.toml中使用[env]节,以便在 运行 cargo 时设置环境变量。 #9175 - 为索引新增 schema 字段与
features2字段。 #9161 - 更改 JSON spec target 现在会触发重建。 #9223
Cargo 1.51 (2021-03-25)
新增
- 🔥 新增
split-debuginfoprofile 选项。 docs #9112 - 为
cargo metadata的包依赖列表新增path字段, 以显示 “path” 依赖的路径。 #8994 - 🔥 新增 feature 解析器,以及新的 CLI feature 标志行为。参见
新的 features
与 resolver
文档中关于
resolver = "2"选项的说明。参见 CLI 与 resolver 2 CLI 选项了解新的 CLI 行为。最后,参见 RFC 2957 以详细了解变更内容。 #8997
变更
- 若未找到
Cargo.lock,cargo install --locked现在会发出警告。 #9108 - 在命令行传入未知或歧义的 package ID 时,现在会显示 正确 package ID 的建议。 #9095
- 轻微优化
cargo vendor#8937 #9131 #9132
修复
- 修复了构建脚本发出的环境变量与 cfg 设置:当构建脚本
在同一构建会话中多次运行时,这些设置会用于
cargo test与cargo run。 #9122 - 修复了
cargo doc与新 feature 解析器的 panic。这还 引入了一些启发式方法,尝试通过在存在多个变体时 仅文档化包的一个变体(例如多个版本,或同一包 同时用于 host 与 target 平台)来避免与rustdoc的路径冲突。 #9077 - 修复了 Cargo 循环依赖图检测中导致栈溢出的 bug。 #9075
- 修复了某些情况下构建脚本
links环境变量(DEP_*) 在测试包中未出现的问题。 #9065 - 修复了在使用
resolver="2"构建含有 proc-macro 的整个工作区 及全部 target 的特定场景下,features 以非确定性方式 被选择的问题。 #9059 - 修复为使用
~/.gitconfig中的http.proxy设置。 #8986 - 修复了 V1 解析器对非成员的 –feature pkg/feat。 #9275 #9277
- 修复了工作区中输出文件名冲突时
cargo doc的 panic。 #9276 #9277 - 修复了在多个包中有一个安装失败时,
cargo install仍以成功退出的问题。 #9185 #9196 - 修复文档冲突孤儿导致的 panic。 #9142 #9196
仅 Nightly
- 移除了
publish-lockfile不稳定功能,它在 1.5 年前 无需显式标志即已稳定。 #9092 - 为 nightly 功能(例如通过
-Z标志传入,或在Cargo.toml中用cargo-features指定的功能)新增更好的诊断、 帮助消息与文档。 #9092 - 新增对 Rust edition 2021 的支持。 #8922
- 新增对项目元数据中
rust-version字段的支持。 #8037 - 为索引新增 schema 字段。 #9161 #9196
Cargo 1.50 (2021-02-11)
新增
- 为
cargo metadata新增doc字段,用于指示 target 是否被文档化。 #8869 - 新增
RUSTC_WORKSPACE_WRAPPER,一种仅对本地工作区包运行的 备用 RUSTC 包装器,并独立于非包装构建缓存其产物。 #8976 - 为
cargo update新增--workspace,仅更新工作区成员, 而不更新其依赖。若你更新了Cargo.toml中的版本并希望 更新Cargo.lock而不运行其他命令,这尤其有用。 #8725
变更
- 上传到注册表的
.crate文件现在以可复现设置构建, 因此在不同机器上创建的相同.crate文件 应完全一致。 #8864 - 指定了
branch、tag或rev中不止一项的 Git 依赖 现在会被拒绝。 #8984 rerun-if-changed构建脚本指令现在可以指向目录, 此时 Cargo 会检查该目录中是否有任何文件发生变化。 #8973- 若 Cargo 无法确定用户名或电子邮件地址,
cargo new将 不再失败,而是创建空的 authors 列表。 #8912 - 进度条宽度已减小,以便有更多空间显示 当前正在构建的 crate。 #8892
cargo new现在将支持.gitconfig中的includeIf指令, 以便在确定用户名和电子邮件地址时匹配正确的目录。 #8886
修复
- 修复了
cargo metadata与cargo tree,使其仅下载 所请求 target 的包。 #8987 - 更新了 libgit2,带来许多修复,尤其是修复了 偶尔出现在 32 位系统上的 zlib 错误。 #8998
- 修复了使用
links字段的循环开发依赖导致的栈溢出。 #8969 - 修复了在某些文件系统上
cargo publish失败的问题,尤其是 WSL2 上的 9p。 #8950
仅 Nightly
- 允许用
resolver="1"指定原始的 feature 解析行为。 #8857 - 新增
-Z extra-link-arg,添加cargo:rustc-link-arg-bins与cargo:rustc-link-arg构建脚本选项。 docs #8441 - 实现了外部凭据进程支持,并新增
cargo logout。 (RFC 2730) (docs) #8934 - 修复了
-Zbuild-std且无根时的 panic。 #8942 - 将 docs.rs 设为 crates.io 的默认 extern-map #8877
Cargo 1.49 (2020-12-31)
新增
- 为
cargo metadata新增homepage与documentation字段。 #8744 - 新增
CARGO_PRIMARY_PACKAGE环境变量:当包是命令行上 选中的 “root” 包之一时,在运行rustc时会设置该变量。 #8758 - 新增对命令行上包与 target 选择标志的 Unix 风格 glob 模式支持
(例如
-p 'serde*'或--test '*')。 #8752
变更
- 计算出的 LTO 标志现在包含在文件名元数据哈希中,因此
LTO 设置的更改会独立缓存构建产物,而不是
覆盖先前的产物。这可在某些情况下防止重建,例如
在某些情形下在
cargo build与cargo test之间切换。 #8755 cargo tree现在会在 proc-macro 包旁显示(proc-macro)。 #8765- 新增警告:feature 名称允许的字符已限制为字母、数字、
_、-和+,以适应未来的语法更改。这仍是 crates.io 允许语法的超集,后者要求 ASCII。计划在未来 将其改为错误。 #8814 - 不带值的
-p现在会打印工作区包名列表。 #8808 - 将句点加入允许的 feature 名称字符。 #8932 #8943
修复
- 修复了在启用 LTO 时同时构建 “dylib” 与 “rlib” crate 类型的库。 #8754
- 修复了 Cargo dep-info 文件中的路径。 #8819
- 修复了显式指定
branch="master"的 git 依赖在cargo metadata中源 ID 不一致的问题。 #8824 - 修复了重新解压包含
.cargo-ok文件的依赖。 #8835
仅 Nightly
- 修复了某些情况下
cargo doc -Zfeatures=itarget的 panic。 #8777 - 命名空间 features 的新实现,使用语法
dep:serde。 docs #8799 - 新增对 “弱” 依赖 features 的支持,使用语法
dep_name?/feat_name,可在不为依赖启用依赖本身的情况下 启用依赖的 feature。 #8818 - 修复了新 feature 解析器下载并非严格必要的额外依赖的问题。 #8823
Cargo 1.48 (2020-11-19)
新增
- 新增
term.progress配置选项,用于控制进度条 何时以及如何显示。 docs #8165 - 为
cargo locate-project新增--message-format plain选项, 以不使用 JSON 显示项目位置,便于在脚本中使用。 #8707 - 为
cargo locate-project新增--workspace选项,以显示 工作区清单的路径。 #8712 - 新增了关于为 Cargo 本身做贡献的贡献者指南。 发布于 https://rust-lang.github.io/cargo/contrib/。 #8715
- Zsh
--target补全现在会补全内置的 rustc target。 #8740
变更
修复
- 修复了
cargo new创建 fossil 仓库时正确忽略target目录。 #8671 - 使用
cargo install安装远程包时,不显示关于 当前目录工作区的警告。 #8681 - 在 git 仓库中遇到 “Object not found” 错误时 自动重新初始化索引。 #8735
- 更新了 libgit2,带来若干 git 仓库处理修复。 #8778 #8780
仅 Nightly
- 修复了
cargo install,使其忽略本地配置文件中的[unstable]表。 #8656 - 修复了新 feature 解析器的非确定性行为。 #8701
- 修复了在特定情形组合下,对新 feature 解析器对
proc-macro 运行
cargo test的问题。 #8742
Cargo 1.47 (2020-10-08)
新增
cargo doc现在会在左侧边栏包含包的版本。 #8509- 为
cargo metadata的 target 新增test字段。 #8478 - Cargo 的 man 页面现在可通过
cargo help命令显示(例如cargo help build)。 #8456 #8577 - 新增关于依赖解析如何工作 与 SemVer 兼容性 的新文档章节,以及关于如何为项目版本化并与 依赖协作的建议。 #8609
变更
- 修改
.gitignore时添加的注释已微调, 增加了一些间距。 #8476 cargo metadata输出现在应被排序以保证确定性。 #8489- 默认情况下,构建脚本与 proc-macro 现在以
opt-level=0与默认 codegen units 构建,即使在 release 模式下也是如此。 #8500 workspace.default-members现在由workspace.exclude过滤。 #8485workspace.membersglob 现在忽略非目录路径。 #8511- git zlib 错误现在会触发重试。 #8520
- “http” 类 git 错误现在会触发重试。 #8553
- git 依赖现在会覆盖
core.autocrlfgit 配置值, 以确保跨平台行为一致,尤其是在 Windows 上 vendor git 依赖时。 #8523 - 若需要更新
Cargo.lock,则会自动 过渡到新的 V2 格式。该格式移除了[metadata]表,应更容易在源码控制系统中合并更改。此 格式在 1.38 中引入,并在 1.41 中成为新项目的 默认格式。 #8554 - 为支持默认分支非 “master” 的 git 仓库做了准备。
实际支持将在未来版本中到来。这引入了一些警告:
- 若 git 依赖未指定分支,且仓库的默认分支 不是 “master”,则警告。未来 Cargo 将获取 默认分支。在此场景下,应显式指定分支。
- 若工作区对同一 git 仓库有多个依赖,
一个没有
branch,一个有branch="master",则警告。依赖应 全部使用其中一种形式。 #8522
- 若
required-features条目列出不存在的 feature, 现在会发出警告。 #7950 - 内置别名现在包含在
cargo --list中。 #8542 - 对已被 yank 的特定版本执行
cargo install时,现在会 显示该版本已被 yank 的错误消息,而不是 “could not find”。 #8565 - 对
publish字段设为单个注册表、且未给出--registry标志的包执行cargo publish时,现在会发布到该 注册表,而不是生成错误。 #8571
修复
- 修复了项目目录被移动,且某个构建脚本
未使用
rerun-if-changed指令时,该构建脚本 被不应重建却重建的问题。 #8497 - 控制台颜色现在应在 Windows 7 和 8 上工作。 #8540
CARGO_TARGET_{triplet}_RUNNER环境变量现在会正确 覆盖配置文件,而不是尝试合并命令。 #8629- 修复了 doctest 的 LTO。 #8657 #8658
仅 Nightly
- 新增对
-Z terminal-width的支持,该选项告诉rustc终端 宽度,以便更好地格式化诊断信息。 docs #8427 - 新增通过配置文件中
[unstable]表配置-Z不稳定标志的能力。 docs #8393 - 新增
-Z build-std-features标志,用于设置标准库的 features。 docs #8490
Cargo 1.46 (2020-08-27)
新增
- 注册表索引
config.json中的dl键现在支持替换标记{prefix}与{lowerprefix},以允许将 crate 分散到多个目录,类似于索引本身的结构。 docs #8267 - 新增在编译期间设置的环境变量:
- 若
Cargo.toml中未指定readme的值,现在会根据是否存在 名为README、README.md或README.txt的文件自动推断。 可通过设置readme = false来抑制此行为。 #8277 cargo install现在支持--index标志以直接从索引安装。 #8344- 在
Cargo.toml的workspace定义中新增metadata表。 可用于任意数据,类似于package.metadata表。 #8323 - 为
cargo install新增--target-dir标志以设置目标目录。 #8391 - 由
env!或option_env!宏 使用的环境变量发生变化时,现在会自动检测并触发重建。 #8421 target目录现在包含CACHEDIR.TAG文件,供某些工具 用于将该目录排除在备份之外。 #8378- 新增关于 rustup 的
+toolchain语法的文档。 #8455
变更
- 若 git 依赖的 URL 包含
#片段,现在会显示警告。 这可能令人困惑,因为 Cargo 自身会以该语法显示 git URL,但它在Cargo.lock文件之外没有任何含义, 且无法正常工作。 #8297 - 对 bitcode 嵌入与 LTO 的各种优化与修复。 #8349
- 减少了为 git 依赖获取的数据量。若 Cargo 知道要获取的 分支或标签,现在将仅获取该分支或标签,而不是 所有分支和标签。 #8363
- 增强了 git fetch 错误消息。 #8409
.crate文件现在以 GNU tar 格式生成,而非 UStar, 以支持更长的文件名。 #8453
修复
- 修复了罕见情况:对
Cargo.lock的更新失败一次,但随后 再次运行却允许继续。 #8274 - 移除了 Windows dylib 必须具有
.dll扩展名的断言。某些 自定义 JSON spec target 可能会更改扩展名。 #8310 - 更新了 libgit2,带来对某些远程 git 服务器(如 googlesource.com) zlib 错误的修复。 #8320
- 修复了非 master 分支上已是最新的 git 依赖的 GitHub 快速路径检查。 #8363
- 修复了使用
pkg/feature语法启用 feature,且pkg是 可选依赖,同时又是开发依赖,且开发依赖在注册表摘要中 出现在可选普通依赖之前时,可选依赖不会被激活的问题。 #8395 - 修复了若存在名为
build的测试时,clean -p会删除 构建目录的问题。 #8398 - 修复了多行 Cargo 错误消息的缩进。 #8409
- 修复了为 rustdoc 自动包含
--document-private-items标志会覆盖传给cargo rustdoc命令的任何标志的问题。 #8449 - Cargo 现在会在指纹目录的哈希中包含版本, 以支持对指纹结构的向后不兼容更改。 #8473 #8488
仅 Nightly
- 新增
-Zrustdoc-map功能,为 rustdoc 提供外部映射 (例如 https://docs.rs/ 链接)。 docs #8287 - 修复了在
Cargo.toml中用下划线声明 proc-macro (如proc_macro = true)时的 feature 计算。 #8319 - 新增通过
-Zdoctest-xcompile设置-Clinker的支持。 #8359 - 修复了在配置文件中设置
stripprofile 字段。 #8454
Cargo 1.45 (2020-07-16)
新增
变更
更改官方文档,推荐使用
.cargo/config.toml文件名 (带.toml扩展名)。.toml扩展名支持在 1.39 中添加。 #8121不再允许
registry.index配置值(已弃用 4 年)。 #7973若同时传入
--index与--registry则生成错误 (此前--index会被静默忽略)。 #7973使用
--index标志时不再使用registry.token配置值。 这旨在避免将 crates.io 令牌潜在地泄露到另一个 注册表。 #7973若
registry.token与源替换一起使用,则新增警告。计划 在未来版本中将其变为错误。 #7973Windows GNU target 现在会将 DLL crate 类型的
.dll.a导入库文件 复制到输出目录。 #8141所有依赖的 dylib 现在无条件复制到输出目录。某些 晦涩场景可能导致构建之间引用旧的 dylib,这可确保 使用所有最新副本。 #8139
package.exclude现在可以匹配目录名。若指定了目录, 整个目录将被排除,Cargo 不会再尝试进一步检查它。 此前 Cargo 会尝试检查目录中的每个文件,若目录包含 不可读文件则可能出问题。 #8095使用
cargo publish或cargo package打包时,Cargo 可用 git 指导其决定包含哪些文件。此前此基于 git 的逻辑要求 仓库根目录存在Cargo.toml文件。现在不再要求,因此 即使仓库根目录没有Cargo.toml,Cargo 也将使用基于 git 的指导。 #8095在 Windows 上解压 crate 时,若因文件是保留的 Windows 文件名(如 “aux.rs”)而无法写入文件,Cargo 将显示 额外消息解释失败原因。 #8136
现在忽略设置文件 mtime 的失败。某些文件系统不支持此操作。 #8185
某些类别的 git 错误现在会建议启用
net.git-fetch-with-cli。 #8166进行 LTO 构建时,Cargo 现在会在可能的情况下指示 rustc 不执行 codegen。这可能带来更快的构建并使用更少的磁盘 空间。此外,对于非 LTO 构建,Cargo 会指示 rustc 不在 库中嵌入 LLVM bitcode,这应减小其大小。 #8192 #8226 #8254
cargo clean -p的实现已重写,以便能更准确地 移除特定包的文件。 #8210Cargo 计算构建输出的方式已重写,使其更完整、更准确。 新跟踪的文件会显示在 JSON 消息中,并在某些情况下可能 被提升到输出目录。由此产生的部分变更包括:
- 现在跟踪 Windows MSVC 动态库上的
.exp导出文件。 - Windows 上的 Proc-macro 跟踪导入/导出文件。
- 所有生成单独调试文件(pdb/dSYM)的 target (如测试等)均被跟踪。
- 为 wasm32-unknown-emscripten 新增 .map 文件。
- 跟踪所有动态库(dylib/cdylib/proc-macro)以及 构建脚本的 macOS dSYM 目录。
由此还有多种其他变更:
- 带连字符的 Windows MSVC 二进制示例现在会在
examples 目录中出现两次(
foo_bar.exe与foo-bar.exe)。此前 Cargo 只是重命名文件而不是硬链接它。 - 示例库现在遵循与普通库相同的连字符/下划线 转换规则(现在将使用下划线)。
- 现在跟踪 Windows MSVC 动态库上的
Cargo 尝试从 HTTP 调试的调试日志中清除任何机密。 #8222
已为 Cargo 的许多文件系统操作添加上下文,因此 错误消息现在提供更多信息,例如导致问题的路径。 #8232
若干命令现在在运行时若 stdout 或 stderr 被关闭则忽略该错误。 例如
cargo install --list | grep -q cargo-fuzz此前有时会 panic,因为grep -q可能在命令完成前关闭 stdout。常规构建 在 stdout 或 stderr 关闭时仍会失败,与许多其他构建系统的行为一致。 #8236若
cargo install给定确切版本,如--version=1.2.3,且 该版本已安装,现在将避免更新索引,并快速退出 指示已安装。 #8022对
[patch]节的更改现在会尝试自动将Cargo.lock更新到新版本。在无法自动更新的罕见情况下, 现在也应提供更好的错误消息。 #8248
修复
- 修复了文件名包含破折号时,将 Windows
.pdb文件 复制到输出目录的问题。 #8123 - 修复了当包的任一祖先路径为符号链接时,Cargo 在扫描 包是否位于 git 仓库内会失败的错误。 #8186
- 修复了带有未使用
[patch]的cargo update,使其不会 卡住并拒绝更新。 #8243 - 修复了若 stderr 被关闭且编译器生成大量消息时, Cargo 会挂起的情况。 #8247
- 修复了 macOS 上回溯不显示文件名或行号的问题。作为 其后果,apple target 上的二进制可执行文件在 Cargo 缓存中 文件名不包含哈希。这意味着 Cargo 只能跟踪一份副本, 因此若切换 feature 或 rustc 版本,Cargo 将需要 重建可执行文件。 #8329 #8335
- 修复了在 Windows 上对 dylib 使用 lld 时的指纹识别。Cargo 曾错误地认为 dylib 永远不新鲜。 #8290 #8335
仅 Nightly
- 修复了使用 JSON spec target 时向
rustdoc传递--target完整路径的问题。 #8094 -Cembed-bitcode=no重命名为-Cbitcode-in-rlib=no#8134- 在
Cargo.toml中新增resolver字段,以选择加入新的 feature 解析器。 #8129 -Zbuild-std不再将 std 依赖视为 “local”。这意味着它 不会对这些依赖使用增量编译,将它们从 dep-info 文件中 移除,并将 lint 上限设为 “allow”。 #8177- 新增
-Zmultitarget,允许使用多个--target标志一次为 多个 target 构建同一内容。 docs #8167 - 为 profile 新增
strip选项,以移除符号与调试信息。 docs #8246 - 修复了
cargo tree --target=all -Zfeatures=all的 panic。 #8269
Cargo 1.44 (2020-06-04)
新增
- 🔥 新增
cargo tree命令。 docs #8062 - 若包具有 Windows 受限文件名(如
nul、con、aux、prn等),则新增警告。 #7959 - 编译完成时新增
"build-finished"JSON 消息,以便工具 能检测何时可停止监听像cargo run或cargo test这类命令的 JSON 消息。 #8069
变更
- 有效包名现在限制为 Unicode XID 标识符。这与
之前大体相同,但包名不能以数字或
-开头。 #7959 cargo new与init将警告或拒绝额外的包名 (保留的 Windows 名称、保留的 Cargo 目录、非 ASCII 名称、 与 std 冲突的名称如core等)。 #7959- 测试不再硬链接到输出目录(
target/debug/)。 这确保工具能访问调试符号,并以与 Cargo 相同的方式 执行测试。工具应使用 JSON 消息发现可执行文件路径。 #7965 - 更新 git 子模块时,现在为每个子模块显示 “Updating” 消息。 #7989
- 解压
.crate文件时现在保留文件修改时间。 这撤销了 1.40 中不保留 mtime 的更改。 #7935 - 构建脚本失败时,构建脚本警告现在单独显示。 #8017
- 移除了
git-checkout子命令。 #8040 - 进度条现在对所有 unix 平台启用。此前仅在 Linux、macOS 与 FreeBSD 上启用。 #8054
- 由预发布版本的
rustc生成的产物现在共享相同的 文件名。这意味着更改 nightly 版本不会在构建目录中 留下过时文件。 #8073 - 使用重命名依赖时拒绝无效包名。 #8090
- 将某类 HTTP2 错误添加为 “spurious”,将进行重试。 #8102
- 允许
cargo package --list成功,即使存在其他验证 错误(例如Cargo.lock生成问题,或缺少依赖)。 #8175 #8215
修复
- Cargo 不再在内存中缓冲过量的编译器输出。 #7838
- git 仓库中的符号链接现在在 Windows 上可用。 #7996
- 修复了当
Cargo.toml中未定义devprofile 时, 使用cargo test不会从配置文件加载profile.dev的问题。 #8012 - 当二进制作为集成测试的隐式依赖构建时,
现在会正确检查
required-features中的dep_name/feature_name语法。 #8020 - 修复了当先前构建被 Ctrl-C 中断时,Cargo 无法检测 可执行文件(如集成测试)需要重建的问题。 #8087
- 防范某些(未知)情况下,当系统单调时钟看起来不单调时 Cargo 可能 panic 的情况。 #8114
- 修复了若包有构建脚本时
cargo clean -p的 panic。 #8216
仅 Nightly
- 修复了新 feature 解析器与 required-features 的 panic。 #7962
- 新增
RUSTC_WORKSPACE_WRAPPER环境变量,提供一种仅对 工作区成员包装rustc的方式,并影响文件名哈希,使 包装器产生的产物单独缓存。此用法可在 nightly clippy 中通过cargo clippy -Zunstable-options看到。 #7533 - 新增
--unit-graphCLI 选项,以 JSON 显示 Cargo 的内部 依赖图。 #7977 - 将
-Zbuild_dep更改为-Zhost_dep,并将 proc-macro 加入 feature 解耦逻辑。 #8003 #8028 - 修复了当
RUSTDOCFLAGS中已有该标志时,不再自动传递--crate-version。 #8014 - 修复了
-Zfeatures=dev_dep与check --profile=test的 panic。 #8027 - 修复了
-Zfeatures=itarget与某些 host 依赖的 panic。 #8048 - 新增对
-Cembed-bitcode=no的支持,为非 LTO 构建提供 性能提升与磁盘空间使用减少。 #8066 -Zpackage-features已扩展若干更改,旨在使 在工作区中于命令行选择 feature 更容易。 #8074
Cargo 1.43 (2020-04-23)
新增
- 🔥 Profile 现在可在配置文件(及环境变量)中指定。 docs #7823
- ❗ 构建集成测试时新增
CARGO_BIN_EXE_<name>环境变量。 该变量包含包中任何[[bin]]target 的路径。集成测试应使用env!宏确定要执行的二进制文件路径。 docs #7697
变更
cargo install --git现在会尊重 git 仓库中的工作区。这允许 使用工作区设置,如[patch]、[replace]或[profile]。 #7768cargo new现在会对新文件运行rustfmt,以获取 rustfmt 设置如tab_spaces,从而使新文件匹配用户偏好的缩进设置。 #7827- 以 “very verbose” 输出(
-vv)打印的环境变量现在 会一致排序。 #7877 - 指纹重建检测的调试日志现在包含更多信息。 #7888 #7890 #7952
- 发布时若 license-file 不存在则新增警告。 #7905
- 发布时自动包含
license-file文件,即使它未在include列表中显式列出,或位于包根目录之外。 #7905 - 运行构建脚本时不再设置
CARGO_CFG_DEBUG_ASSERTIONS与CARGO_CFG_PROC_MACRO。过去曾无意设置它们,但 因始终为 true 而无意义。此外,target表达式中 不再支持cfg(proc-macro)。 #7943 #7970
修复
- 全局命令行标志现在可与别名一起工作(如
cargo -v b)。 #7837 - 使用依赖语法(如
renamed_dep/feat_name)的 Required-features 现在能正确处理重命名依赖。 #7855 - 修复了罕见情况:若构建脚本在同一构建中多次运行, Cargo 现在会分开保留结果,而不是丢失第一次执行的输出。 #7857
- 修复了将环境变量
CARGO_TARGET_*_RUNNER=true错误解释为布尔值的问题。同时改进了相关环境变量 错误消息。 #7891 - 更新了内部 libgit2 库,为 git 支持带来各种修复。 #7939
cargo package/cargo publish应不再将每个文件的 全部内容缓冲到内存中。 #7946- 在 git 依赖中忽略更多无效的
Cargo.toml文件。Cargo 当前 会遍历整个仓库以查找请求的包。某些无效清单此前已跳过, 现在应跳过全部。 #7947
仅 Nightly
- 新增
build.out-dir配置变量以设置输出目录。 #7810 - 新增
-Zjobserver-per-rustc功能,以支持并行 rustc 的 性能改进。 #7731 - 修复了
build-std与诸如cc的 crate 的文件名冲突。 #7860 -Ztimings现在即使有错误也会保存其报告。 #7872- 更新了
--config命令行标志,以支持接受要加载的 配置文件路径。 #7901 - 新增了新的 feature 解析器。 #7820
- Rustdoc 文档现在自动在侧边栏包含包的版本
(需要
-Z crate-versions标志)。 #7903
Cargo 1.42 (2020-03-12)
新增
- 新增了关于 git 身份验证的文档。 #7658
- crates.io 现已支持 Bitbucket Pipeline 徽章。 #7663
cargo vendor现已接受--versioned-dirs选项,强制在每个包的目录名中 始终包含版本号。 #7631proc_macrocrate 现已自动加入 proc-macro 包的 extern prelude。 这意味着 proc-macro 不再需要extern crate proc_macro;。 #7700
变更
- 若在
cfg()表达式中使用debug_assertions、test、proc_macro或feature=, 将发出警告。 #7660 - 大幅更新 Cargo 文档,新增关于 Cargo targets、workspaces 与 features 的章节。 #7733
- Windows:
.libDLL 导入库现已对所有 Windows MSVC target 复制到 dll 旁。 此前仅支持pc-windows-msvc。这为uwp-windows-msvctarget 增加了 DLL 支持。 #7758 [target]配置中的ar字段不再被读取。该字段已被忽略超过 4 年。 #7763- 简化并更新了 Bash 补全文件以适配最新变更。 #7789
- 凭证仅在需要时加载,而不再在每次 Cargo 命令时加载。 #7774
修复
- 移除了
--offline空索引检查,该检查在某些情况下会产生误报。 #7655 - 以
.开头的文件和目录现可通过将其加入include列表而包含在包中。 #7680 - 修复了当凭证文件中已有先前条目时,
cargo login会移除备用 registry token 的问题。 #7708 - 修复了
cargo vendor在与备用 registry 一起使用时会 panic 的问题。 #7718 - 修复了 fingerprint 调试日志消息中不正确的说明。 #7749
- 多次定义的
[source]现将导致错误。 此前会随机选择一个 source,可能导致非确定性行为。 #7751 cargo metadata中的dep_kinds现已去重。 #7756- 修复了在 git 仓库子目录的
.gitignore中列出Cargo.lock时的打包问题。 此前假定Cargo.lock位于仓库根目录。 #7779 - 部分文件传输错误现将触发自动重试。 #7788
- Linux:修复了 CPU iowait 统计下降时的 panic。 #7803
- 修复了通过
RUSTFLAGS传入--sysroot时,用于检测主机编译器设置的 sysroot 不正确的问题。 #7798
仅 Nightly
build-std现使用--extern而非--sysroot来查找 sysroot 包。 #7699- 新增
--config命令行选项以设置配置项。 #7649 - 新增
include配置项,允许包含另一个配置文件。 #7649 - 配置文件中的 profiles 现已支持任意命名的 profile。此前仅限于 dev/release。 #7750
Cargo 1.41 (2020-01-30)
新增
- 🔥 Cargo 现使用新的
Cargo.lock文件格式。该新格式应 支持在源代码控制系统中更轻松地合并。使用旧格式的项目将继续使用旧格式,只有新的Cargo.lock文件会 使用新格式。 #7579 - 🔥
cargo install现将升级已安装的包,而不再失败。 #7560 - 🔥 已添加 profile 覆盖。这允许为单个依赖或构建脚本覆盖 profiles。详见文档。 #7591
- 新增了构建脚本的文档。 #7565
- 新增了 Cargo JSON 输出的文档。 #7595
- 大幅扩充了配置与环境变量文档。 #7650
- 恢复对
cargo doc --open的BROWSER环境变量支持。 #7576 - 在
cargo metadata的依赖中新增了kind与platform。 #7132 OUT_DIR值现已包含在build-script-executedJSON 消息中。 #7622
变更
cargo doc现默认会为二进制目标中的私有项生成文档。 #7593- 子命令拼写错误建议现包含别名。 #7486
- 调整了向
.gitignore添加 “already existing…” 注释的方式。 #7570 - 忽略 token 中因复制粘贴而来的
cargo login文本。 #7588 - Windows:当文件系统不支持锁定文件时忽略相关错误。 #7602
- 从
.gitignore中移除**/*.rs.bk。 #7647
修复
仅 Nightly
Cargo 1.40 (2019-12-19)
新增
- 新增
http.ssl-version配置选项以控制 TLS 版本, 以及最小/最大版本。 #7308 - 🔥 编译器警告现已缓存到磁盘。若构建产生警告, 重新运行构建现将重新显示这些警告。 #7450
- 为
cargo metadata新增--filter-platform选项,可将解析器图中显示的节点 缩小为仅包含给定目标三元组所包含的包。 #7376
变更
- Cargo 的 “platform”
cfg解析已提取到名为cargo-platform的独立 crate 中。 #7375 - 提取到 Cargo 缓存中的依赖不再保留 mtimes,以减少系统调用开销。 #7465
- Windows:EXE 文件名不再包含元数据哈希。 这有助于调试器将文件名与 PDB 文件关联。 #7400
- Wasm32:
.wasm文件不再被视为 “executable”,从而使cargo test与cargo run能与生成的.js文件正常工作。 #7476 - crates.io 现已支持 SPDX 3.6 许可证。 #7481
- 改进了循环依赖错误消息。 #7470
- 裸
cargo clean不再锁定包缓存。 #7502 cargo publish现允许发布没有 version 键的 dev-dependencies。 仅含 git 或 path 的 dev-dependency 将在上传前从包清单中移除。 #7333- 在虚拟 workspace 根目录使用
--features与--no-default-features现将产生错误,而不再被忽略。 #7507 - 包归档中生成的文件(如
Cargo.toml与Cargo.lock) 的时间戳现设为当前时间,而非纪元起点。 #7523 -Z标志解析器现更加严格,会拒绝更多无效语法。 #7531
修复
- 修复了当包有
include字段、.gitignore中有Cargo.lock、 且有二进制或 example 目标、并且当前项目中存在Cargo.lock时, 发布会失败并抱怨Cargo.lock为 dirty 的问题。 #7448 - 修复了特定
[patch]条目组合下的 panic。 #7452 - Windows:当
cargo test或rustc以异常方式崩溃(如信号或段错误)时,提供更好的错误消息。 #7535
仅 Nightly
mtime-on-use功能现可通过unstable.mtime_on_use配置选项启用。 #7411- 新增对命名 profiles 的支持。 #6989
- 新增
-Zpanic-abort-tests,允许以 “abort” panic 策略构建并运行测试。 #7460 - 将
build-std改为使用--sysroot。 #7421 - 对
-Ztimings的多项修复与增强。 #7395 #7398 #7397 #7403 #7428 #7429 - Profile 覆盖已将语法重命名为
[profile.dev.package.NAME]。 #7504 - 修复了 workspace 中未使用的 profile 覆盖的警告。 #7536
Cargo 1.39 (2019-11-07)
新增
- 配置文件现可使用
.toml文件名扩展名。 #7295 - 已添加
--workspace标志作为--all的别名,以帮助避免对 “all” 含义的混淆。 #7241 publish字段已添加到cargo metadata。 #7354
变更
- 若解析来自
rustc的输出失败,显示更多信息。 #7236 - TOML 错误现显示列号。 #7248
cargo vendor不再删除vendor目录中以.开头的文件。 #7242cargo fetch现将显示清单警告。 #7243cargo publish现将检查 git 子模块是否包含任何未提交的更改。 #7245- 在构建脚本中,
cargo:rustc-flags现允许不带空格的-l与-L标志。 #7257 - 当
cargo install替换包的旧版本时,现将删除新安装版本中不再存在的任何已安装二进制文件。 #7246 - git 依赖在发布时现也可指定
version键。上传的 crate 中将剥离git值,与path依赖的行为一致。 #7237 - workspace default-members 的行为已更改。default-members 现仅在 workspace 根目录运行 Cargo 时生效。此前无论在哪个目录运行 Cargo 都会始终生效。 #7270
- 更新了 libgit2,纳入所有上游更改。 #7275
- 升级用于定位主目录的
home依赖。 #7277 - 已更新 zsh 补全。 #7296
- SSL 连接错误现将重试。 #7318
- jobserver 已改为获取 N 个 token(而非 N-1),然后立即再获取额外的 token。此更改是为了适配 Windows 上的
cccrate,使其能够释放其隐式 token。 #7344 - 选择下一个构建哪个 crate 的调度算法已更改。现选择等待其上的传递 crate 数量最多的 crate。此前使用最大拓扑深度。 #7390
- RUSTFLAGS 不再纳入元数据与文件名哈希, 撤销了 1.33 中加入该行为的更改。这意味着对 RUSTFLAGS 的任何更改都会导致重新编译,且不会影响符号混淆。 #7459
修复
- 带有使用简写 SSH URL(如
git@github.com/user/repo.git)的子模块的 git 依赖现应可正常工作。 #7238 - 在 macOS 上创建
.dSYM符号链接时处理损坏的符号链接。 #7268 - 修复了
[patch]表中同一 crate 多个版本的问题。 #7303 - 修复了自定义目标
.json文件中名称子串匹配不受支持的 crate 类型(如 “bin”)的问题。 #7363 - 修复了为 proc-macro crate 类型生成文档的问题。 #7159
- 修复了 Cargo 在构建线程内 panic 时的挂起。 #7366
- 修复了若
build.rs脚本在各次构建间发出不同的rerun-if指令时的重建检测。Cargo 此前在更改后会错误地触发重建。 #7373 - 正确处理
[patch]表条目的规范 URL,防止 patch 在首次使用后失效。 #7368 - 修复了集成测试在开始自身构建前等待包二进制文件构建完成的问题。它们现可并发构建。 #7394
- 修复了上一版本中对
--features a b标志解释方式的意外更改,恢复为将该形式解释为--features a并将参数b传给命令的原始行为。若要传递多个 features,请用引号包裹,如--features "a b",或使用逗号,或使用多个--features标志。 #7419
仅 Nightly
- 已添加直接从 Cargo 构建标准库的基本支持。 (docs) #7216
- 新增
-Ztimings功能,可生成关于各编译步骤耗时的 HTML 报告。这也可能在控制台输出完成步骤以及 JSON 数据。 (docs) #7311 - 新增交叉编译 doctests 的能力。 (docs) #6892
Cargo 1.38 (2019-09-26)
新增
- 🔥 Cargo 构建流水线默认已启用,以在构建期间利用更多空闲 CPU 并行性。 #7143
- Cargo 的
--message-format选项现可多次指定,并接受逗号分隔的值列表。除先前的值外,现还接受json-diagnostic-short与json-diagnostic-rendered-ansi,用于配置json消息模式下 rustc 的输出。 #7214 - crates.io 现已支持 Cirrus CI 徽章。 #7119
- 引入了新的
Cargo.lock格式。该新格式旨在更频繁地避免源代码控制合并冲突,并总体上使合并更改更安全。该新格式此时尚未启用,不过若 Cargo 看到该格式则会使用它。未来某个时候,计划将其设为默认。 #7070 - 为 FreeBSD 添加了进度条支持。 #7222
变更
-q标志不再抑制来自 Cargo 自身的错误的根错误消息。 #7116- Cargo Book 现使用 mdbook 0.3 发布,带来若干格式修复与改进。 #7140
--features命令行标志现可多次指定。 所有标志中的 features 列表会合并在一起。 #7084- 已移除包 include/exclude 的 glob-vs-gitignore 警告。 包现可使用 gitignore 风格匹配而不产生任何警告。 #7170
- 当查询
rustc获取如cfg值等信息时,若解析rustc输出失败,Cargo 现显示命令与输出。 #7185 cargo package/cargo publish现允许指向 git 子模块的符号链接以包含该子模块。 #6817- 改进了当版本需求不匹配任何版本、但存在预发布版本时的错误消息。 #7191
修复
- 修复了在使用
git-fetch-with-cli配置选项且设置了GIT_DIR环境变量时,更新 git 仓库使用错误目录的问题。在 git 回调中运行 cargo 时可能发生此情况。 #7082 - 修复了具有单独调试输出的目标的 dep-info 文件被覆盖的问题。例如,带有
.dSYM目录的-apple-目标上的二进制文件会覆盖.d文件。 #7057 - 修复
[patch]表未保持 “每个 source 一个主版本” 规则的问题。 #7118 - 在
cargo rustc命令的元数据哈希中忽略--remap-path-prefix标志。此前 remap 设置会无意中影响符号名称。 #7134 - 修复了
[patch]依赖中的循环检测。 #7174 - 修复了当
core.symlinksgit 配置为 true 时,cargo new在 Windows 上留下符号链接的问题。还纳入了上游 libgit2 的若干修复与更新。 #7176 - macOS:修复了设置标志以将
target目录排除出备份的问题。 #7192 - 修复了
cargo fix在涉及多字节字符的某些情况下 panic 的问题。 #7221
仅 Nightly
- 新增
cargo fix --clippy,将应用 Clippy 中机器可应用的修复。 #7069 - 新增
-Z binary-dep-depinfo标志,为二进制依赖(如标准库)添加变更跟踪。 #7137 #7219 cargo clippy-preview将始终运行,即使未做任何更改。 #7157- 修复了使用
CARGO_BUILD_PIPELINING时的指数爆炸。 #7062 - 修复了在
cargo clippy-preview中向 clippy 传递参数的问题。 #7162
Cargo 1.37 (2019-08-15)
新增
- 向
cargo metadata新增doctest字段,以判定目标的文档是否被测试。 #6953 #6965 - 🔥
cargo vendor命令现已内置于 Cargo。该命令可用于创建所有依赖源码的本地副本。 #6869 - 🔥 “publish lockfile” 功能现已稳定。若包包含二进制可执行目标,该功能将在发布包时自动包含
Cargo.lock文件。默认情况下,Cargo 在安装包时会忽略Cargo.lock。要强制 Cargo 使用已发布包中包含的Cargo.lock文件,请使用cargo install --locked。这可能有助于确保cargo install一致地复现相同结果。当依赖意外发布了 semver 不兼容的更改时,这也可能有用,可回退到已知可用的版本。 #7026 - 🔥
default-run功能已稳定。当包包含多个二进制文件时,该功能允许你指定cargo run默认运行哪个二进制可执行文件。在Cargo.toml的[package]表中将default-run键设为默认使用的二进制名称。 #7056
变更
cargo package现验证构建脚本不会创建空目录。 #6973- 若
cargo doc生成重复输出(导致文件被随机覆盖),现发出警告。这可能由多种原因引起(重命名的依赖、同一包的多个版本、带有重命名库的包等)。这是一个已知 bug,需要更多工作才能正确处理。 #6998 - 使用
--features foo/bar启用依赖的 feature 时,若foo不是可选依赖,将不再以foofeature 编译当前 crate。 #7010 - 若通过 RUSTFLAGS 传入
--remap-path-prefix,将不再影响文件名元数据哈希。 #6966 - libgit2 已更新至 0.28.2,Cargo 用其访问 git 仓库。自上次于 11 月更新以来,纳入了数百项更改与修复。 #7018
- Cargo 现支持 rustc 生成的 dep-info 文件中的绝对路径。 这为跟踪二进制文件(如 libstd)以进行重建检测奠定了基础。(注意:其中包含一个已知 bug。) #7030
修复
- 修复了 zsh 补全获取命令列表的方式。 #6956
- 当
debug设为 0 时,构建摘要中不再打印 “+ debuginfo”。 #6971 - 修复了配置为
doc = true的 example 在cargo doc下正确生成文档的问题。 #7023 - 若无法在 CARGO_HOME 中获取只读锁,不失败。这有助于在 CARGO_HOME 不存在、但使用了
--locked(意味着不需要 CARGO_HOME)时的情况。 #7149 - 撤销了 1.35 中当 Cargo 阻塞于锁文件时释放 jobserver token 的更改。它在某些情况下会导致死锁。 #7204
仅 Nightly
- 新增编译器消息缓存。
-Z cache-messages标志使 cargo 缓存编译器输出,以便后续运行可重新显示先前的警告。 #6933 -Z mtime-on-use不再触及中间产物。 #7050
Cargo 1.36 (2019-07-04)
新增
变更
- 可在清单中添加
publish = ["crates-io"],以将发布限制为仅 crates.io。 #6838 - macOS:仅当未设置
DYLD_FALLBACK_LIBRARY_PATH时才包含默认路径。同时从默认集合中移除/lib。 #6856 cargo publish现将在登录 token 不可用时提前退出。 #6854- HTTP/2 流错误现被视为 “spurious” 并将触发重试。 #6861
- 在依赖上设置 feature,而该 feature 指向必需依赖,现为错误。此前为警告。 #6860
registry.index配置值现支持相对file:URL。 #6873- macOS:
.dSYM目录现符号链接到不含元数据哈希的 example 二进制文件旁,以便调试器能找到它。 #6891 - 新项目的默认
Cargo.toml模板现包含指向文档的注释链接。 #6881 - 对 crate 下载摘要的措辞做了一些改进。 #6916 #6920
- ✨ 将
RUST_LOG环境变量改为CARGO_LOG,以便使用logcrate 的用户代码不会显示 cargo 的调试输出。 #6918 - 打包时始终包含
Cargo.toml,即使未在package.include中列出。 #6925 - 包的 include/exclude 值现使用 gitignore 模式而非 glob 模式。 #6924
- 当 crates.io 超时时提供更好的错误消息。同时改进其他 HTTP 响应码的错误消息。 #6936
性能
修复
- 更仔细地跟踪依赖的磁盘上 fingerprint 信息。 这有助于在构建被中断并重新启动的某些罕见情况下。 #6832
cargo run现正确地将非 UTF8 参数传递给子进程。 #6849- 修复 bash 补全以在 bash 3.2(macOS 自带版本)上运行。 #6905
- 对 zsh 补全的多项修复与改进。 #6926 #6929
- 修复
cargo update在缺少Cargo.lock文件时忽略-p参数的问题。 #6904
仅 Nightly
- 新增
-Z install-upgrade功能 以跟踪已安装 crate 的详细信息,并在过期时更新它们。 #6798 - 新增
public-dependency功能 ,允许跟踪公共与私有依赖。 #6772 - 通过
build.pipelining配置选项(CARGO_BUILD_PIPELINING环境变量)新增构建流水线。 #6883 publish-lockfile功能有了重大更改。默认现为true,二进制 crate 将始终发布Cargo.lock。 发布期间现会重新生成Cargo.lock。cargo install现默认忽略Cargo.lock文件,并需要--locked才能使用锁文件。若检测到被 yank 的依赖,会添加警告。 #6840
Cargo 1.35 (2019-05-23)
新增
- 为构建脚本新增
rustc-cdylib-link-arg键,以指定 cdylib crate 的链接器参数。 #6298
变更
- 传递测试过滤器(如
cargo test foo)时,不构建 examples (除非它们设置了test = true)。 #6683 - 将
--quiet标志从cargo test转发到 libtest harness,使测试真正安静。 #6358 cargo package中检查是否有文件被修改的验证步骤现更严格。它使用内容哈希而非检查文件系统 mtimes。它还检查包中的所有文件。 #6740- 每当 Cargo 阻塞于文件锁时,现释放 jobserver token。 #6748
- 针对 TOML 解析器先前允许同名多个表头的 bug 发出警告。 #6761
- 从元数据哈希中移除了
CARGO_PKG_*环境变量,并将它们加入 fingerprint。这意味着当这些值更改时,不会留下陈旧产物。还将 “repository” 值加入 fingerprint。 #6785 cargo metadata在resolve.nodes.deps中对于没有库的依赖不再显示null字段。该依赖不再显示。 #6534- 若邮箱设为空字符串,
cargo new将不再在authors字段中包含邮箱地址。 #6802 cargo doc --open现可在为多个包生成文档时工作。 #6803cargo install --path P现从目录 P 加载.cargo/config文件。 #6805- 在版本需求中使用 semver 元数据(如
1.0.0+1234)现发出警告,说明它被忽略。 #6806 cargo install现拒绝某些标志组合,其中部分标志本会被忽略。 #6801- 某些情况下的解析器性能改进。 #6776
修复
- 修复了运行分开的命令(如先
cargo build再cargo test)时,第二条命令可能使用构建脚本陈旧结果的问题。 #6720 - 修复了若
.gitignore文件匹配根包目录时cargo fix不能正常工作的问题。 #6767 - 修复了若在 profile 中设置
panic=unwind时意外多次编译 lib 的问题。 #6781 build.target配置值中 JSON 文件的路径现已规范化,以修复构建依赖。 #6778- 修复了若构建脚本的编译被中断(如被杀死)时重新运行构建脚本的问题。 #6782
- 修复了
cargo new初始化 fossil 仓库的问题。 #6792 - 修复了在使用
git-fetch-with-cli功能时支持更新发生过 force push 的 git 仓库的问题。git-fetch-with-cli失败时现也显示更多错误信息。 #6800 - 为 WASM 目标构建的
--example二进制文件已修复:文件名不再包含元数据哈希,并正确出现在compiler-artifactJSON 消息中。 #6812
仅 Nightly
cargo clippy-preview现为内置 cargo 命令。 #6759build-overrideprofile 设置现包含 proc-macros 及其依赖。 #6811- 可选依赖与目标依赖现与
-Z offline配合更好。 #6814
Cargo 1.34 (2019-04-11)
新增
- 🔥 稳定了对备用 registry的支持。 #6654
- 新增了关于将 builds.sr.ht 持续集成与 Cargo 一起使用的文档。 #6565
Cargo.lock顶部现包含说明其为@generated的注释。 #6548- 现已支持 Azure DevOps 徽章。 #6264
- 若
--exclude标志指定了未知包,新增警告。 #6679
变更
cargo test --doc --no-run不做任何事,因此现显示表明该效果的错误。 #6628- 对 bash 补全的多项更新:添加缺失的选项与命令、支持 libtest 补全、对
--target补全使用 rustup、回退到文件名补全、修复编辑命令行。 #6644 - 发布带有
[patch]段的 crate 不再产生错误。 发布前会从清单中移除[patch]段。 #6535 build.incremental = true配置值现与CARGO_INCREMENTAL=1同等对待,此前会被忽略。 #6688- 无论 HTTP 响应码如何,现始终显示来自 registry 的错误。 #6771
修复
- 修复了
cargo run --example的 bash 补全。 #6578 - 修复了使用本地 registry 并同时运行多个构建同一 crate 的 cargo 命令时的竞态条件。 #6591
- 修复了进度条的一些闪烁与过度更新。 #6615
- 修复了使用返回不正确凭证的 git credential helper 时的挂起。 #6681
- 修复了使用本地 registry 解析被 yank 的 crate 的问题。 #6750
仅 Nightly
- 新增
-Z mtime-on-use标志,使 crate 被使用时更新文件系统上的 mtime。旨在未来能够跟踪陈旧产物以清理未使用的文件。 #6477 #6573 - 新增实验性
-Z dual-proc-macros,以便同时为 host 与 target 构建 proc macros。 #6547
Cargo 1.33 (2019-02-28)
新增
compiler-artifactJSON 消息现包含"executable"键,其中包含所构建可执行文件的路径。 #6363- man pages 已重写,现与 Web 文档一并发布。 #6405
cargo login保存 token 后现显示确认信息。 #6466- 若
[patch]条目不匹配任何包,现发出警告。 #6470 cargo metadata现包含包的links键。 #6480- 使用
-vv的 “Very verbose” 输出现显示 cargo 运行进程时所设置的环境变量。 #6492 - 不带参数的
--example、--bin、--bench或--test现列出这些选项的可用目标。 #6505 - Windows:若进程以扩展状态退出码失败,现显示该码的人类可读名称。 #6532
- 为
cargo package与cargo publish命令新增--features、--no-default-features与--all-features标志,以便在验证包时使用给定的 features。 #6453
变更
- 若
cargo fix无法编译修复后的代码,rustc 错误现显示在控制台上。 #6419 - 从
cargo login中隐藏未使用的--host标志。 #6466 - 构建脚本 fingerprint 现包含 rustc 版本。 #6473
- macOS:改为设置
DYLD_FALLBACK_LIBRARY_PATH而非DYLD_LIBRARY_PATH。 #6355 RUSTFLAGS现包含在元数据哈希中,这意味着更改标志不会覆盖先前构建的文件。 #6503- 更新 crate 图时,不相关的被 yank crate 被错误地移除。现尽可能保持其原始版本。这导致在
cargo update -p somecrate期间不相关的包被降级。 #5702 - TOML 文件现支持 0.5 TOML 语法。
修复
cargo fix现将忽略修改多个文件的建议。 #6402cargo fix现一次只修复一个目标,以处理共享相同源文件的目标。 #6434- 修复了 bash 补全显示 cargo 命令列表的问题。 #6461
cargo init现将避免在.gitignore文件中创建重复条目。 #6521- 构建现尝试检测编译过程中文件是否被修改,从而允许你再次构建并拾取新更改。这通过跟踪编译开始而非结束的时间来完成。另外,#5919 已撤销,意味着 cargo 不会将相等的文件系统 mtimes 视为需要重建。 #6484
仅 Nightly
- 允许在
[patch]表中使用 registry 名称,而不只是 URL。 #6456 cargo metadata为依赖新增了registry键。 #6500- Registry 名称现限制为与包名相同的风格(字母数字、
-与_字符)。 #6469 cargo login现显示来自 registry 配置的/meURL。 #6466cargo login --registry=NAME现支持交互式输入 token。 #6466- Registry 现可从
config.json中省略api键,以表明它们不支持 API 访问。 #6466 - 修复了将
--message-format=json与 metabuild 一起使用时的 panic。 #6432 - 修复了使用备用 registry 时检测发布到 crates.io 的问题。 #6525
Cargo 1.32 (2019-01-17)
新增
变更
- 🔥 HTTP/2 多路复用现已默认启用。可使用
http.multiplexing配置值将其禁用。 #6271 - 使用 ANSI 转义序列清行,而不再使用空格。 #6233
- 检出 git 依赖时禁用 git 模板,以免引发问题。 #6252
- 使用
net.git-fetch-with-cli选项时包含--update-head-okgit 标志。这有助于防止获取某些仓库时失败。 #6250 - 在
cargo package的验证步骤中解压 crate 时,不再设置 文件系统 mtime,此前这在某些罕见文件系统上会失败。 #6257 - 在
Cargo.toml中,crate-type = ["proc-macro"]现在与proc-macro = true同等对待。 #6256 - 若在虚拟工作区中设置了
dependencies、features、target或badges,将报错。若在工作区成员中使用了replace或patch, 将显示警告。 #6276 - 在某些情况下改进了解析器的性能。 #6283 #6366
.rmeta文件不再硬链接到基础 target 目录 (target/debug)。#6292- 若多个目标以相同的输出文件名构建,将发出警告。 #6308
- 使用
cargo build(不带--release)时,基准测试现在使用 “test” profile 而非 “bench” 构建。这样更便于调试基准测试, 并避免令人困惑的行为。 #6309 - 用户别名现在可以覆盖内置别名(
b、r、t和c)。 #6259 - 设置
autobins=false现在会禁用推断目标的自动发现。 #6329 - 若项目使用不稳定特性,
cargo verify-project现在在稳定版上将失败。 #6326 - 现在允许名称中含有内部
.的平台目标。 #6255 cargo clean --release现在只删除 release 目录。 #6349
修复
- 避免在
cargo new的电子邮件地址中添加多余的尖括号。 #6243 - 若设置了 CI 环境变量,则禁用进度条。 #6281
- 避免将所有 rustc 输出保留在内存中。 #6289
- 若 JSON 解析失败且 rustc 以非零状态退出,不再丢失解析失败消息。 #6290
- 修复了存在构建脚本时重命名项目目录的问题。 #6328
- 修复了若示例设置了
crate_type = ["bin"]时,cargo run --example NAME无法正确工作的问题。 #6330 - 修复了
cargo packagegit 发现过于激进的问题。--allow-dirty现在会完全禁用 git 仓库检查。 #6280 - 修复了
[patch]依赖的构建变更跟踪问题,该问题会导致cargo build在本不应重建时进行重建。 #6493
仅 Nightly
- 允许在注册表 URL 中使用用户名。 #6242
- 在 build-plan JSON 结构中新增了
"compile_mode"键,以便区分 运行自定义构建脚本与编译构建脚本。 #6331 --out-dir不再复制构建脚本。 #6300
Cargo 1.31 (2018-12-06)
新增
- 🔥 稳定了对 2018 edition 的支持。 #5984 #5989
- 🔥 新增了在 Cargo.toml 中重命名 依赖 的能力。#6319
- 🔥 新增了对 HTTP/2 流水线与多路复用的支持。设置
http.multiplexing配置值以启用。 #6005 - 新增了
http.debug配置值以调试 HTTP 连接。使用CARGO_HTTP_DEBUG=true RUST_LOG=cargo::ops::registry cargo build可显示 调试信息。#6166 - 构建时会根据
Cargo.toml中的 repository 值设置CARGO_PKG_REPOSITORY环境变量 。 #6096
变更
cargo test --doc现在会拒绝其他标志,而不再忽略它们。 #6037cargo install会忽略~/.cargo/config。 #6026cargo version --verbose现在与cargo -vV相同。 #6076Cargo.lock顶部的注释现在会被保留。 #6181- 在"非常详细"模式(
cargo build -vv)下构建时,构建脚本 输出会加上包名与版本的前缀,例如[foo 0.0.1]。 #6164 - 若
cargo fix --broken-code在应用修复后编译失败, 文件不再被还原,而是保留在损坏状态。 #6316
修复
- Windows:使用
cargo run时将 Ctrl-C 传递给进程。 #6004 - macOS:修复 bash 补全。 #6038
- 在 bash 补全中补全
+toolchain时支持任意工具链名称。 #6038 - 修复了解析器在对失败依赖进行回溯时的边界情况。 #5988
- 修复了
cargo test --all-targets会将 lib 测试运行三次的问题。 #6039 - 修复了将重命名的依赖发布到 crates.io 的问题。 #5993
- 修复了在含有多个二进制文件的 git 仓库上执行
cargo install的问题。 #6060 - 修复了 rustc 发出的深层嵌套 JSON 丢失的问题。 #6081
- Windows:修复将 msys 终端锁定为 60 个字符的问题。 #6122
- 修复了带连字符的重命名依赖。 #6140
- 修复了当 dylib 同时存在于
target/debug和target/debug/deps时链接到错误 dylib 的问题。 #6167 - 修复了使用
panic=abort时某些不必要的重新编译。 #6170
仅 Nightly
- 为
cargo install新增了--registry标志。 #6128 - 新增了
registry.default配置值,用于指定在未传递--registry标志时使用的默认注册表。 #6135 - 为
cargo new和cargo init新增了--registry标志。 #6135
Cargo 1.30 (2018-10-25)
新增
- 🔥 新增了在构建期间显示进度的动画进度条。 #5995
- 为
cargo metadata新增了resolve.nodes.deps键,其中包含更多 关于已解析依赖的信息,并能正确处理重命名的依赖。 #5871 - 创建包时,若无法发现 git 仓库中的文件是否 dirty,使用
-v会提供 更多细节。同时修复了 Windows 上的发现问题。 #5858 - 诸如
--bin、--test、--example、--bench或--lib之类的过滤器 可在工作区中使用,而无需选择特定包。 #5873 cargo run可在工作区中使用,而无需选择特定包。 #5877cargo doc --message-format=json现在会输出 rustdoc 的 JSON 消息。 #5878- 新增了
--message-format=short以显示单行消息。 #5879 - 在
.crate包中新增了.cargo_vcs_info.json文件,用于捕获 当前 git hash。#5886 - 新增了
net.git-fetch-with-cli配置选项,使用git可执行文件获取仓库,而不再使用内置的 libgit2 库。#5914 - 为
cargo metadata新增了required-features。 #5902 - 在包内执行
cargo uninstall现在会卸载该包。 #5927 - 为
cargo fix新增了--allow-staged标志,允许在文件已 暂存到 git 时运行。#5943 - 新增了
net.low-speed-limit配置值,并且 http 操作也会遵守net.timeout。#5957 - 为
cargo new新增了--edition标志。 #5984 - 在 beta 期间临时稳定了 2018 edition 支持。 #5984 #5989
- 新增了对
target.'cfg(…)'.runner配置值的支持,用于为使用 配置表达式的目标指定 run/test/bench runner。 #5959
变更
- Windows:主进程退出时,
cargo run不会终止子进程。 #5887 - 改用
openercrate,在执行cargo doc --open时打开网页浏览器。这应能在所有平台上更可靠地选择 系统首选浏览器。#5888 - 相等的文件 mtime 现在也会导致目标被重建。此前仅当文件 严格新于上次构建时才会触发重建。 #5919
- 运行
cargo install时忽略build.target配置值。 #5874 - 对
cargo fix忽略RUSTC_WRAPPER。 #5983 - 忽略空的
RUSTC_WRAPPER。 #5985
修复
- 修复了在
Cargo.toml中带有 edition 字段时创建包的错误。 #5908 - 在工作区中更一致地为路径依赖使用相对路径。 #5935
cargo fix现在总会运行,即使此前已运行过。 #5944- Windows:尝试更可靠地检测终端宽度。基于 msys 的 终端被强制为 60 个字符宽。 #6010
- 允许在
cargo doc --document-private-items中使用多个 target 标志。 6022