更新日志

Cargo 1.87 (2025-05-15)

ce948f46…HEAD

新增

变更

  • cargo-add: 折叠大型特性列表 #15200

修复

  • cargo-publish: 修复 man 手册页中格式错误的 {{#options}}#15191

仅 Nightly 版本

  • -Zscript: 处理更多 frontmatter 解析边缘情况 #15187

文档

内部

Cargo 1.86 (2025-04-03)

d73d2caf…rust-1.86.0

新增

变更

  • ❗️ 合并时,替换而不是合并引用程序路径及其参数的配置键。 #15066
    这些键包括
    • registry.credential-provider
    • registries.*.credential-provider
    • target.*.runner
    • host.runner
    • credential-alias.*
    • doc.browser
  • ❗️ 如果同时传递 --package--workspace 但请求的包缺失,则报错。此前会静默忽略,这被视为一个 bug,因为应报告缺失的包。 #15071
  • 在更新索引缓存失败时新增警告。 #15014
  • 错误中不再使用“你是不是想说”。直接给出建议。 #15138
  • 为依赖源中无效的 SSH URL 提供更好的错误消息。 #15185
  • 当包没有给定特性时,建议类似的特性名称。 #15133
  • 找不到工作空间成员时,打印 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 版本

  • 🔥 -Zfeature-unification: 这个新的不稳定标志启用了 resolver.feature-unification 配置选项,用于控制特性如何在工作空间中统一。(RFC 3529) (文档) #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: 合并从 manifest 路径创建 SourceId 的逻辑 #15172
  • -Zscript: 将 cargo-script 逻辑集成到主解析器中 #15168
  • -Zscript: 为 cargo-script 添加 cargo pkgid 支持 #14961
  • -Zpackage-workspace: 报告所有无法发布的包 #15070

文档

  • 文档说明 Cargo 从 1.46 版本起会自动注册 env! 宏中使用的变量以触发重建。 #15062
  • 将更新日志移至 The Cargo Book。 #15119 #15123 #15142
  • 注意 package.authors 已弃用。 #15068
  • 修复 Package Id Specification 的语法错误。 #15049
  • 修复关于 MSRV 的反转逻辑。 #15044
  • cargo-metadata: 修复 "root" 字段的描述。 #15182
  • cargo-package: 注意 lockfile 始终包含在内。 #15067
  • contrib: 开始编写 schema 设计指南。 #15037

内部

  • 在 Solaris 上不使用 libc::LOCK_*#15143
  • 清理字段 -> 环境变量处理。 #15008
  • 简化 SourceID 的 Ord/Eq 实现。 #14980 #15103
  • 为 SourceKind 添加手动 Hash impl 并记录原因。 #15029
  • ci: 允许在 CI 中使用 Windows 保留名称。 #15135
  • cargo-test-macro: 移除 RUSTUP_WINDOWS_PATH_ADD_BIN 的条件限制。 #15017
  • resolver: 简化回溯。 #15150
  • resolver: 小型清理。 #15040
  • test: 清理浅层 fetch 测试。 #15002
  • test: 修复 macOS 上的 https::self_signed_should_fail 测试。 #15016
  • test: 修复 benchsuite 在较新 Git 版本下的问题。 #15069
  • test: 修复 shared_std_dependency_rebuild 在 Windows 上运行时的问题。 #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)

d73d2caf…rust-1.86.0

新增

  • 🎉 Cargo 现在支持 2024 edition。更多信息请参阅edition 指南#14828
  • cargo-tree: --depth 标志现在接受 workspace 值,该值仅显示属于当前工作空间的依赖项。 #14928
  • 构建脚本现在接收一个新的环境变量 CARGO_CFG_FEATURE,其中包含正在构建的包的每个已激活特性。 #14902
  • perf: 由于 ActivationsKey 使用了更高效的哈希算法,依赖项解析现在更快。 #14915

变更

  • ❗️ cargo-rustc: 尾随标志现在具有更高的优先级。此行为自 1.83 版本起仅限 nightly 版本,现已稳定化。 #14900
  • ❗️ Cargo 现在使用来自 rustc-stable-hash 的跨平台哈希算法。因此,依赖项缓存路径(例如 $CARGO_HOME/registry/index/index.crates.io-<hash>)的哈希部分将发生变化。这将触发注册表索引和 .crate tar 包的重新下载,以及 Git 依赖项的重新克隆。 #14917
  • 为 Cargo.toml 和 Cargo 配置中 cfg 中的关键字新增了未来不兼容警告。此前错误地接受了带有 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
  • 修复了修改工作空间 Cargo.toml 未使构建缓存失效的问题。 #14973
  • 防止在 RUSTFLAGS 更改后丢弃构建缓存。 #14830 #14898
  • cargo-add: 规范化名称时,不选择 yanked 版本。 #14895
  • cargo-fix: 将工作空间依赖项迁移到 2024 edition,也适用于虚拟 manifest。 #14890
  • cargo-package: 当 package.readmepackage.license-file 指向当前包根目录之外的路径时,验证其 VCS 状态。 #14966
  • cargo-package: 确保不会选取可能阻塞的非文件(如 FIFO)进行发布。 #14977

仅 Nightly 版本

  • path-bases: 支持虚拟 manifest 中 [patch] 的 bases。 #14931
  • unit-graph: 使用配置的 shell 打印输出。 #14926
  • -Zbuild-std: 通过探测目标 spec JSON 中的 metadata.std 字段,检查构建目标是否支持 std#14183 #14938 #14899
  • -Zbuild-std: 测试 proc-macros 时始终链接到 std。 #14850 #14861
  • -Zbuild-std: 清理 build-std 测试。 #14943 #14933 #14896
  • -Zbuild-std: 对 std 工作空间的相对路径进行哈希处理,而不是绝对路径。 #14951
  • -Zpackage-workspace: 允许对未提升版本的工作空间进行空运行(dry-run)。 #14847
  • -Zscript: 允许从 cargo 脚本添加/移除依赖项。 #14857
  • -Zscript: 跨 edition 迁移 cargo 脚本 manifest。 #14864
  • -Zscript: 不覆盖 release profile。 #14925
  • -Ztrim-paths: 使用 Path::push 构造 remap-path-prefix 标志。 #14908

文档

  • 阐明如何选择 cargo::metadata 环境变量。 #14842
  • cargo-info: 移除 cargo-info 文档中对默认注册表的引用。 #14880
  • contrib: 为 Rustup Cargo workaround 添加缺失参数。 #14954
  • SemVer: 添加关于 RPIT capturing 的章节。 #14849

内部

  • 在编译器更改之前,将 test cfg 添加为已知 cfg。 #14963
  • 启用 triagebot 合并冲突通知。 #14972
  • 将发布触发限制为 0.* 标签。 #14940
  • 简化 SourceID 哈希。 #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 属性接受命令的字符串字面量。 #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)

15fbd2f6…rust-1.84.0

新增

变更

  • ❗️ cargo-publish: 发布 crate 时始终包含 Cargo.lock。最初,仅当包包含可执行文件或示例用于 cargo install 时才包含。 #14815
  • 依赖解析器性能改进,包括共享缓存、减少迭代开销以及移除冗余的 fetch 和克隆。 #14663 #14690 #14692 #14694
  • 弃用 cargo verify-project#14736
  • 依赖项解析期间找不到匹配包时,添加源替换信息。 #14715
  • 找到 [patch.crates.io] 时,提供使用 crates-io 的提示。 #14700
  • 规范化 Cargo targets 的源路径以改善诊断。 #14497 #14750
  • 允许注册表在索引元数据 JSON 中省略空/默认字段。出于向后兼容性考虑,crates.io 会继续发出这些字段。 #14838 #14839
  • cargo-doc: 在 extra verbose 模式下显示环境变量。 #14812
  • cargo-fix: 替换对重复的仅插入替换的特殊处理。 #14765 #14782
  • cargo-remove: 找不到依赖项时,尝试建议其他名称类似的依赖项。 #14818
  • git: 对于 Git 依赖项的全新检出,跳过不必要的 submodule 验证。 #14605
  • git: 增强了找不到 refspec 时 fetching Git 依赖项的错误消息。 #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 文件。这有助于外部工具验证或自动完成 manifest 的 schema。(manifest.schema.json) #14683
  • 🔥 Zroot-dir: 一个新的不稳定标志 -Zroot-dir,用于配置应从哪个路径调用 rustc。(文档) #14752
  • 🔥 -Zwarnings: 一个新的不稳定特性,通过 build.warnings 配置字段控制 Cargo 如何处理警告。(文档) #14388 #14827 #14836
  • edition2024: 验证 2024 edition / resolver=3 不影响解析。 #14724
  • native-completions: 在 zsh 中包含描述。 #14726
  • -Zbindeps: 修复在带有交叉编译 bindep 的包上运行 cargo tree 时 panic 的问题。 #14593
  • -Zbindeps: 下载 artifact deps 的目标平台对应的定向传递依赖项。 #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-clippycargo-fmtcargo-miri#14669 #14805
  • 增强环境变量文档。 #14676
  • 简化文档中使用的英语。 #14825 #14829
  • 新增一个关于弃用和移除命令的文档页面。 #14739
  • cargo-test-support: 基于移植工作量文档说明 Execs 断言。 #14793

内部

  • 🎉 将 build-rs crate 作为 Cargo 团队的意向产物迁移到 rust-lang/cargo 仓库。 #14786 #14817
  • 在 triagebot 中启用 transfer 功能。 #14777
  • InternedString 需要时进行 clone-on-write。 #14808
  • ci: 将 CI 从 bors 切换到合并队列。 #14718
  • ci: 将 lint-docs 作业设为必需。 #14797
  • ci: 检查 clippy correctness#14796
  • ci: 对于 renovate,将 matchPackageNames 切换为 matchDepNames。 #14704
  • fingerprint: 跟踪 UnitHash 每次使用的意图。 #14826
  • fingerprint: 向 rustc_fingerprint 添加更多元数据。 #14761
  • test: 将剩余的 snapshotting 迁移到 snapbox。 #14642 #14760 #14781 #14785 #14790
  • 更新依赖项。 #14668 #14705 #14762 #14766 #14772

Cargo 1.83 (2024-11-28)

8f40fc59…rust-1.83.0

新增

  • --timings HTML 输出现在可以根据浏览器偏好自动切换浅色和深色配色方案。 #14588
  • 引入了一个新的环境变量 CARGO_MANIFEST_PATH,类似于 CARGO_MANIFEST_DIR 但直接指向 manifest 文件。 #14404
  • manifest: 新增 package.autolib,允许禁用 [lib] 自动发现。 #14591

变更

  • ❗️ Lockfile 格式 v4 现在是创建/更新 lockfile 的默认格式。Rust toolchain 1.78+ 支持 lockfile v4。为了与早期 MSRV 兼容,请考虑将 package.rust-version 设置为 1.82 或更早版本。 #14595
  • ❗️ cargo-package: 使用 --package 标志时,仅打包指定的包。此前,当前工作目录中的包会被自动选中进行打包。 #14488
  • cargo-publish: 如果包版本已发布,现在会快速失败。 #14448
  • 改进了缺失特性的错误消息。 #14436
  • 如果未看到错误,记录 rustc 调用失败的详细信息。 #14453
  • 提升了 windows-gnullvm 导入库,使其与 windows-gnu 对齐。 #14451
  • cargo search 结果中建议 cargo info 命令。 #14537
  • 增强了依赖项更新状态消息,现在以不同颜色显示更新(兼容、不兼容、直接依赖),并附带消息和 MSRV。 #14440 #14457 #14459 #14461 #14471 #14568
  • Locking 状态消息不再显示工作空间成员。 #14445

修复

  • 防止递归调用 cargo 时出现重复的库搜索环境变量。 #14464
  • 不再对 $CARGO_HOME/config 没有 .toml 扩展名发出双重警告。 #14579
  • 使用 --message-format json 时,更正了诊断计数消息。 #14598
  • cargo-add: 转换包名称时执行模糊搜索。 #13765
  • cargo-new: 仅将新包自动添加到相对于 manifest 的工作空间中,而不是当前目录。 #14505
  • cargo-rustc: 修复了 --crate-type 标志中逗号分隔值的解析问题。 #14499
  • cargo-vendor: 仅在 crate 版本来自注册表时才信任该版本。这导致 Git 依赖项即使没有更改也会被重新 vendor。 #14530
  • cargo-publish: 在 dry-run 时,将版本已存在的错误降级为警告。 #14742 #14744

仅 Nightly 版本

  • ❗️ cargo-rustc: 在 nightly 版本中,尾随标志具有更高的优先级。此 nightly 限制将在几个版本后移除。如果此行为破坏了任何工作流程,请提供反馈。提供了一个临时环境变量 __CARGO_RUSTC_ORIG_ARGS_PRIO=1 来选择退出此行为。 #14587
  • 🔥 cargo-install: 新增 --dry-run 标志,但不实际安装二进制文件。 #14280
  • 🔥 native-completions: 将手写的 shell 补全脚本迁移到 Rust 原生实现,使我们更容易添加、扩展和测试新的补全。(文档) #14493 #14531 #14532 #14533 #14534 #14535 #14536 #14546 #14547 #14548 #14552 #14557 #14558 #14563 #14564 #14573 #14590 #14592 #14653 #14656
  • 🔥 -Zchecksum-freshness: 将 cargo 重建检测中使用的文件修改时间替换为文件校验和算法。这在 mtime 实现不佳或 CI/CD 系统中最为有用。(文档) #14137
  • cargo-update: 添加 matches_prerelease 语义。 #14305
  • build-plan: 文档说明其已被弃用。 #14657
  • edition2024: 从 2024 edition 移除隐式特性移除。 #14630
  • lockfile-path: 在 cargo install 上隐含 --locked#14556
  • open-namespaces: 允许在 PackageIdSpec 中使用开放命名空间。 #14467
  • path-bases: 支持 cargo [add|remove|update] 命令。 #14427
  • -Zmsrv-policy: 根据工作空间中 MSRV 数量最多的情况确定工作空间的 MSRV。 #14569
  • -Zpackage-workspace: 允许在工作空间中发布多个 crate,即使它们之间存在相互依赖。(文档) #14433 #14496
  • -Zpublic-dependency: 在 cargo metadata 中包含公共/私有依赖项状态。 #14504
  • -Zpublic-dependency: 不要求提升 MSRV 版本。 #14507

文档

  • 🎉 新增章节,介绍 package.rust-version (即 MSRV) 的用途、支持期望和管理。(文档) #14619 #14636
  • 阐明 target.'cfg(...)' 不尊重构建脚本中的 cfg。 #14312
  • 阐明 [[bin]] target 自动发现可以包括 src/main.rs 和/或 src/bin/ 中的文件。 #14515
  • 消除 feature resolver v2 文档中 ‘target’ 用法的歧义。 #14540
  • 使 --config <PATH> 更醒目。 #14631
  • 次要页面重新分组。 #14620
  • contrib: 更新 Cargo 发布方式的文档。 #14539
  • contrib: 在 Cargo Charter / crate 文档中声明每个 crate 的支持级别。 #14600
  • contrib: 将新的 Intentional Artifacts 声明为 ‘small’ 更改。 #14599

内部

  • 清理重复的 check-cfg lint 逻辑。 #14567
  • 修复由于 nightly rustc 更改导致的省略生命周期问题。 #14487
  • 改进了在 activated_features 中找不到特性时的错误报告。 #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)

a2b58c3d…rust-1.82.0

新增

变更

  • ❗️ Doctest 通过将 --color 传递给 rustdoc 调用来遵循 Cargo 的颜色选项。 #14425
  • 改进了 Cargo.toml 中同时缺失 [package][workspace] 时的错误消息。 #14261
  • 为错误消息枚举 profile.*.debug 的所有可能值。 #14413

修复

  • 使用完整 gitoxide path-spec 模式。此前实现使用了简写 pathspec,可能会产生无效语法,例如 manifest 文件路径包含前导下划线 _ 时。 #14380
  • cargo-package: 修复裸提交 Git 仓库上的失败问题。 #14359
  • cargo-publish: 不从发送到注册表的 HTTP JSON 主体中剥离重命名依赖项的非 dev 特性。此 bug 仅影响第三方注册表。 #14325 #14327
  • cargo-vendor: vendoring 时,不复制被排除的 Cargo targets 的源文件。 #14367

仅 Nightly 版本

  • 🔥 lockfile-path: 新增 --lockfile-path 标志,允许指定 lockfile 的路径,而不是默认路径 <workspace_root>/Cargo.lock。(文档) #14326 #14417 #14423 #14424
  • 🔥 path-bases: 在 Cargo 配置文件中引入了路径“bases”表,可用于为 path dependencies 和 patch 条目前缀路径。(RFC 3529) (文档) #14360
  • 🔥 -Zpackage-workspace: 增强了工作空间中 crate 之间存在依赖关系时 cargo package --workspace 的体验。工作空间中的 crate 不再要求发布到实际注册表。这是迈向支持 cargo publish --workspace 的一步。 #13947 #14408 #14340
  • cargo-update: 将 pre-release 匹配语义限制为仅在 OptVersionReq::Req 上使用。 #14412
  • edition2024: 撤销“fix: 确保 dep/feature 在 2024 edition 下激活依赖项”。 #14295
  • update-breaking: 改进了当 update --breaking 具有无效 spec 时的错误消息。 #14279
  • update-breaking: 使用 --breaking 更新时,不对 prerelease VersionReq 进行降级。 #14250
  • -Zbuild-std: 移除创建虚拟 std 工作空间的 hack。 #14358 #14370
  • -Zmsrv-policy: 调整 MSRV 解析配置字段名称/值。之前的占位符 resolver.something-like-precedence 现已重命名为 resolver.incompatible-rust-versions#14296
  • -Zmsrv-policy: 报告何时选择了不兼容 rust 版本的包。 #14401
  • -Ztarget-applies-to-host: 修复了在使用 target-applies-to-host 和隐式 target 时传递 links-overrides 的问题。 #14205
  • -Ztarget-applies-to-host: -Cmetadata 包含 extra rustflags 是否与 host 相同的信息。 #14432
  • -Ztrim-paths: rustdoc 支持 diagnostics 的 trim-paths。 #14389

文档

  • Workspace 的注释转换为 doc 注释。 #14397
  • 修复 workspace.packageworkspace.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
  • 将所有与 manifest 规范化相关的项中的 ‘resolved’ 重命名为 ‘normalized’。 #14342
  • cargo-util-schemas: 新增 TomlPackage::new,以及 TomlWorkspaceDefault 实现。 #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
  • 更新到 gix 0.64.0。 #14332
  • 更新到 rusqlite 0.32.0。 #14334
  • 更新到 windows-sys 0.59。 #14335
  • 更新依赖项。 #14299 #14303 #14324 #14329 #14331 #14391

Cargo 1.81 (2024-09-05)

34a6a87d…rust-1.81.0

新增

变更

  • ❗️ cargo-package: 打包时禁止 package.license-filepackage.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 示例影响特性解析的问题。 #13892
  • 不因使用 ‘..’ 导致的重复包发出警告。 #14234
  • 加载每个 Git 源时不再执行 du 命令。 #14252
  • 不对未引用的重复包发出警告。 #14239
  • cargo-publish: 不从发送到注册表的 HTTP JSON 主体中剥离重命名依赖项的非 dev 特性。此 bug 仅影响第三方注册表。 #14328
  • cargo-vendor: vendoring 时,不复制被排除的 Cargo targets 的源文件。 #14368

仅 Nightly 版本

  • 🔥 update-breaking: 为 cargo update 添加 --breaking 标志,允许将依赖项升级到 breaking 版本。文档 #13979 #14047 #14049
  • --artifact-dir: 将 --out-dir 重命名为 --artifact-dir--out-dir 标志为了兼容性保留,特性稳定化后可能移除。 #13809
  • edition2024: 确保未使用的可选依赖项对 shadowed 依赖项触发。 #14028
  • edition2024: 解决隐式 -> 显式特性迁移中的问题。 #14018
  • -Zcargo-lints: 将 unknown_lints 添加到 lints 列表。 #14024
  • -Zcargo-lints: 添加工具以文档说明 lints。 #14025
  • -Zcargo-lints: 保持 lints 更新和排序。 #14030
  • -Zconfig-include: 允许在 config 中启用 config-include 特性。 #14196
  • -Zpublic-dependency: 从 resolver 中移除一些旧的公共依赖项代码。 #14090
  • -Ztarget-applies-to-host: 使用 target-applies-to-host 时,将 rustflags 传递给使用隐式 targets 构建的 artifacts。 #13900 #14201
  • cargo-update: 跟踪 --precise <prerelease> 的行为。 #14013

文档

  • 阐明 CARGO_CFG_TARGET_FAMILY 是多值。 #14165
  • 文档说明 CARGO_CFG_TARGET_ABI#14164
  • 文档说明每个 manifest 字段和构建脚本调用的 MSRV。 #14224
  • 移除重复的 strip 章节。 #14146
  • 更新 Cargo 配置摘要以包含缺失的键。 #14145
  • 更新 Cargo 文档索引。 #14228
  • 不再提及不存在的 workspace.badges 字段。 #14042
  • contrib: 建议使用原子提交,并分开测试提交。 #14014
  • contrib: 文档说明如何为 Cargo 编写 RFC。 #14222
  • contrib: 改进 triage 指南。 #14052

内部

  • cargo-package: 更改打包时的验证顺序。 #14074
  • ci: 添加自动发布 Cargo 的工作流程。 #14202
  • ci: 更新 CI 工具。 #14062 #14257
  • registry: 添加本地注册表覆盖。 #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
  • 简化特性语法检查。 #14106
  • 在热路径中不创建新的常量 InternedString#14211
  • 使用 std::fs::absolute 而不是重新实现它。 #14075
  • 移除 cargo 中不必要的特性激活。 #14122 #14160
  • 撤销 #13630,因为 rustc 在 MSVC 上忽略 -C strip#14061
  • test: 在 user_specific_cfgs 测试中允许 unexpected_builtin_cfgs lint。 #14153
  • test: 将 cargo_test 添加到 test-support prelude。 #14243
  • test: 将 Cargo 测试套件迁移到 snapbox。完整的迁移 pull request 列表请参阅#14039
  • 更新到 gix 0.64.0。 #14431
  • 更新依赖项。 #13995 #13998 #14037 #14063 #14067 #14174 #14186 #14254

Cargo 1.80 (2024-07-25)

b60a1555…rust-1.80.0

新增

  • 🎉 稳定化 -Zcheck-cfg!这默认启用了 rustc 在编译时检查条件编译的功能,验证 crate 是否正确处理了不同目标平台或特性的条件编译。Cargo 内部会将新的命令行选项 --check-cfg 传递给所有 rustc 和 rustdoc 调用。

    随着此次稳定化,新增了一个构建脚本调用cargo::rustc-check-cfg=CHECK_CFG,作为将自定义 cfg 添加到预期 cfg 名称和值列表的方式。

    如果您的包无法使用构建脚本,Cargo 提供了一个配置[lints.rust.unexpected_cfgs.check-cfg] 以静态添加已知的自定义 cfg。

    (RFC 3013) (文档) #13571 #13865 #13869 #13884 #13913 #13937 #13958

  • 🎉 cargo-update: 允许 --precise 指定包的 yanked 版本,并相应地更新 lockfile。 #13974

变更

  • ❗️ manifest: 禁止 [badges] 继承自 [workspace.package.badges]。这被认为是一个 bug。请注意 [badges] 实际上已弃用。 #13788
  • build-script: 根据 MSRV 建议旧语法。 #13874
  • cargo-add: 通过使用字符串字面量避免转义双引号。 #14006
  • cargo-clean: 通过 -p 标志清理特定包的性能改进。 #13818
  • cargo-new: 在库模板中,使用 i32 而不是 usize 作为“默认整数类型”。 #13939
  • cargo-package: 如果打包时排除了某个 Cargo target,则发出警告而不是失败。 #13713
  • manifest: 对于 [lints] 表中不支持的 lint 工具,发出警告而不是报错。 #13833
  • perf: 在已知 Cargo targets 时避免推断。 #13849
  • 从 Rust 源 tarball 构建 Cargo 时填充 Git 信息。 #13832
  • 改进从部分环境变量反序列化 Cargo 配置时的错误消息。 #13956

修复

  • resolver: 使同名 path dependencies 保持锁定。 #13572
  • cargo-add: 在 Unix 上执行 write_atomic 期间保留文件权限。 #13898
  • cargo-clean: 在 Windows 上移除符号链接目录。 #13910
  • cargo-fix: 不修复到标准库中。 #13792
  • cargo-fix: 支持纯 IPv6 网络。 #13907
  • cargo-new: 当根目录中存在普通包时,不说正在添加到工作空间。 #13987
  • cargo-vendor: 静默关于忘记 vendoring 的警告。 #13886
  • cargo-publish/cargo-vendor: 确保生成的 Cargo.toml 中的 targets 具有确定性顺序。 #13989 #14004
  • cargo-credential-libsecret: 通过其 SONAME libsecret-1.so.0 加载 libsecret#13927
  • 当 alias 不包含子命令时,不发生 panic。 #13819
  • 解决 macOS ZFS 上复制文件返回 EAGAIN 的问题。 #13845
  • 即使 GitHub 快路径失败,也 fetch 指定的 commits。 #13946 #13969
  • 区分 Cargo config 和共享相同前缀的不同环境变量。 #14000

仅 Nightly 版本

  • -Zcargo-lints: 不总是继承工作空间 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 脚本中不稳定且已拒绝的 frontmatter 语法。现在唯一允许的 frontmatter 语法是 ---#13861 #13893
  • -Zbindeps: 当有多个类型可用时,仅构建指定的 artifact 库。 #13842
  • -Zmsrv-policy: 将未设置的 MSRV 视为兼容。 #13791
  • -Zgit/-Zgitoxide: 默认配置从环境变量和 Cargo 配置中获取。 #13687
  • -Zpublic-dependency: 继承依赖项时,不丢失 ‘public’ 属性。 #13836
  • edition2024: 继承时禁止忽略 default-features#13839
  • edition2024: 为 bin 目标验证 crate-types/proc-macro,与其他 Cargo targets 类似。 #13841

文档

  • cargo-package: 阐明不保证 VCS 来源。 #13984
  • cargo-metadata: 阐明 Cargo target 名称中的 dash 替换规则。 #13887
  • config: 修复构建脚本 overrides 中 rustc-flags 的错误类型。 #13957
  • resolver: 为 resolver-tests 添加 README。 #13977
  • contrib: 更新 contributor guide 中的 UI 示例代码。 #13864
  • 修复 libcurl 代理文档链接。 #13990
  • 为插件添加缺失的 CARGO_MAKEFLAGS 环境变量。 #13872
  • 在 Continuous Integration 章节中包含 CircleCI 参考。 #13850

内部

  • ci: 不对 beta channel 检查 cargo#13827
  • test: 为 apache 容器中的 Git 仓库设置 safe.directory。 #13920
  • test: 静默运行内嵌 unittests 的警告。 #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
  • RecursivePathSourcePathSource 中拆分出来。 #13993
  • 调整由于 libgit2 1.8 更改导致的 cert-check 自定义错误。 #13970
  • 将诊断打印移至 Shell。 #13813
  • 更新依赖项。#13834 #13840 #13948 #13963 #13976

Cargo 1.79 (2024-06-13)

2fe739fc…rust-1.79.0

新增

  • 🎉 cargo add 在添加新依赖项时会遵循 package.rust-version,也称为 MSRV。此行为可以通过指定版本要求或传递 --ignore-rust-version 标志来覆盖。(RFC 3537) #13608
  • 新的 Locking 状态消息会在任何命令中显示依赖项变更。对于 cargo update,它还会告知您是否有任何依赖项版本已过时。#13561 #13647 #13651 #13657 #13759 #13764

变更

  • ❗️ RUSTC_WRAPPERRUSTC_WORKSPACE_WRAPPER 以及来自 [env] 表的变量现在也适用于 Cargo 用于探测 rustc 信息的初始 rustc -vV 调用。#13659
  • ❗️ 将诸如 foo = { optional = true } 这样带有警告的 version="*" 依赖项变为错误。这种行为从一开始就被视为 bug。#13775
  • ❗️ 即使 lib.name 是从 package.name 推断出来的,也会将短划线替换为下划线。此更改与文档中的行为一致。需要注意的是,Cargo 发出的 JSON 消息(例如通过 cargo metadata--message-format=json)将开始报告带有下划线的库名称。#12783
  • 切换到 gitoxide 来列出文件。这提高了构建脚本和 cargo doc 在计算缓存新鲜度方面的性能,同时也修复了 cargo publish 的一些细微 bug。#13592 #13696 #13704 #13777
  • 当传递 -Zlints 且不再需要时发出警告。#13632
  • 对虚拟工作空间中未使用的 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 补全的 fallback。#13686
  • 当 rustflags 改变且传递了 --target 时重新运行构建脚本。#13560
  • 修复推断名称中带有短划线的 lib/bin 的文档冲突。#13640
  • cargo-add:保持依赖项功能的排序。#13682
  • cargo-add:更新简单依赖项时保留注释。#13655
  • cargo-fix:不重复应用相同的建议。#13728
  • cargo-package:当通过 --package 指定的包找不到时报错。#13735
  • credential-provider:修剪来自 stdin 的令牌中的换行符。#13770

仅 Nightly 版本

  • 🔥 cargo-update:允许 --precise 指定包的预发布版本 (RFC 3493) (文档)。#13626
  • RFC 3491:清理未使用的依赖项。#13778
  • -Zcargo-lints:为 Cargo 添加基本的 linting 系统。此功能仍在开发中,尚未普遍可用。#13621 #13635 #13797 #13740 #13801 #13852 #13853
  • 🔥 edition2024:将 Edition2024 添加到解析器 v3(MSRV 感知解析器)的默认设置中。#13785
  • edition2024:在 2024 版本中移除下划线字段支持。#13783 #13798 #13800 #13804
  • edition2024:在 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:添加 v3 解析器用于 MSRV 感知解析。#13776
  • -Zmsrv-policy:对于非本地安装不遵循 MSRV。#13790
  • -Zmsrv-policy:跟踪 MSRV 是否被显式设置。#13732
  • 测试:不压缩测试 registry 中的 crate。#13744

文档

  • 阐明 --locked 确保 Cargo 使用 lockfile 中的依赖项版本。#13665
  • 阐明 RUSTC_WORKSPACE_WRAPPERRUSTC_WRAPPER 的优先级。#13648
  • 阐明只有根目录下的 Cargo.toml 才允许存在 [workspace] 部分。#13753
  • 阐明虚拟清单和实际清单之间的区别。#13794

内部

Cargo 1.78 (2024-05-02)

7bb7b539…rust-1.78.0

新增

  • 稳定全局缓存数据跟踪。-Zgc 标志仍然不稳定。这仅用于 Cargo 开始收集数据,以便当自动 gc 稳定后,不太可能出现缓存未命中。#13492 #13467
  • 稳定 lockfile 格式 v4。lockfile v3 仍是默认版本。#12852
  • 自动检测是否可以使用非 ASCII Unicode 字符渲染输出。添加了一个配置值 term.unicode 来手动控制此行为。(文档)#13337
  • 在 Cargo 配置中支持 target.<triple>.rustdocflags。(文档)#13197

变更

  • cargo-add:创建依赖项功能时打印状态信息。#13434
  • cargo-add:改进从替换源添加包时的错误消息。#13281
  • cargo-doc:在没有 --verbose 时折叠 Generated 状态信息。#13557
  • cargo-new:打印‘正在创建’而不是‘已创建’状态信息。#13367
  • cargo-new:打印备注而不是注释以提供更多信息。#13371
  • cargo-new:向工作空间添加成员时打印提示。#13411
  • cargo-test:建议为 libtest 参数使用 --#13448
  • cargo-update:告知用户某些依赖项仍落后于最新版本。#13372
  • 弃用无扩展名的 .cargo/config 文件。#13349
  • 默认情况下失败时不打印 rustdoc 命令行。#13387
  • 生成新 lockfile 时遵循 package.rust-version#12861
  • 与远程 registry 通信时发送 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
  • 将更多备注/警告切换为小写。#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 中移除 dev-dependencies 的功能。#13518
  • 通过 cargo add/rm/init/new 编辑 TOML 时不重复注释。#13402
  • 修复稀疏索引替换源的令人困惑的错误消息。#13433
  • 在 ‘–list’ 和 ‘-Zhelp’ 中尊重 CARGO_TERM_COLOR#13479
  • 通过 CARGO_TERM_COLOR 控制 clap 的错误和帮助文本的颜色。#13463
  • 不会在 Cargo.toml 中出现空 spans 时 panic。#13375 #13376

仅 Nightly 版本

  • 🔥 cargo-update:允许 --precise 指定包的 yanked 版本。#13333
  • -Zcheck-cfg:将 docsrs cfg 添加为众所周知的 --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 #13544
  • edition2024:为 2024 版本启用 edition 迁移。#13429
  • open-namespaces:对开放命名空间的基本支持 (RFC 3243) (文档)。#13591

文档

  • cargo-fetch:在 --offline man 页面中隐藏 cargo-fetch 递归链接。#13364
  • cargo-install:--list 选项描述以大写开头。#13344
  • cargo-vendor:阐明 vendored 源是只读的以及修改它们的方式。#13512
  • 构建脚本:阐明通过 cargo::metadata=KEY=VALUE 设置构建脚本元数据。#13436
  • 阐明 Cargo.toml[package] 部分的 version 字段是可选的。#13390
  • 改进“Registry Authentication”文档。#13351
  • 改进“Specifying Dependencies”文档。#13341
  • 从“发布前”列表中移除 package.documentation#13398

内部

  • 🎉 集成 tracing-chrome 作为 Cargo 本身的基本性能分析器。(文档)#13399 #13551
  • 更新到 gix 0.58.0。#13380
  • 更新到 git2 0.18.2。#13412
  • 更新到 jobserver 0.1.28。#13419
  • 更新到 supports-hyperlinks 3.0.0。#13511
  • 更新到 rusqlite 0.31.0。#13510
  • bump-check:比较源代码时使用对称差分。#13581
  • bump-check:包含 rustfix 和 cargo-util-schemas。#13421
  • ci:启用 m1 runner。#13377
  • ci:确保在使用 cargo-hack 进行 MSRV 测试期间遵循 lockfile。#13523
  • cargo-util-schemas:通过 RustVersion::is_compatible_with 一致地比较 MSRV。#13537
  • console:使用新的高级 anstyle API。#13368 #13562
  • fingerprint:移除 Freshness::Dirty 中不必要的 Option。#13361
  • fingerprint:将 std::fs 从磁盘索引缓存中抽象出来。#13515
  • mdman:更新到 pulldown-cmark 0.10.0。#13517
  • 重构:将 Config 重命名为 GlobalContext#13409 #13486 #13506
  • 重构:移除未使用的 sysroot_host_libdir#13468
  • 重构:向 Manifest 暴露 source/spans 以发出 lints。#13593
  • 重构:扁平化清单解析。#13589
  • 重构:使 lockfile diffing/printing 更具可重用性。#13564
  • 测试:更新到 snapbox 0.5.0。#13441
  • 测试:通过 snapbox 的 term-svg 功能验证终端样式。#13461 #13465 #13520
  • 测试:确保 nonzero_exit_code 测试不受开发者 RUST_BACKTRACE 设置的影响。#13385
  • 测试:添加使用 worktree 的测试。#13567
  • 测试:修复 old_cargos 测试。#13435
  • 测试:修复由于 rust-lang/rust 更改导致的测试。#13362 #13382 #13415 #13424 #13444 #13455 #13464 #13466 #13469
  • 测试:禁用 lldb 测试,因为它在 macOS 上运行需要权限。#13416

Cargo 1.77.1 (2024-03-28)

修复

  • 对于 Windows MSVC 目标,默认不再 strip debuginfo。这导致了 1.77.0 版本中意外的回归,破坏了 backtrace。#13654

Cargo 1.77 (2024-03-21)

1a2666dd…rust-1.77.0

新增

  • 🎉 将包标识符格式稳定为 Package ID Spec。此格式可用于 Cargo 的大多数命令,包括 --package/-p 标志、cargo pkgidcargo metadata 以及来自 --message-format=json 的 JSON 消息。#12914 #13202 #13311 #13298 #13322
  • -Zhelp 控制台输出添加颜色。#13269
  • 构建脚本:使用 cargo:: 扩展构建指令语法。#12201 #13212

变更

  • 🎉 禁用 debuginfo 现在意味着 strip = "debuginfo"(当未设置 strip 时),以剥离来自标准库的预先存在的 debuginfo,从而显著减小 release 二进制文件的默认大小(在 Linux x64 上 helloworld 从约 4.5 MiB 减小到约 450 KiB)。#13257
  • 为清单解析添加 rustc 风格的错误。#13172
  • 弃用 Cargo 中的 rustc 插件支持。#13248
  • cargo-vendor:在 vendoring 时持有 mutate 独占锁。#12509
  • crates-io:仅对带有请求体 payload 的请求设置 Content-Type: application/json#13264

修复

  • jobserver:为所有类型的 runner 从环境中继承 jobserver。#12776
  • 构建脚本:为所有带有构建脚本的单元设置 OUT_DIR#13204
  • cargo-add:从包含多个包的 Git 仓库中查找带有指定功能的正确包。#13213
  • cargo-fix:始终继承 jobserver。#13225
  • cargo-fix:减少调用 rustc 的次数以提高性能。#13243
  • cargo-new:仅在新包是成员时继承工作空间 package 表。#13261
  • cargo-update:--precise 接受任意 git 修订版本。#13250
  • 清单:为 lints 表提供未使用的键警告。#13262
  • rustfix:支持插入新行。#13226

仅 Nightly 版本

  • 🔥 -Zgit:在一个不稳定的标志后实现浅层 libgit2 fetch。(文档)#13252
  • 🔥 为 cargo rustdoc 添加不稳定的 --output-format 选项,为工具提供一种依赖 rustdoc 实验性 JSON 格式的方式。(文档)#12252 #13284 #13325
  • -Zcheck-cfg:重写 --check-cfg 生成注释。#13195
  • -Zcheck-cfg:在未声明功能时回退到传递空的 values()#13316
  • -Zprecise-pre-release:标志已添加但尚未实现。#13296 #13320
  • -Zpublic-dependency:支持发布带有 public 字段的包。#13245
  • -Zpublic-dependencycargo add--public/--no-public 标志的帮助文本。#13272
  • -Zscript:添加 prefix-char frontmatter 语法支持。#13247
  • -Zscript:添加多种实验性清单语法。#13241
  • -Ztrim-paths:仅重新映射公共前缀。#13210

文档

  • 添加了关于在清单中设置 homepage 的指导。#13293
  • 阐明了如何查找自定义子命令。#13203
  • 阐明了 du 函数为何使用 mutex。#13273
  • 突出显示了“如何查找依赖项上启用的功能”。#13305
  • 删除了关于 license 中不支持括号的句子。#13292
  • 解析器:阐明在依赖项解析中如何处理预发布版本。#13286
  • cargo-test:阐明测试选项的目标选择。#13236
  • cargo-install:阐明 --path 是安装源而不是目标。#13205
  • 贡献:修复团队 HackMD 链接。#13237
  • 贡献:突出显示非阻塞功能门控技术。#13307

内部

  • 🎉 新增成员 crate cargo-util-schemas!此 crate 包含低级 Cargo schema 类型,重点关注用于读取文件和解析命令行的 serdeFromStr。任何从这些类型获取最终语义的逻辑可能需要其他工具来处理,例如 cargo metadata。此 crate 在 crates.io 上的发布与其他成员 crate 相同。它遵循 Rust 的 6 周发布流程#13178 #13185 #13186 #13209 #13267
  • 更新到 gix 0.57.1。#13230
  • cargo-fix:移除 cargo fix 中的 error-format 特殊情况。#13224
  • cargo-credential:版本升级到 0.4.3。#13221
  • mdman:更新到 handlebars 5.0.0。#13168 #13249
  • rustfix:移除无用的 clippy 规则并修复一个拼写错误。#13182
  • ci:修复 Dependabot 的 MSRV 自动更新。#13265 #13324 #13268
  • ci:添加依赖项仪表板#13255
  • ci:更新 alpine docker 标签到 v3.19。#13228
  • ci:改进 GitHub Actions CI 配置。#13317
  • 解析器:在对空摘要进行排序时不会 panic。#13287

Cargo 1.76 (2024-02-08)

6790a512…rust-1.76.0

新增

  • 为用于 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>" 功能。#13071
  • 扩展 Package ID spec 以支持无歧义的 spec。(文档)#12933
    具体来说,
    • 支持 git+path+ 方案。
    • 支持 Git ref 查询字符串,例如 ?branch=dev?tag=1.69.0

变更

  • ❗️ 禁止在虚拟工作空间中使用 [lints],因为它们会被忽略,并且用户可能指的是 [workspace.lints]。这是初始实现中的疏忽(例如,[dependencies] 会产生相同的错误)。#13155
  • 在 Package ID spec 和 cargo new 等多个地方禁止使用空名称。#13152
  • 遵循 rust-lang/rustomit-git-hash 选项。#12968
  • 即使只有一个错误,也会显示带有数字的错误计数。#12484
  • all-static 功能现在包含 vendored-libgit2#13134
  • crates-io:与 registry 交互时添加对其他 2xx HTTP 状态码的支持。#13158 #13160
  • home:将 SHGetFolderPathW 替换为 SHGetKnownFolderPath。#13173

修复

  • 在 wincon 上打印带颜色的 rustc 消息。#13140
  • 修复了在包含空格的目录中的 bash 补全问题。#13126
  • 修复了在 Windows 上卸载正在运行的二进制文件失败的问题。#13053 #13099
  • 修复了重复链接的错误消息。#12973
  • 修复了 --quiet 与嵌套子命令一起使用的问题。#12959
  • 修复了 dev-dependencies 中存在循环时发生的 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 目录下的下载源文件和 registry 索引。(文档)#12634 #12958 #12981 #13055
  • 🔥 添加了一个新的环境变量 CARGO_RUSTC_CURRENT_DIR。这是调用 rustc 的路径。(文档)#12996
  • -Zcheck-cfg:为 -Zcheck-cfg 的 fingerprint 中包含已声明的功能列表。#13012
  • -Zcheck-cfg:修复没有功能的 --check-cfg 调用。#13011
  • -Ztrim-paths:为 -Zbuild-std 重新排序 --remap-path-prefix 标志。#13065
  • -Ztrim-paths:使用 . 显式重新映射当前目录。#13114
  • -Ztrim-paths:使用真实调试器进行测试。#13091 #13118
  • -Zpublic-dependency:将 exported-private-dependencies lints 限制在库中。#13135
  • -Zpublic-dependency:禁止工作空间继承依赖项的公共状态。#13125
  • -Zpublic-dependency:为 cargo add 添加 --public#13046
  • -Zpublic-dependency:移除未使用的公共依赖项错误处理。#13036
  • -Zmsrv-policy:优先考虑 MSRV,而不是忽略不兼容。#12950
  • -Zmsrv-policy:在 MSRV 解析器中降低无 rust-version 的优先级。#13066
  • -Zrustdoc-scrape-examples:抓取文档示例时不对工作空间成员进行过滤。#13077

文档

  • 推荐更广泛的选择支持 libsecret 的密码管理器。#12993
  • 阐明了不同的 target 具有不同的 CARGO_CFG_* 值集合。#13069
  • 阐明了 [lints] 表仅影响当前包的本地开发。#12976
  • 阐明了 cargo search 可以在其他 registry 中搜索。#12962
  • 添加了用于验证 rust-version (MSRV) 字段的常见 CI 实践。#13056
  • 添加了指向 rustc lint 级别文档的链接。#12990
  • 从相关工作空间表添加了指向包 lint 表的链接。#13057
  • 贡献:向贡献文档添加更多资源。#13008
  • 贡献:更新 credential crate 的发布方式。#13006
  • 贡献:移除评审能力通知。#13070

内部

  • 🎉 将 rustfix crate 迁移到 rust-lang/cargo 仓库。#13005 #13042 #13047 #13048 #13050
  • 更新到 curl-sys 0.4.70,对应 curl 8.4.0。#13147
  • 更新到 gix-index 0.27.1。#13148
  • 更新到 itertools 0.12.0。#13086
  • 更新到 rusqlite 0.30.0。#13087
  • 更新到 toml_edit 0.21.0。#13088
  • 更新到 windows-sys 0.52.0。#13089
  • 更新到 tracing 0.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:不检查 home 与 beta/stable 分支的兼容性。 #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:从测试中移除已删除的特性 test_2018_feature#13156
  • test:在某些测试中移除 jobserver 环境变量。 #13072
  • test:修复一个 rustflags 测试中使用了错误的 buildfile 名称的问题。 #12987
  • test:修复某些测试输出验证的问题。 #12982
  • test:在 windows-gnu 上忽略 changing_spec_relearns_crate_types 测试。 #12972

Cargo 1.75 (2023-12-28)

59596f0f…rust-1.75.0

新增

  • Cargo.toml 中的 package.version 字段现在是可选的,默认值为 0.0.0。没有 package.version 字段的包不能发布。 #12786
  • 在支持的终端上,--timingscargo 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:澄清不同依赖类型的 flag 行为。 #12823
  • cargo-remove:建议要移除的依赖只存在于另一个 section 中。 #12865
  • cargo-update:当差异仅是构建元数据时,不要称之为“降级”。 #12796
  • 增强了帮助文本,澄清 --test flag 是针对 Cargo 目标,而不是测试函数。 #12915
  • 在构建脚本警告中包含包名/版本。 #12799
  • 为错误的 -Z flag 提供下一步操作建议。 #12857
  • 当找不到 cargo-<command> 时,建议使用 cargo search#12840
  • 不允许空的特性名称。 #12928
  • --target--exclude flag 添加了不支持的短 flag 建议。 #12805
  • --out-dir flag 添加了不支持的短 flag 建议。 #12755
  • -Z flag 添加了不支持的小写 -z flag 建议。 #12788
  • 为不支持的 --path flag 添加了更好的建议。 #12811
  • 目标目录路径无效时添加了详细消息。 #12820

修复

  • 修复了 Cargo 在写入文件时被杀死导致的损坏问题。 #12744
  • cargo-add:保留更多注释。 #12838
  • cargo-fix:在 rustc 调用时保留 jobserver 文件描述符。 #12951
  • cargo-remove:保留特性注释。 #12837
  • 在 timings HTML 报告中发生错误时,移除了不必要的反斜杠。 #12934
  • 修复了错误消息,该消息声称无效的特性名称可以包含 -#12939
  • 当 lockfile 中存在依赖项的版本时,Cargo 会使用该“精确”版本,包括构建元数据。 #12772

仅 Nightly 版本

  • 添加了 Edition2024 不稳定特性。 文档 #12771
  • 🔥 -Ztrim-paths 特性添加了一个新的 profile 设置,用于控制最终二进制文件中路径的清理方式。(RFC 3127)(文档#12625 #12900 #12908
  • -Zcheck-cfg:适应新的 rustc 语法和行为。 #12845
  • -Zcheck-cfg:移除 -Zcheck-cfg 警告中过时的选项。 #12884
  • public-dependency:支持工作空间依赖项的 public 依赖配置。 #12817

文档

  • profile:添加缺少的 strip 信息。 #12754
  • features:关于特性数量新限制的说明。 #12913
  • crates-io:为 NewCrate struct 添加文档注释。 #12782
  • resolver:高亮显示回答依赖项解析问题的命令。 #12903
  • cargo-bench:--bench 无条件传递给 bench harness。 #12850
  • cargo-login:在 manpage 中提及 -- 之后的参数。 #12832
  • cargo-vendor:澄清使用 vendored source 的配置会打印到 stdout。 #12893
  • manifest:更新到 SPDX 2.3 许可证表达式和 3.20 许可证列表。 #12827
  • contrib:清单编辑策略。 #12836
  • contrib:在 mdbook 搜索中使用 AND 搜索词,并修复了损坏的链接。 #12812 #12813 #12814
  • contrib:描述如何添加新包。 #12878
  • contrib:移除了审核能力通知。 #12842

内部

  • 更新到 itertools 0.11.0。 #12759
  • 更新到 cargo_metadata 0.18.0。 #12758
  • 更新到 curl-sys 0.4.68,对应 curl 8.4.0。 #12808
  • 更新到 toml 0.8.2。 #12760
  • 更新到 toml_edit 0.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
  • 将 index summary 枚举的查找逻辑上移。 #12749 #12923
  • 在 CI 中为 Cargo 贡献者指南生成重定向 HTML 页面。 #12846
  • 添加新的包缓存锁模式。 #12706
  • 为 issue 6915 添加回归测试:特性和传递性开发依赖。 #12907
  • 当 PR 审核状态改变时自动打标签。 #12856
  • credential:在所有发布的 crate 中包含许可证文件。 #12953
  • credential:按 OS 过滤 cargo-credential-* 依赖项。 #12949
  • CI:将 cargo-semver-checks 提升到 0.24.0。 #12795
  • CI:自动设置和验证 Cargo 的 crate 的所有 MSRV。 #12767 #12654
  • CI:为发布 Cargo 贡献者手册使用单独的并发组。 #12834 #12835
  • CI:更新 actions/checkout action 到 v4。 #12762
  • cargo-search:改进了输出的边距计算。 #12890

Cargo 1.74 (2023-11-16)

80eca0e5…rust-1.74.0

新增

  • 🎉 [lints] 表已稳定,允许你在 Cargo.toml 中配置 rustc 和其他工具 lints 的报告级别。(RFC 3389)(文档#12584 #12648
  • 🎉 不稳定特性 credential-processregistry-auth 已稳定。这些特性整合了与私有注册表进行身份验证的方式。(RFC 2730)(RFC 3139)(文档#12590 #12622 #12623 #12626 #12641 #12644 #12649 #12671 #12709
    重要变更
    • 引入了一种新的协议,用于外部和内置提供程序存储和检索注册表身份验证凭据。
    • 在注册表索引的 config.json 中添加了 auth-required 字段,启用了认证的 sparse 索引、crate 下载和搜索 API。
    • 使用带认证的替代注册表时,必须配置凭据提供程序,以避免在磁盘上无意中存储未加密的凭据。
    • 这些设置可以在 [registry][registries] 表中配置。
  • 🎉 --keep-going flag 已稳定,现在可在每个构建命令中使用(除了 benchtest,它们使用 --no-fail-fast)。(文档#12568
  • cargo clean 添加了 --dry-run flag 和结尾的摘要行。 #12638
  • 为 CLI 选项 --dry-run 添加了短别名 -n#12660
  • 添加了对 target.'cfg(..)'.linker 的支持。 #12535
  • 允许在诸如 --package 等 flag 中使用不完整的版本,只要它们是明确的。 #12591 #12614 #12806

变更

  • ❗️ 更改了配置中数组的合并方式。以前的顺序是不明确的,现在为了保持一致性,遵循其他配置类型的工作方式。 摘要 #12515
  • ❗️ cargo-clean:如果 --doc-p 混合使用,则报错。 #12637
  • ❗ cargo-new / cargo-init 不再从库的 VCS 忽略文件中排除 Cargo.lock#12382
  • cargo-update:静默弃用 --aggressive,转而使用新的 --recursive#12544
  • cargo-update:-p/--package 可以用作位置参数。 #12545 #12586
  • cargo-install:当包名看起来像 URL 时建议使用 --git#12575
  • cargo-add:当特性列表太长时进行摘要。 #12662 #12702
  • --target 的 shell 补全使用 rustup,但会回退到 rustc。 #12606
  • 帮助用户了解可能的 --target 值。 #12607
  • 增强了“registry index not found”错误消息。 #12732
  • 增强了 --explain 的 CLI 帮助消息。 #12592
  • 增强了使用 serde-untagged 的 untagged enums 的反序列化错误。 #12574 #12581
  • 增强了 prerelease 版本候选不匹配时的错误。 #12659
  • 增强了对模糊 Package ID spec 的建议。 #12685
  • 增强了 TOML 解析错误以显示上下文。 #12556
  • 增强了文件系统错误,通过为 std::fs::metadata 添加包装器。 #12636
  • 增强了 resolver 版本不匹配警告。 #12573
  • 使用 clap 为不支持的参数建议替代参数。 #12529 #12693 #12723
  • 移除了 cargo new/init --help 输出中冗余的信息。 #12594
  • 控制台输出和样式调整。 #12578 #12655 #12593

修复

  • cargo rustc --print --target 使用完整的 target spec。 #12743
  • 也为 EFI targets 复制 PDB。 #12688
  • 修复了 resolver 行为与包顺序无关的问题。 #12602
  • 修复了 cargo remove 不必要地清理 profile.release.package."*" 的问题。 #12624

仅 Nightly 版本

  • -Zasymmetric-token:为非对称 token 支持创建了专门的不稳定 flag。 #12551
  • -Zasymmetric-token:改进了非对称 token 的 logout 消息。 #12587
  • -Zmsrv-policy:**非常**初步的 MSRV resolver 支持。 #12560
  • -Zscript:支持代码块(code fence)。 #12681
  • -Zbindeps:支持来自注册表的依赖项。 #12421

文档

  • ❗ 策略变更:将 Cargo.lock 签入版本控制现在是默认选项,即使对于库也是如此。Lockfile 和 CI 集成文档也进行了扩展。策略文档Lockfile 文档CI 文档#12382 #12630
  • SemVer:更新了关于移除可选依赖的文档。 #12687
  • Contrib:增加了安全响应流程。 #12487
  • cargo-publish:警告上传超时。 #12733
  • mdbook:当有多个搜索词时使用 AND 搜索。 #12548
  • 建立了发布最佳实践。 #12745
  • 澄清 caret 要求。 #12679
  • 澄清 version 对于 git 依赖的工作方式。 #12270
  • 澄清并区分 split-debuginfo 的默认值。 #12680
  • devrelease profiles 中添加了缺少的 strip 条目。 #12748

内部

  • 更新到 curl-sys 0.4.66,对应 curl 8.3.0。 #12718
  • 更新到 gitoxide 0.54.1。 #12731
  • 更新到 git2 0.18.0,对应 libgit2 1.7.1。 #12580
  • 更新到 cargo_metadata 0.17.0。 #12758
  • 更新了 target-arch-aware 的 crate 以支持 mips r6 targets。 #12720
  • publish.py:移除过时的 sleep() 调用。 #12686
  • 定义 {{command}} 用于 src/doc/man/includes。 #12570
  • 为网络消息设置 tracing target network#12582
  • cargo-test-support:添加 with_stdout_unordered#12635
  • dep:从 termcolor 切换到 anstream#12751
  • Source trait 放到 cargo::sources 下。 #12527
  • SourceId:将 namealt_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
  • 使用枚举描述 index summaries,以便在 summaries 不可用时提供更丰富的信息进行解析。 #12643
  • 使用最短路径解析从给定依赖项到根目录的路径。 #12678
  • 在同一位置读/写编码的 cargo update --precise#12629
  • 为内部包设置 MSRV。 #12381
  • CI:更新 Renovate schema。 #12741
  • CI:忽略 MSRV 中的 patch 版本。 #12716

Cargo 1.73 (2023-10-05)

45782b6b…rust-1.73.0

新增

  • 在 extra verbose mode -vv 中打印 cargo run/bench/test 的环境变量。 #12498
  • 在 Cargo timings graph 上显示包版本。 #12420

变更

  • ❗️ Cargo 现在在使用自定义构建脚本中的 cargo:: 时会中止。这是为即将到来的构建脚本调用变更做准备。 #12332
  • ❗️ cargo login 不再接受 -- 语法后的任何 token。-- 之后的参数现在保留用于新的 credential provider 特性。这引入了一个回退,忽略了早期版本中对 cargo login -- <token> 的支持。 #12499
  • 使 Cargo --help 更易于浏览。 #11905
  • 如果 cargo test 进程被信号终止,则提示使用 --nocapture flag。 #12463
  • 在 rustc 调用中保留 jobserver 文件描述符,以获取目标信息。 #12447
  • --help 中澄清 cargo test --all-targets 不包含 doctests。 #12422
  • 在发布时将 cargo.toml 规范化为 Cargo.toml,并对其他情况下的 Cargo.toml 发出警告。 #12399

修复

  • 仅在 ~/.cargo/{git,registry} 上跳过 mtime 检查。 #12369
  • 修复了 WSL2 上 cargo doc --open 崩溃的问题。 #12373
  • 修复了为某些字符串启用 http.debug 时发生 panic 的问题。 #12468
  • 修复了 cargo remove 错误地移除已使用的 patch 的问题。 #12454
  • 修复了 crate checksum lookup query 应匹配 semver build metadata 的问题。 #11447
  • 修复了为 [registries] 表中未使用字段打印多个警告消息的问题。 #12439

仅 Nightly 版本

  • 🔥 -Zcredential-process 已重新实现,提供了与不同凭据提供程序通信的更清晰方式。Cargo 中也添加了几个内置提供程序。文档 #12334 #12396 #12424 #12440 #12461 #12469 #12483 #12499 #12507 #12512 #12518 #12521 #12526
    一些值得注意的变更
    • 在 Cargo 配置中将 credential-process 重命名为 credential-provider
    • 通过 stdin/stdout 与外部凭据提供程序通信的新 JSON 协议。
    • GNOME Secert 提供程序现在动态加载 libsecert
    • 1password 提供程序不再是内置的。
    • 非对称 token 的不稳定键从 registry-auth 更改为 credential-process
  • ❗️ 移除了 cargo testcargo bench--keep-going flag 的支持。 #12478 #12492
  • 修复了 -Zscript 生成的无效包名问题。 #12349
  • -Zscript 现在在使用不支持的命令(publishpackage)时会报错。 #12350
  • 正确编码 Cargo.lock 中 source ID 的 URL 参数。 #12280
  • 将无效的 panic_unwind std feature 替换为 panic-unwind#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 上不允许仅在元数据 tag 不同的多个版本。 #12335
  • 澄清 lto 设置会传递 -Clinker-plugin-lto#12407
  • profile.strip 添加到配置和环境变量文档中。 #12337 #12408
  • 添加了 artifact JSON debuginfo 级别的文档。 #12376
  • 添加了关于向后兼容的 .cargo/credential 文件存在的注意事项。 #12479
  • 提高了对工作空间内部使用 resolver = 2 的认识。 #12388
  • 在文档中用 default branch 替换了 master branch。 #12435

内部

  • 更新到 criterion 0.5.1。 #12338
  • 更新到 curl-sys 0.4.65,对应 curl 8.2.1。 #12406
  • 更新到 indexmap v2。 #12368
  • 更新到 miow 0.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 headers 和 Error 类型。 #12310
  • 对于 cargo update,在 clap 中捕获了 --aggressive--precise 之间的 CLI flag 冲突。 #12428
  • 若干修复以使 Cargo testsuite 在 nightly 或 rust-lang/rust 中通过。 #12413 #12416 #12429 #12450 #12491 #12500

Cargo 1.72 (2023-08-24)

64fb38c9…rust-1.72.0

新增

  • ❗ 默认启用 -Zdoctest-in-workspace。运行每个文档测试时,工作目录设置为测试所属包的根目录。文档 #12221 #12288
  • 添加对“default”关键字的支持,以将先前设置的 build.jobs 并行度重置回默认值。 #12222

变更

  • 🚨 CVE-2023-40030:恶意依赖项可以将任意 JavaScript 注入到 Cargo 生成的 timing reports 中。为了缓解此问题,特性名称验证检查现在已成为硬错误。该警告已在 Rust 1.49 中添加。这些扩展字符在 crates.io 上是不允许的,因此这应该只会影响其他注册表的用户或不发布到注册表的用户。 #12291
  • 当 edition 2021 包位于虚拟工作空间中且未设置 workspace.resolver 时,Cargo 现在会发出警告。建议为工作空间明确设置 resolver 版本。 #10910
  • 将 IBM AIX 共享库搜索路径设置为 LIBPATH#11968
  • 不向 rustc 传递 -C debuginfo=0,因为这是默认值。 #12022 #12205
  • cargo install 失败时,添加了关于重用先前临时路径的消息。 #12231
  • 当 rustup override shorthand 放置在错误位置时添加了消息。 #12226
  • 在 fetching nested submodules 时尽可能遵循 scp-like URL。 #12359 #12411

修复

  • cargo clean 使用 remove_dir_all 作为回退来解决竞争条件。 #11442
  • 减少了 Cargo 重新格式化用户 [features] 表格的机会。 #12191
  • 修复了 nested Git submodules 无法 fetch 的问题。 #12244

仅 Nightly 版本

文档

  • 在 Cargo FAQ 中添加了关于 Cargo.lock 冲突的描述。 #12185
  • 添加了一个小注释,说明 indexes 忽略 SemVer build metadata。 #12206
  • cargo::sources 模块中的类型和相关项添加了文档注释。 #12192 #12239 #12247
  • Source download functions 添加了更多文档。 #12319
  • 为 credential helpers 添加了 READMEs。 #12322
  • 修复了 Dependency Resolution 中的 version requirement 示例。 #12267
  • 澄清了 cargo-install 的默认行为。 #12276
  • 澄清了使用“default”分支而不是默认 main 的用法。 #12251
  • 提供了关于 version requirements 的指导。 #12323

内部

  • 更新到 gix 0.45,支持多轮 pack negotiations。 #12236
  • 更新到 curl-sys 0.4.63,对应 curl 8.1.2。 #12218
  • 更新到 openssl 0.10.55。 #12300
  • 更新了几个依赖项。 #12261
  • 移除了 windows-sys 依赖项中未使用的 features。 #12176
  • 重构了 compiler invocations。 #12211
  • 重构了 git 和 registry sources,以及 registry data。 #12203 #12197 #12240 #12248
  • 按字母顺序排列 -Z flags。 #12182 #12223 #12224
  • Cargo 自身测试基础设施的若干改进和加速。 #12184 #12188 #12189 #12194 #12199
  • 将 print-ban 从 test 迁移到 clippy。 #12246
  • 切换到 OnceLock 用于 interning uses。 #12217
  • 移除了一处不必要的 .clone#12213
  • 在非 Linux 平台不尝试编译 cargo-credential-gnome-secret#12321
  • 使用宏移除工作空间可继承字段 getter 的重复代码。 #12317
  • 提取并重新安排 registry API 项目到各自的模块中。 #12290
  • 当 container 测试失败时显示更好的错误。 #12264

Cargo 1.71.1 (2023-08-03)

修复

  • 🚨 CVE-2023-38497:Cargo 1.71.1 或更高版本在提取 crate archive 时遵循 umask。它还会清除由旧 Cargo 版本生成的缓存。

Cargo 1.71 (2023-07-13)

84b7041f…rust-1.71.0

新增

  • 允许在 Cargo.toml 中使用命名的 debuginfo 选项。文档 #11958
  • workspace_default_members 添加到 cargo metadata 的输出中。 #11978
  • 运行 cargo new/cargo init 时自动继承工作空间字段。 #12069

变更

  • ❗ 优化了 rustup 下的使用。当 Cargo 检测到将要运行指向 rustup proxy 的 rustc 时,它会尝试绕过 proxy 并直接使用底层二进制文件。这与 rustup 和 RUSTUP_TOOLCHAIN 的交互存在一些假设,但预计不会影响普通用户。 #11917
  • ❗ 在查询包时,Cargo 只尝试原始名称、所有连字符和所有下划线来处理拼写错误。之前,Cargo 会尝试连字符和下划线的每种组合,导致对 crates.io 发出过多请求。 #12083
  • ❗ 不允许在 [env] 配置表中设置 RUSTUP_HOMERUSTUP_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 invocations 以进行 target info discovery。 #12029
  • 修复了在使用 HTTP/2 时 http debug 中 token 未被隐藏的问题。 #12095
  • 修复了 -C debuginfo 在某些情况下未传递,导致 build cache miss 的问题。 #12165
  • 修复了 cargo install 找到同名包时的歧义问题。此问题发生在包依赖于自身旧版本的情况下。 #12015
  • 修复了 cargo package 检查冲突文件时出现的 false positive 问题。 #12135
  • 修复了当 dep/feat 语法与 dep: 语法共存且尝试启用可选依赖的特性时不起作用的问题。 #12130
  • 修复了 cargo tree 未正确处理带 -e no-proc-macro 输出的问题。 #12044
  • 当 Cargo.toml 中的 readmelicense-file 为空时,在 cargo package 中发出警告而不是错误。 #12036
  • 修复了当使用 HTTP proxy 且 Cargo 可执行文件链接到特定版本的系统 libcurl 时,CURL 连接可能失败的问题。受影响的 libcurl 版本:7.87.0, 7.88.0, 7.88.1。 #12234 #12242

仅 Nightly 版本

  • 🔥 -Zgitoxide 特性现在支持依赖项和注册表索引的 shallow clones 和 fetches。文档 #11840
  • 🔥 -Zlints 特性允许在 Cargo.toml 中配置 lints 规则。文档 #12148 #12168
  • nightly-2023-05-04 中缺少 features 导致的 -Zbuild-std 破坏问题已在 nightly-2023-05-05 中修复。 #12088
  • 在 profile rustflags 改变时重新编译。 #11981
  • 添加了 -Zmsrv-policy feature flag 占位符。 #12043
  • cargo add 现在在使用 -Zmsrv-policy 选择包时会考虑 rust-version#12078

文档

  • 添加了 Cargo team charter。文档 #12010
  • SemVer:对现有项添加 #[non_exhaustive] 是一个 breaking change。 #10877
  • SemVer:将 unsafe 函数变为 safe 不是一个 breaking change。 #12116
  • SemVer:更改 MSRV 通常是一个 minor change。 #12122
  • 澄清何时以及如何使用 cargo yank#11862
  • 澄清 crates.io 不会立即链接到 docs.rs。 #12146
  • 澄清关于 test target setting 的文档。 #12032
  • 在 Index format 中指定 rust_version#12040
  • 在 owner-remove registry API 响应中指定 msg#12068
  • 为 artifact-dependencies 添加了更多文档。 #12110
  • Source 和 cargo-the-library 的 build script 添加了文档注释。 #12133 #12153 #12159
  • 若干 typo 和 broken link 的修复。 #12018 #12020 #12049 #12067 #12073 #12143
  • home:澄清在每个平台上的行为。 #12047

内部

  • 更新到 linux-raw-sys 0.3.2。 #11998
  • 更新到 git2 0.17.1,对应 libgit2 1.6.4。 #12096
  • 更新到 windows-sys 0.48.0。 #12021
  • 更新到 libc 0.2.144。 #12014 #12098
  • 更新到 openssl-src 111.25.3+1.1.1t。 #12005
  • 更新到 home 0.5.5。 #12037
  • 启用了 Win32_System_Console feature,因为它正在使用。 #12016
  • Cargo 现在是一个 Cargo 工作空间了。我们终于开始 dogfood 自己了! #11851 #11994 #11996 #12024 #12025 #12057
  • 🔥 为 Cargo 贡献者提供了一个新的、直观的问题标签系统。文档 #11995 #12002 #12003
  • 允许 win/mac credential managers 在所有平台上构建。 #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 是否需要版本 bump。 #12126
  • 修复了一些测试基础设施问题。 #11976 #12026 #12055 #12117

Cargo 1.70 (2023-06-01)

9880b408…rust-1.70.0

新增

  • 🎉 添加了 cargo logout 命令,用于从本地注册表中删除 API token。文档 #11919 #11950
  • cargo install 添加了 --ignore-rust-version flag。 #11859
  • 在编译 crate 时,CARGO_PKG_README 环境变量现在被设置为 README 文件的路径。 #11645
  • Cargo 现在显示更丰富的 Cargo target 编译失败信息。 #11636

变更

  • 🎉 sparse 协议现在是 crates.io 的默认协议!(RFC 2789)(文档#11791 #11783
  • cargo logincargo logout 现在使用 registry.default 中指定的注册表。这是一个无意的回退。 #11949
  • cargo update 在降级依赖项时准确显示 Downgrading 状态。 #11839
  • 为 HTTP 错误添加了更多信息,以帮助调试。 #11878
  • 在 Cargo 中添加了网络重试延迟。 #11881
  • 优化了 cargo publish 在等待发布完成时的消息。 #11713
  • 当从 git 仓库安装但找到多个包时,提供更好的错误消息。 #11835

修复

  • 移除了 cargo tree--charset 选项中可能的重复值。 #11785
  • 修复了同时定义带值和不带值的 config 时 CARGO_CFG_ 变量的问题。 #11790
  • cargo add 添加依赖项时,解决了 cyclic features 的无限循环问题。 #11805
  • [patch] 涉及依赖项解析并导致冲突时,不 panic。 #11770
  • 修复了 credential token 格式验证问题。 #11951
  • 添加了 publish 时缺少的 token 格式验证。 #11952
  • 修复了 Config snapshot 中查找 env vars 时的大小写不匹配问题。 #11824
  • cargo new 生成正确的 .hgignore,与其它 VCS ignore files 语义对齐。 #11855
  • 停止执行不必要的模糊 registry index queries。这显著减少了对 crates.io 等远程注册表为名称中包含 -_ 的 crate 发出的 HTTP 请求数量。 #11936 #11937

仅 Nightly 版本

  • 添加了 -Zdirect-minimal-versions。它的行为类似于 -Zminimal-versions,但仅限于直接依赖项。(文档#11688
  • 添加了 -Zgitoxide,将 Cargo 中的所有 git fetch 操作切换为使用 gitoxide crate。这仍然是 MVP 版本,但性能可能提升两倍。(文档#11448 #11800 #11822 #11830
  • 移除了 -Zjobserver-per-rustc。其 rustc 对应项从未实现。 #11764

文档

  • 清理了不稳定特性文档。 #11793
  • 使用图表增强了 timing report 的文档。 #11798
  • 澄清了发布后注册表索引状态的要求。 #11926
  • 澄清了关于 -C 的文档,说明它出现在命令之前。 #11947
  • 澄清了 cargo test, cargo benchcargo run 的工作目录行为。 #11901
  • 修复了 registries.name.index 配置的文档。 #11880
  • 关于 cargo-add 帮助文本中潜在的意外 shell expansions 的注意事项。 #11826
  • 更新了 external-tools JSON 文档。 #11918
  • 指出了 index JSON 和 API 或 metadata 之间的差异。 #11927
  • 提及 pkgid format 时始终使用 @#11956
  • 增强了 Cargo Contributor Guide。 #11825 #11842 #11869 #11876
  • 将部分 Cargo Contributor Guide 移至 Cargo API 文档。文档 #11809 #11841 #11850 #11870
  • Cargo team 现在组织 Office Hours#11903

内部

  • 切换到 sha2 crate 进行 SHA256 计算。 #11795 #11807
  • 切换 benchsuite 到 index archive。 #11933
  • 更新到 base64 0.21.0。 #11796
  • 更新到 curl-sys 0.4.61,对应 curl 8.0.1。 #11871
  • 更新到 proptest 1.1.0。 #11886
  • 更新到 git2 0.17.0,对应 libgit2 1.6.3。 #11928
  • 更新到 clap 4.2。 #11904
  • cargo-deny 集成到 Cargo 自己的 CI pipeline 中。 #11761
  • 使 non-blocking IO calls 更健壮。 #11624
  • cargo-platform 中移除了 serdederive feature。 #11915
  • std::fs::canonicalize 替换为更健壮的 try_canonicalize#11866
  • std::env::var 及相关函数启用了 disallowed_methods 的 clippy 警告。 #11828

Cargo 1.69 (2023-04-20)

985d561f…rust-1.69.0

新增

  • 当编译警告可以自动修复时,Cargo 现在建议使用 cargo fixcargo clippy --fix#11558
  • 当你尝试安装一个库 crate 时,Cargo 现在会建议使用 cargo add#11410
  • Cargo 现在也会为二进制示例设置 CARGO_BIN_NAME 环境变量。 #11705

变更

  • ❗ 当工作空间依赖的 default-features 设置为 false,而成员的继承依赖的 default-features = true 时,Cargo 将启用该依赖的默认特性。 #11409
  • ❗ 在 [env] 配置表中禁止使用 CARGO_HOME。Cargo 自身不会获取这个值,但递归调用 Cargo 时会获取,这不是预期的行为。 #11644
  • ❗ 如果未明确设置,构建依赖的 Debuginfo 现在默认关闭。这预计会提高整体构建时间。 #11252
  • Cargo 现在对注册表 token 中的无效字母数字字符发出错误。 #11600
  • cargo add 现在仅检查 [dependencies] 的顺序,不考虑 [dependencies.*]#11612
  • Cargo 现在通过更新其依赖 jobserver 来遵循 GNU Make 4.4 中的新 jobserver IPC 风格。 #11767
  • 当没有二进制文件满足要求时,cargo install 现在报告所需的特性。 #11647

修复

  • .dwp DWARF package file 提升到可执行文件旁边,以便调试器定位它们。 #11572
  • 修复了当 rerun-if-changed 指向一个文件系统不保留 mtime 的目录时,构建脚本会触发重新编译的问题。 #11613
  • 修复了在使用 [patch] 时,从 [workspace.dependencies] 使用依赖项会导致 panic 的问题。这种用法本不应被支持。 #11565 #11630
  • 修复了 cargo report 多次保存相同的 future-incompat reports 的问题。 #11648
  • 修复了将以 .rs 结尾的目录错误推断为文件的问题。 #11678
  • 修复了 .cargo-ok 文件被错误截断,导致无法使用依赖项的问题。 #11665 #11724

仅 Nightly 版本

  • -Zrustdoc-scrape-example 必须在构建脚本出错时失败。 #11694
  • 更新了 1password credential manager 集成到 version 2 CLI。 #11692
  • 为传递性 artifact dependencies 在目标不直接交互的情况下发出错误消息。 #11643
  • 添加了 -C flag,用于在构建开始前更改当前目录。 #10952

文档

  • 澄清了 CARGO_CRATE_NAMECARGO_PKG_NAME 的区别。 #11576
  • 为 target triple 的出现添加了指向 Glossary 中 Target section 的链接。 #11603
  • 描述了当前的 resolver 有时会重复依赖项。 #11604
  • 添加了关于在 crates.io 上验证电子邮件地址的注意事项。 #11620
  • publish.timeout 文档中提及当前的默认值。 #11652
  • cargo::core::compiler 模块的更多文档注释。 #11669 #11703 #11711 #11758
  • 添加了关于如何实现不稳定特性的更多指导。 #11675
  • 修复了 codegen-backend 的不稳定章节布局。 #11676
  • 添加了 LTO 文档的链接。 #11701
  • cargo install 的配置发现文档添加到 man 页面。 #11763
  • 文档记录了 -F flag 是 cargo add--features 的别名。 #11774

内部

  • 在 Windows 上禁用 network SSH 测试。 #11610
  • 将一些 blocking tests 变为 non-blocking。 #11650
  • 在 CI 中拒绝 warnings,而不是在本地。 #11699
  • cargo_new::NewProjectKind 重新导出为 public。 #11700
  • 使依赖项按字母顺序排列。 #11719
  • 将一些测试从 build 切换到 check#11725
  • 整合了 Cargo 内部读取环境变量的方式。 #11727 #11754
  • 修复了 nondeterministic ordering 的测试。 #11766
  • 添加了一个测试来验证中间 artifacts 是否持久保存在临时目录中。 #11771
  • 更新了 aarch64-apple-darwin 的 cross test instructions。 #11663
  • 更新到 toml v0.6 和 toml_edit v0.18 进行 TOML 操作。 #11618
  • 更新到 clap v4.1.3。 #11619
  • windows-sys crate 替换了 winapi 进行 Windows 绑定。 #11656
  • 重用 url crate 进行 percent encoding,而不是 percent-encoding#11750
  • Cargo 贡献者在编写文档时可以受益于 smart punctuations,例如,--- 会自动转换为 en dash。(文档#11646 #11715
  • Cargo 的 CI pipeline 现在覆盖了 nightly 上的 macOS。 #11712
  • 在 Cargo 自身中重新启用了部分 clippy lints。 #11722
  • 在 Cargo 的 CI 中启用了 sparse protocol。 #11632
  • Cargo 中的 Pull requests 现在会为 A-*Command-* 标签自动打标签。 #11664 #11679

Cargo 1.68.2 (2023-03-28)

115f3455…rust-1.68.0

  • 更新了捆绑在 Cargo 中的 GitHub RSA SSH host key。GitHub 在 2023-03-24 泄露旧密钥后更换了密钥#11883
  • 添加了对 SSH known hosts marker @revoked 的支持。 #11635
  • 将旧的 GitHub RSA host key 标记为已吊销。这将阻止 Cargo 接受泄露的密钥,即使系统信任它。 #11889

Cargo 1.68 (2023-03-09)

f6e737b1…rust-1.68.0

新增

  • 🎉 新的“sparse”协议已稳定。它在访问 crates.io 时应该提供显著的性能改进。(RFC 2789)(文档#11224 #11480 #11733 #11756
  • 🎉 home crate 现在是 rust-lang/cargo 仓库中的一个 subcrate。欢迎! #11359 #11481
  • 冗长的诊断消息现在可以被截断以提高可读性。 #11494
  • 即使启用了 net.git-fetch-with-cli,也会显示 crates.io index update 的进度。 #11579
  • cargo build --verbose 会告诉你更多关于为什么重新编译的信息。 #11407
  • Cargo 的文件锁定机制现在通过使用 fcntl 支持 Solaris。 #11439 #11474
  • 添加了一条新的 SemVer 兼容性规则,解释了关于 diagnostic lints 的预期行为。 #11596
  • cargo vendor 为来自同一 git 仓库的每个 revision 生成不同的 source replacement 条目。 #10690
  • Cargo 贡献者可以通过 triagebot 重新标记 issue。文档 #11498
  • Cargo 贡献者可以在 containers 中编写测试。 #11583

变更

  • Cargo 现在默认将凭据保存到 .cargo/credentials.toml。如果 .cargo/credentials 存在,出于向后兼容性原因,也会写入其中。 #11533
  • 为了防止敏感数据被记录,Cargo 在内部引入了一个新的 wrapper type。 #11545
  • 若干文档改进。 #11475 #11504 #11516 #11517 #11568 #11586 #11592

修复

  • cargo packagecargo publish 现在尊重工作空间的 Cargo.lock。这是预期的行为,但之前被忽视了。 #11477
  • 修复了 cargo vendor 在解析从工作空间继承的 git 依赖时失败的问题。 #11414
  • 当指定了 workspace.default-members 时,cargo install 现在可以正确安装 root package。 #11067
  • 修复了 target specific dependency errors 导致 panic 的问题。 #11541
  • 如果某个子命令没有 man page,则显示 --help#11473
  • 设置 target.cfg(…).rustflags 不应清除 build.rustdocflags#11323
  • 不支持的 profile.split-debuginfo 选项现在会被忽略,这在此之前会导致 Cargo 在某些平台上编译失败。 #11347 #11633
  • 在 Windows 无头会话中,即使文件名非常长,也不会 panic。 #11759

仅 Nightly 版本

  • 实现了对注册表的非对称 token 认证的初步支持。(RFC 3231)(文档#10771
  • 对于 auth-required: true 而没有 -Z sparse-registry 的情况不报错。 #11661
  • 支持 config 文件中 profiles 的 codegen-backendrustflags#11562
  • 当 warnings/errors 可以用 clippy 修复时,建议使用 cargo clippy --fix#11399
  • 修复了当 target field 指定与 optional = true 共存时 artifact deps 不工作的问题。 #11434
  • 让 Cargo 区分带 artifact targets 和不带 artifact targets 的 Unit#11478
  • cargo metadata 支持 artifact dependencies。 #11550
  • 允许某些 crate 在可选的 doc-scraping 期间构建失败。 #11450
  • 添加警告,如果由于 dev-dependencies 导致潜在可 scraping 的示例被跳过。 #11503
  • 默认情况下,不从 library targets 中 scrape 示例。 #11499
  • 修复了 proc-macro crate 的示例被 scrape 的问题。 #11497

Cargo 1.67 (2023-01-26)

7e484fc1…rust-1.67.0

新增

  • cargo remove 现在在成功移除依赖项后,会清理 root workspace manifest、profilepatchreplace section 中引用的依赖项。 #11194 #11242 #11351
  • cargo packagecargo publish 现在报告打包后 crate 的总大小和压缩后大小。 #11270

变更

  • ❗ 如果环境变量中已设置 $CARGO 的值,Cargo 现在会复用该值,并在执行外部子命令和构建脚本时转发该值。 #11285
  • ❗ 在不带 -p flag 运行 cargo update --precise 时,Cargo 现在会发出错误。 #11349
  • ❗ 如果配置中有多个注册表具有相同的 index URL,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 时现有忽略文件不是 UTF-8 时提供更好的错误消息。 #11321
  • cargo install . 提供更好的错误消息。 #11401
  • 当在多个构建目标中找到相同文件路径时提供更好的警告。 #11299
  • 更新了内部 HTTP 库 libcurl,包含各种修复和更新。 #11307 #11326

修复

  • 修复了 cargo clean 仅移除请求包的指纹和构建脚本 artifact 的问题。 #10621
  • 修复了当 config registry.default 设置时 cargo install --index 不工作的问题。 #11302
  • 修复了在找不到网络配置时意外禁用了 git2 safe-directory 的问题。 #11366
  • 从 crate atty 迁移以解决潜在的 soundness issue。 #11420
  • 清理 libgit2 索引中断时留下的 stale git temp files。 #11308

仅 Nightly 版本

  • 当某些编译警告/错误可以自动修复时,建议使用 cargo fix#10989 #11368
  • rustdoc-scrape-examples 改为 target-level 配置。 #10343 #11425 #11430 #11445
  • 将 artifact bin 依赖的更改传播到其 parent fingerprint。 #11353
  • 修复了 wait-for-publish 与 sparse registry 一起工作的问题。 #11356 #11327 #11388
  • 为 sparse registries 在 SourceId 中存储 sparse+ 前缀。 #11387 #11403
  • 实现了 alternative registry authentication 支持。(RFC 3139)(文档#10592
  • 添加了 config option registries.crates-io.protocol 的文档。 #11350

Cargo 1.66.1 (2023-01-10)

修复

  • 🚨 CVE-2022-46176: 为 git URL 添加了 SSH 主机密钥的验证。更多关于如何配置已知主机密钥的信息,请参见文档

Cargo 1.66 (2022-12-15)

08250398…rust-1.66.0

新增

  • 🎉 添加了 cargo remove 命令,用于从 Cargo.toml 中移除依赖。 文档 #11059 #11099 #11193 #11204 #11227
  • 添加了对包含相对路径 git 子模块的 git 依赖的支持。 #11106
  • Cargo 现在向注册表发送请求时会带上 Accept-Encoding 请求头。 #11292
  • Cargo 现在会将非 UTF8 参数转发给外部子命令。 #11118

变更

  • ❗ 从各个角度澄清了源替换的歧义。 RFC-3289 #10907
    • 当 crates-io 源被替换时,执行 API 操作时用户需要使用 --registry <NAME> 指定要使用的注册表。
    • 使用 crates.io token (registry.token) 不再允许发布到源已替换的 crates.io。
    • 在源替换中,replace-with 键可以引用 [registries] 表中替代注册表的名称。
  • 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 现在以更容易发现的方式报告未知特性。 #11098
  • Cargo 现在报告命令别名失败时提供更多错误上下文。 #11087
  • cargo login 提示收到空输入时,提供了更好的错误消息。 #11145
  • 对于支持工作空间继承的字段类型错误时,提供了更好的错误消息。 #11113
  • 当混合使用特性语法 dep:/ 时,提供了更好的错误消息。 #11172
  • 当发布时清单中的 package.publishfalse 时,提供了更好的错误消息。 #11280

仅 Nightly 版本

  • -Zpublish-timeout 之后添加了新的配置选项 publish.timeout文档 #11230
  • 为稀疏注册表添加了重试支持。 #11069
  • 修复了稀疏注册表 lockfile url 中包含 registry+sparse+ 的问题。 #11177
  • 添加了新的配置选项 registries.crates-io.protocol,用于控制 crates.io 协议。 #11215
  • 移除了 index.crates.io 的 sparse+ 前缀。 #11247
  • 修复了依赖稀疏注册表时的发布问题。 #11268
  • 修复了使用 -Zsparse-registry 时令人困惑的错误消息。 #11283
  • 修复了稀疏注册表的 410 Gone 响应处理问题。 #11286

Cargo 1.65 (2022-11-03)

4fd148c4…rust-1.65.0

新增

变更

  • 如果 Cargo 的 bin 路径已经存在于 PATH 中,Cargo 现在会停止添加它。 #11023
  • 通过对待处理的作业队列进行排序,改进了 Cargo 构建调度的性能。 #11032
  • 即使在 rev 字段中使用部分哈希,也改进了从 GitHub 获取 git 依赖项的性能。 #10807
  • Cargo 现在使用 git2 v0.15 和 libgit2-sys v0.14,这带来了与 git 新行为的几项兼容性修复。 #11004
  • 注册表索引文件现在根据内容哈希以更细粒度的方式缓存。 #11044
  • Cargo 现在使用标准库的 std::thread::scope 而不是 crossbeam crate 来生成范围线程。 #10977
  • Cargo 现在使用标准库的 available_parallelism 而不是 num_cpus crate 来确定默认并行度。 #10969
  • Cargo 现在会在看到 rust-version 要求不满足的错误消息时引导您如何解决。 #10891
  • 当找不到子命令时,Cargo 现在会告诉您更多可能的原因以及如何修复。 #10924
  • 当找不到给定的 Cargo 目标时,Cargo 现在会列出可用的目标名称。 #10999
  • cargo update 现在会在没有 --package 标志的情况下给出 --precise 时发出警告。经过过渡期后,这将成为硬错误。 #10988 #11011
  • cargo benchcargo test 现在在测试失败后立即报告更精确的测试执行错误。 #11028
  • cargo add 现在告诉您为哪个版本添加了特性。 #11075
  • 指出 Rust 不再支持非 ASCII 包名称。 #11017
  • 在清单中预期字段应为数组但使用了字符串时,增强了错误消息。 #10944

修复

  • 取消了除 Linux 以外平台上对文件锁定支持的限制。 #10975
  • 通过将 os_info 版本升级到 3.5.0,修复了不正确的操作系统检测。 #10943
  • 扫描包目录时现在会忽略来自损坏但被排除的符号链接文件的错误。 #11008
  • 修复了构建脚本等待 stdin 输入时发生的死锁。 #11257

Nightly

  • 稀疏注册表的进度指示器变得更直观。 #11068

Cargo 1.64 (2022-09-22)

a5e08c47…rust-1.64.0

新增

  • 🎉 包现在可以从工作空间继承设置,以便将设置集中管理。有关如何定义这些常用设置的更多详细信息,请参见 workspace.packageworkspace.dependencies#10859
  • cargo rustc 添加了 --crate-type 标志,用于覆盖 crate 类型。 #10838
  • Cargo 命令现在可以接受多个 --target 标志,以便一次构建多个目标,并且 build.target 配置选项现在可以接受一个包含多个目标的数组。 #10766
  • --jobs 参数现在可以接受负数,用于从最大 CPU 数倒数。 #10844

变更

  • Bash 补全 cargo install --path 现在支持路径补全。 #10798
  • 当在 rev 字段中使用哈希时,显著提高了从 GitHub 获取 git 依赖项的性能。 #10079
  • 发布的包现在将包含来自工作空间的解析器设置,以确保它们在独立使用时使用相同的解析器。 #10911 #10961 #10970
  • cargo add 现在将更新 Cargo.lock#10902
  • cargo vendor 的配置输出中的路径现在将反斜杠转换为正斜杠,以便设置能够在不同平台工作。 #10668
  • workspace.default-members 设置现在允许在非虚拟工作空间中将值设置为 ".",以指代根包。 #10784

修复

  • 🚨 CVE-2022-36113: 提取恶意包可能损坏任意文件。 #11089 #11088
  • 🚨 CVE-2022-36114: 提取恶意包可能填满文件系统。 #11089 #11088
  • cargo --version --verbose 中的 os 输出现在支持更多平台。 #10802
  • 缓存的 git 检出如果损坏现在将重新构建。这在使用 net.git-fetch-with-cli 并中断克隆过程时可能发生。 #10829
  • 修复了 cargo add --offline 中的 panic。 #10817

仅 Nightly 版本

  • 修复了 config.toml 中不稳定 check-cfg 的反序列化问题。 #10799

Cargo 1.63 (2022-08-11)

3f052d8e…rust-1.63.0

新增

  • 🎉 添加了 --config CLI 选项,可以直接在命令行传递配置选项。 #10755
  • 如果清单设置了 rust-version 字段,现在在编译 crate 时会设置 CARGO_PKG_RUST_VERSION 环境变量。 #10713

变更

  • 当 git 依赖项中遇到多个同名包时,会发出警告。这将忽略 publish=false 的包。 #10701 #10767
  • 变更跟踪现在使用 .json 目标规范文件的内容,而不是其路径。这有助于避免路径更改时重新构建。 #10746
  • 现在遵守在 .gitmodules 中配置了 update=none 策略的 git 子模块的 git 依赖项,并且不会获取子模块。 #10717
  • 为了确定性行为,crate 文件现在使用更近的日期(2006 年 7 月 23 日而非 1973 年 11 月 29 日)。 #10720
  • cargo new 的初始模板现在包含一个略微更真实的测试结构,在测试模块中包含 use super::*;#10706
  • 更新了内部 HTTP 库 libcurl,包含各种小修复和更新。 #10696

修复

  • 修复了 cargo addcargo 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
  • 稀疏 HTTP 注册表 URL 现在必须以 / 结尾。 #10698
  • 修复了 cargo add 和工作空间继承中 default-features 键的问题。 #10685

Cargo 1.62 (2022-06-30)

1ef1e0a1…rust-1.62.0

新增

  • 🎉 添加了 cargo add 命令,用于从命令行向 Cargo.toml 添加依赖。 文档 #10472 #10577 #10578
  • 包 ID 规范现在除了之前的 name:version 外,还支持 name@version 语法,以便与 cargo add 和其他工具的行为保持一致。cargo installcargo yank 现在也支持这种语法,这样版本就不必作为单独的标志传递。 #10582 #10650 #10597
  • 添加了 CLI 选项 -F 作为 --features 的别名。 #10576
  • Cargo 主目录(通常是 ~/.cargo)中的 gitregistry 目录现在被标记为缓存目录,以便它们不包含在备份或内容索引中(在 Windows 上)。 #10553
  • cargo yank 添加了 --version 标志,以替换 --vers 标志,以便与 cargo install 保持一致。 #10575
  • 添加了自动 @ argfile 支持,如果传递给 rustc 的命令行超过操作系统限制,则会使用“响应文件”。 #10546
  • cargo clean 现在有进度条(如果耗时超过半秒)。 #10236

变更

  • 如果找不到要安装的二进制文件(例如缺少所需的特性),cargo install 不再生成错误。 #10508
  • 如果指定的目标与主机目标相同,cargo test 现在会将 --target 传递给 rustdoc#10594
  • cargo doc 在文档化二进制文件时会自动传递 -Arustdoc::private-intra-doc-links(这会自动包含 --document-private-items)。private-intra-doc-links lint 仅在不文档化私有项时才相关,这不适用于二进制文件。 #10142
  • cargo --version 输出中短 git 哈希的长度现在固定为 9 个字符。之前不同平台之间的长度不一致。 #10579
  • 尝试发布带有 Cargo.toml.orig 文件的包现在会生成错误。该文件名会与自动生成的文件冲突。 #10551

修复

  • build.dep-info-basedir 配置设置现在正确支持在路径中使用 .. 来引用父目录。 #10281
  • 修复了使用 cgroups v1 的系统上自动检测默认 CPU 数的回归问题。 #10737 #10739

仅 Nightly 版本

Cargo 1.61 (2022-05-19)

ea2a21c9…rust-1.61.0

新增

变更

  • cargo test --no-run 现在将显示测试可执行文件的路径。 #10346
  • cargo tree --duplicates 不再报告主机和目标之间共享的依赖项为重复项。 #10466
  • 更新到 libgit2 1.4.2 版本,其中包含几项修复。 #10442 #10479
  • cargo vendor 不再允许 --sync 有多个值,必须传递多个 --sync 标志。 #10448
  • 现在对混合使用了下划线和连字符变体(例如同时指定了 proc_macroproc-macro)的清单键发出警告。 #10316
  • Cargo 现在使用标准库的 available_parallelism 而不是 num_cpus crate 来确定默认并行度。 #10427
  • cargo search 搜索词现在会被高亮显示。 #10425

修复

  • 传递给 VCS 工具(如 hg)的路径现在会在 -- 之后添加,以避免与 VCS 标志冲突。 #10483
  • 修复了 http.timeout 配置值无法实际工作的问题。 #10456
  • 修复了在某些情况下 cargo rustc --crate-type 不起作用的问题。 #10388

仅 Nightly 版本

  • 添加了 -Z check-cfg-features 以启用编译时特性检查。 #10408
  • 添加了 -Z bindeps 以支持二进制构建产物依赖项 (RFC-3028)。 #9992
  • -Z multitarget 现在在 build.target 配置值中支持数组。 #10473
  • 添加了 --keep-going 标志,即使某个 crate 编译失败也会继续编译。 #10383
  • 开始在工作空间中继承清单值的工作。 #10497 #10517
  • 添加了对稀疏 HTTP 注册表的支持。 #10470 #10064
  • 修复了 [target.'cfg(<target>)'.dependencies] 使用构建产物目标时的 panic。 #10433
  • 修复了传递给构建脚本的主机标志 (-Z target-applies-to-host)。 #10395
  • 添加了对 rustdoc 的 -Z check-cfg-features 支持。 #10428

Cargo 1.60 (2022-04-07)

358e79fe…rust-1.60.0

新增

  • 🎉 在 [features] 表中添加了 dep: 前缀,用于引用可选依赖。这允许创建与依赖项同名的特性名称,并允许“隐藏”可选依赖项,使其不隐式暴露特性名称。 文档 #10269
  • 🎉 在 [features] 表中添加了 dep-name?/feature-name 语法,仅在可选依赖 dep-name 已被其他特性启用时,才启用特性 feature-name文档 #10269
  • 🎉 添加了 --timings 选项,用于生成关于构建时序、并发和 CPU 使用情况的 HTML 报告。 文档 #10245
  • 向注册表索引添加了 "v""features2" 字段。"v" 字段提供了与未来索引更改兼容的方法。 文档 #10269
  • cargo clippy 添加了 bash 补全。 #10347
  • cargo report 添加了 bash 补全。 #10295
  • 构建脚本添加了对 rustc-link-arg-testsrustc-link-arg-examplesrustc-link-arg-benches 的支持。 文档 #10274

变更

  • Cargo 现在使用 clap 3 库进行命令行参数解析。 #10265
  • build.pipelining 配置选项现在已弃用,pipelining 将始终启用。 #10258
  • cargo new 现在将生成一个 .gitignore 文件,该文件只忽略仓库根目录的 Cargo.lock,而不是任何目录。 #10379
  • 改进了 bash 补全的启动时间。 #10365
  • 现在使用 --all-features 标志时,会遵守 --features 标志,这允许启用来自其他包的特性。 #10337
  • Cargo 现在使用不同的 TOML 解析器。这不应引入任何用户可见的更改。这为支持 cargo add 和其他未来增强功能,以保持格式的程序化修改 TOML 文件铺平了道路。 #10086
  • 将库设置为同时发出 dylibcdylib 现在是一个错误,因为这种组合不受支持。 #10243
  • cargo --list 现在包含 help 命令。 #10300

修复

  • 修复了对 dev-dependency 的示例运行 cargo doc 的问题。 #10341
  • 修复了 cargo install --path 对于相对于当前目录中工作空间之外的目录的路径的问题。 #10335
  • cargo test TEST_FILTER 不再应构建使用 test = false 显式禁用的二进制文件。 #10305
  • 修复了在没有 term.quiet 的情况下使用 term.verbose,反之亦然的回归问题。 #10429 #10436

仅 Nightly 版本

  • 为 profile 定义添加了 rustflags 选项。 #10217
  • --config 更改为仅支持点分键。 #10176
  • 修复了 profile overrides 中未限制 profile rustflags 的问题。 #10411 #10413

Cargo 1.59 (2022-02-24)

7f08ace4…rust-1.59.0

新增

  • 🎉 现在可以在 profile 中指定 strip 选项,以指定从二进制文件中移除符号和调试信息的行为。 文档 #10088 #10376
  • 🎉 添加了未来不兼容报告。这提供了当 rustc 的未来更改可能导致包或其任何依赖项停止构建时的报告。 文档 #10165
  • Windows 上的 SSH 身份验证现在支持 ssh-agent。 文档 #10248
  • 添加了 term.quiet 配置选项,以便从配置文件启用 --quiet 行为。 文档 #10152
  • 添加了 -r CLI 选项作为 --release 的别名。 #10133

变更

  • 扫描包目录现在应该对错误具有弹性,例如文件系统循环或访问问题。 #10188 #10214 #10286
  • cargo help <alias> 现在将显示别名的目标。 #10193
  • 移除了已弃用的 --host CLI 选项。 #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 links 时的一些竞态条件。 #10172
  • 修复了向已关闭的管道显示帮助文本时的 panic。 #10164

仅 Nightly 版本

  • cargo rustc 添加了 --crate-type 标志。 #10093

Cargo 1.58 (2022-01-13)

b2e52d7c…rust-1.58.0

新增

  • cargo metadata 的包数据中添加了 rust_version 字段。 #9967
  • cargo install 添加了 --message-format 选项。 #10107

变更

  • 当别名遮蔽了外部命令时,现在会显示警告。 #10082
  • 更新了 curl 到 7.80.0。 #10040 #10106

修复

  • Doctests 现在包含来自构建脚本的 rustc-link-args。 #9916
  • 修复了 cargo tree 在循环 dev-dependency 时进入无限循环的问题。修复了解析器无法处理包含特性的循环 dev-dependency 的边缘情况。 #10103
  • 修复了当目录路径包含 glob 字符时 cargo clean -p 的问题。 #10072
  • 修复了 cargo 的 debug 构建,当服务器有带非空主体的重定向时,下载 crate 会 panic。 #10048

仅 Nightly 版本

  • 使 future-incompat-report 输出更友好。 #9953
  • 添加了支持从 examples 目录抓取代码示例以包含在文档中。 文档 #9525 #10037 #10017
  • 修复了 cargo report future-incompatibilities 在 stdout 支持颜色时进行检查的问题。 #10024

Cargo 1.57 (2021-12-02)

18751dd3…rust-1.57.0

新增

  • 🎉 添加了自定义命名 profile。这也将 testbench profile 更改为继承自 devrelease 的设置,并且 Cargo 现在在给定命令期间只使用一个 profile,而不是为依赖项和 cargo-target 使用不同的 profile。 文档 #9943
  • git 依赖项的 rev 选项现在支持以 refs/ 开头的 git 引用。一个可以使用此功能的示例是在像 GitHub 这样的服务中依赖于合并前的 pull request。 #9859
  • .cargo_vcs_info.json 文件中添加了 path_in_vcs 字段。 文档 #9866

变更

  • RUSTFLAGS 不再为构建脚本设置。此更改在 1.55 中进行,但发布说明未突出显示此更改。构建脚本应改用 CARGO_ENCODED_RUSTFLAGS。有关更多详细信息,请参阅文档
  • cargo version 命令现在包含一些额外信息。 #9968
  • 更新了 libgit2 到 1.3,这带来了一些修复和 git 处理的更改。 #9963 #9988
  • Shell 补全现在包含简写 b/r/c/d 子命令。 #9951
  • cargo update --precise 现在允许指定不带 semver metadata(版本号中 + 后面的部分)的版本。 #9945
  • zsh 补全现在补全 --example 名称。 #9939
  • 进度条现在区分构建 unittests 时的情况。 #9934
  • 已移除对无效 TOML 语法的一些向后兼容性支持。 #9932
  • 恢复了 1.55 中对不包含任何字段的依赖规范触发错误的更改。 #9911

修复

  • 移除了一个可能泄露 token 的日志消息(来自 CARGO_LOG)。 #9873
  • cargo fix 现在会避免将修复写入全局注册表缓存。 #9938
  • 修复了与简写别名 (b/c/r/d) 一起使用 -Z help CLI 选项时的问题。 #9933

仅 Nightly 版本

Cargo 1.56 (2021-10-21)

cebef295…rust-1.56.0

新增

  • 🎉 Cargo 现在支持 2021 edition。更多信息可在 edition guide 中找到。 #9800
  • 🎉 在 Cargo.toml 中添加了 rust-version 字段以指定最低支持的 Rust 版本,并添加了 --ignore-rust-version 命令行选项来覆盖它。 #9732
  • 在配置文件中添加了 [env] 表,用于指定要设置的环境变量。 文档 #9411
  • 配置文件中现在可以指定 [patch] 表。 文档 #9839
  • cargo doc 现在支持 --example--examples 标志。 #9808
  • 🎉 构建脚本现在可以为二进制文件或所有可链接目标传递额外的链接器参数。 文档 #9557
  • cargo publish 添加了对 -p 标志的支持,以发布工作空间中的特定包。cargo package 现在也支持 -p--workspace#9559
  • 添加了有关第三方注册表的文档。 #9830
  • 在注册表 config.json 的 URL 中添加了 {sha256-checksum} 占位符。 文档 #9801
  • 添加了对不包含库的依赖项的警告。 #9771

变更

  • Doc tests 现在支持 -q 标志以显示简洁的测试输出。 #9730
  • [replace] 表中使用的 features 现在会发出警告,因为它们会被忽略。 #9681
  • 更改为仅在构建 wasm32-unknown-emscripten 可执行文件时文件名中不包含哈希。之前是所有 wasm32 目标。此外,所有 apple 二进制文件现在构建时文件名中都包含哈希。这允许同时缓存多个副本,并且与(除 msvc 外)其他平台上的行为一致。 #9653
  • cargo new 现在生成一个不会与 clippy 产生警告的示例。 #9796
  • cargo fix --edition 现在仅应用 edition 特定的 lint。 #9846
  • 改进解析器消息以包含依赖项要求。 #9827
  • 使用 CARGO_LOG 环境变量,cargo fix 现在提供更多 debug 日志。 #9831
  • 更改 cargo fix --edition 在稳定版运行且处于最新稳定 edition 时,不再生成错误而是发出警告。 #9792
  • cargo install 现在将在开始安装之前确定所有要安装的包,这有助于在未完全安装的情况下报告错误。 #9793
  • cargo fix --edition 的解析器报告现在包含 dev-dependency 的差异。 #9803
  • cargo fix 现在对来自 rustc 的异常错误显示更好的诊断信息。 #9799
  • cargo --list 中的条目现在进行了去重。 #9773
  • Aliases 现在包含在 cargo --list 中。 #9764

修复

  • 修复了 build-std 的 proc-macro 的 panic。 #9834
  • 修复了在运行 cargo fix 时从 proc-macros 递归运行 cargo 的问题。 #9818
  • 对于命令别名循环,返回错误而不是栈溢出。 #9791
  • 更新到 curl 7.79.1,有望修复间歇性 http2 错误。 #9937

仅 Nightly 版本

  • 添加了 [future-incompat-report] 配置部分。 #9774
  • 修复了自定义命名 profile 的 value-after-table 错误。 #9789
  • 添加了 different-binary-name 特性,支持为二进制文件指定非 rust 标识符的名称。 文档 #9627
  • 添加了一个 profile 选项来选择 codegen 后端。 文档 #9118

Cargo 1.55 (2021-09-09)

aa8b0929…rust-1.55.0

新增

  • cargo metadata 中的包定义现在包含清单中的 "default_run" 字段。 #9550
  • ❗ 构建脚本现在被禁止在稳定版上设置 RUSTC_BOOTSTRAP#9181 #9385
  • 添加了 cargo d 作为 cargo doc 的别名。 #9680
  • cargo tree --format 选项添加了 {lib},用于显示包的库名称。 #9663
  • Workspace API 添加了 members_mut 方法。 #9547

变更

  • 如果构建命令在使用 --all-targets--bins--tests--examples--benches 标志时未匹配任何目标,现在会显示警告,告知您没有匹配的目标。 #9549
  • cargo init 检测现有源文件是否代表二进制或库的方式已更改,以遵守命令行标志,而不是尝试猜测类型。 #9522
  • 注册表名称现在尽可能显示,而不是注册表 URL。 #9632
  • 不再显示重复的编译器诊断信息。这在使用 cargo test 时经常发生,它会并行构建同一代码的多个副本。这还更新了警告摘要,提供更多上下文。 #9675
  • 警告或错误的输出现在得到了改进,更简洁、更清晰,并显示更多上下文。 #9655
  • 网络发送错误现在被视为“假性”错误,这意味着它们将被重试。 #9695
  • 非 git 依赖项上的 Git 键(branchtagrev)现在是一个错误。此外,同时指定 gitpath 现在也是一个错误。 #9689
  • 指定不带任何键的依赖项现在是一个错误。 #9686
  • 解析器现在尽可能优先使用依赖项的 [patch] 表条目。 #9639
  • 依赖项中的包名称拼写错误现在与原始名称对齐显示,以便更容易看到差异。 #9665
  • Windows 平台现在可以对大小写错误的环境变量发出警告。 #9654
  • [patch] 表中使用的 features 现在会发出警告,因为它们会被忽略。 #9666
  • target 目录现在在 Windows 上被排除在内容索引之外。 #9635
  • 当找不到 Cargo.toml 时,错误消息现在会检测是否误拼为小写 c,并建议正确的形式。 #9607
  • 使用新解析器构建 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 的多跨度建议。 #9567
  • cargo fix 现在串行修复每个目标,而不是并行修复,以避免同时修复同一文件的问题。 #9677
  • 对目标 linker 配置值的更改现在会触发重新构建。 #9647
  • 在使用 --allow-dirty 标志运行 cargo publishcargo package 时,Git 未暂存的删除文件现在会被忽略。 #9645

仅 Nightly 版本

  • 启用了对 cargo fix --edition 2021 的支持。 #9588
  • 对命名 profile 进行了一些更改。 #9685
  • 扩展了在 2021 edition 上运行 cargo fix --edition 时应做什么的说明。 #9694
  • 更新了使用 nightly feature 的错误消息,以更好地解释情况。 #9657
  • 调整了 2021 edition 解析器差异报告。 #9649
  • 修复了使用 cargo doc --opendoc.extern-map 时的错误。 #9531
  • 统一了 weak 和 namespaced features。 #9574
  • future-incompatible 报告的各种更新。 #9606
  • [env] 环境变量不允许设置由 Cargo 设置的变量。 #9579

Cargo 1.54 (2021-07-29)

4369396c…rust-1.54.0

新增

  • 从 git 仓库(例如 crates.io 索引)抓取时,现在会显示网络传输速率。 #9395
  • cargo tree 添加了 --prune 选项,以限制显示内容。 #9520
  • cargo tree 添加了 --depth 选项,以限制显示内容。 #9499
  • 添加了 cargo tree -e no-proc-macro 以隐藏过程宏依赖项。 #9488
  • 添加了 doc.browser 配置选项,用于设置 cargo doc --open 打开的浏览器。 #9473
  • 为集成测试和 benchmark 设置了 CARGO_TARGET_TMPDIR 环境变量。这为测试和 benchmark 在 target 目录中提供了一个临时或“暂存”目录供使用。 #9375

变更

  • 新的特性解析器现在为 --features CLI 标志提供拼写建议。 #9420
  • Cargo 现在使用新的 SemVer 版本解析器。这应该与之前行为基本相同,除了一些次要例外,即现在拒绝版本要求中的无效语法。 #9508
  • .crate 发布包的 Mtime 处理方式略有改变,以避免 Mtime 值为 0。这导致 lldb 拒绝读取这些文件。 #9517
  • 提高了 cargo package 中 git status 检查的性能。 #9478
  • 使用 fossil 运行 cargo new 现在将忽略设置放置在新仓库中,而不是使用 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” 时非虚拟包允许未知特性的 bug。 #9437
  • 修复了索引缓存处理仅在构建元数据(例如 110.0.0110.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)

90691f2b…rust-1.53.0

新增

变更

  • 🔥 Cargo 现在支持默认 HEAD 分支不是“master”的 git 仓库。这还包括切换到版本 3 的 Cargo.lock 格式,该格式可以正确处理默认分支。 #9133 #9397 #9384 #9392
  • 🔥 macOS 目标的 split-debuginfo 默认设置为 unpacked#9298
  • ❗ 新项目的 Cargo.toml 中不再包含 authors 字段。 #9282
  • cargo update 现在可以使用 --offline 标志。 #9279
  • 在切换不同工具链版本时,cargo doc 现在会擦除 doc 目录。存在共享的、未版本化的文件(例如搜索索引),在使用不同版本时可能会损坏。 #8640 #9404
  • 改进了路径依赖项/工作空间成员缺失时的错误消息。 #9368

修复

  • 修复了 cargo doc 在更改某些设置(如特性)时检测文档是否需要重新构建的问题。 #9419
  • cargo doc 现在在运行 rustdoc 之前删除包的输出目录,以清除任何过期文件。 #9419
  • 修复了 -C metadata 值始终包含所有构建的所有信息的问题。之前,在某些情况下,哈希仅包含包名称和版本。这修复了一些问题,例如 macOS 上带有 split-debuginfo 的增量构建在某些情况下损坏增量缓存。 #9418
  • 修复了如果 manPATH 中,man 页面在 Windows 上不起作用的问题。 #9378
  • rustc 缓存现在 aware of RUSTC_WRAPPER and RUSTC_WORKSPACE_WRAPPER#9348
  • 如果代码使用了 env!("CARGO"),则在重新构建指纹中跟踪 CARGO 环境变量。 #9363

仅 Nightly 版本

  • 修复了 config includes 不起作用的问题。 #9299
  • --future-incompat-report 没有报告内容时,发出 note。 #9263
  • Nightly feature 标志(如 -Zcargo-features)的错误消息现在提供更多信息。 #9290
  • 添加了在 Cargo.toml 中为单个包设置目标的能力。 文档 #9030
  • 修复了 build-std 在每次构建时都更新索引的问题。 #9393
  • -Z help 现在显示所有 -Z 选项。 #9369
  • 添加了 -Zallow-features 以指定允许使用哪些 nightly features。 #9283
  • 添加了 cargo config 子命令。 #9302

Cargo 1.52 (2021-05-06)

34170fcd…rust-1.52.0

新增

  • 向包的 JSON 消息添加了 "manifest_path" 字段。 #9022 #9247

变更

  • 构建脚本现在被禁止在稳定版上设置 RUSTC_BOOTSTRAP#9181 #9385
  • crates.io 现在支持 SPDX 3.11 许可证。 #9209
  • 如果 CARGO_TARGET_DIR 是一个空字符串,现在会报告错误。 #8939
  • Doc tests 现在将 --message-format 标志传递给测试,以便 doc tests 现在可以使用“short”格式。 #9128
  • cargo test 现在会打印更清晰的指示器,指示当前正在运行哪个目标。 #9195
  • 如果 CARGO_TARGET_<TRIPLE> 环境变量使用小写字母,现在会发出警告。 #9169

修复

  • 修复了 Cargo.toml 中包含 metadata 和 resolver 字段的包的发布问题。 #9300 #9304
  • 修复了 determine prefer-dynamic for a dylib 的逻辑,该逻辑在工作空间和单个包中有所不同。 #9252
  • 修复了当独占目标特定依赖项跨越依赖项类型(如 regular 和 build-dependencies)重叠时,错误地将依赖项包含在两者中的问题。 #9255
  • 修复了将某些风格的包 ID 传递给 -p 标志时发生的 panic。 #9188
  • 当 Cargo 的输出没有到 TTY,并且强制启用进度条和颜色时,输出现在会正确清除进度行。 #9231
  • 当 JSON 可能包含非 utf8 路径时,返回错误而不是 panic。 #9226
  • 修复了在损坏的 stderr 上可能发生的挂起。 #9201
  • 修复了设置 lto=off 时,thin-local LTO 未正确禁用。 #9182

仅 Nightly 版本

  • strip profile 选项现在支持 truefalse 值。 #9153
  • 如果新解析器更改了特性,cargo fix --edition 现在会在切换到 2021 edition 时显示报告。 #9268
  • .cargo/config 文件中添加了 [patch] 表支持。 #9204
  • 添加了 cargo describe-future-incompatibilities,用于生成包含未来不兼容警告的依赖项报告。 #8825
  • 添加了对测试 2021 edition 的更简单支持。 #9184
  • 在 2021 edition 中将默认解析器切换到“2”。 #9184
  • cargo fix --edition 现在支持 2021 edition。 #9184
  • cargo rustc 添加了 --print 标志,用于传递给 rustc 以显示来自 rustc 的信息。 #9002
  • 添加了 -Zdoctest-in-workspace,用于更改 doctest 运行的目录与它们 编译的目录。 #9105
  • .cargo/config.toml 中添加了对 [env] 部分的支持,用于在运行 cargo 时设置环境变量。 #9175
  • 向索引添加了 schema 字段和 features2 字段。 #9161
  • 对 JSON spec targets 的更改现在会触发重新构建。 #9223

Cargo 1.51 (2021-03-25)

75d5d8cf…rust-1.51.0

新增

  • 🔥 添加了 split-debuginfo profile 选项。 文档 #9112
  • cargo metadata 添加了 path 字段,用于包依赖项列表,以显示“path”依赖项的路径。 #8994
  • 🔥 添加了新的特性解析器和新的 CLI 特性标志行为。有关 resolver = "2" 选项的信息,请参见新的 featuresresolver 文档。有关新的 CLI 行为,请参见 CLIresolver 2 CLI 选项。最后,有关详细更改,请参阅 RFC 2957#8997

变更

  • 如果未找到 Cargo.lockcargo install --locked 现在会发出警告。 #9108
  • 在命令行传递未知或模糊的包 ID 时,现在会显示正确包 ID 的建议。 #9095
  • 稍微优化 cargo vendor#8937 #9131 #9132

修复

  • 修复了在同一构建会话期间多次运行构建脚本时,构建脚本发出的环境变量和 cfg 设置对 cargo testcargo run 生效的问题。 #9122
  • 修复了使用新特性解析器时,cargo doc 引发的 panic。这也引入了一些启发式方法,尝试避免 rustdoc 路径冲突,对于具有多个变体(如多个版本,或同一包用于主机和目标平台)的包,只生成其中一个变体的文档。 #9077
  • 修复了 Cargo 循环依赖图检测中的一个导致栈溢出的 bug。 #9075
  • 修复了在某些情况下,测试包的构建脚本 links 环境变量 (DEP_*) 不显示的问题。 #9065
  • 修复了使用 resolver="2" 构建包含 proc-macro 的整个工作空间并在所有目标上选择特性时,在特定场景下特性选择不确定的问题。 #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 特性,该特性已在一年半前无需显式标志即可稳定使用。 #9092
  • 为 nightly 特性(如通过 -Z 标志传递的,或在 Cargo.toml 中通过 cargo-features 指定的)添加了更好的诊断信息、帮助消息和文档。 #9092
  • 添加了对 Rust 2021 版的支持。 #8922
  • 添加了对项目元数据中 rust-version 字段的支持。 #8037
  • 为索引添加了一个 schema 字段。 #9161 #9196

Cargo 1.50 (2021-02-11)

8662ab42…rust-1.50.0

新增

  • cargo metadata 添加了 doc 字段,该字段指示目标是否已生成文档。 #8869
  • 添加了 RUSTC_WORKSPACE_WRAPPER,这是一个可选的 RUSTC wrapper,仅对本地工作空间包运行,并独立于非 wrapped 构建缓存其工件。 #8976
  • cargo update 添加了 --workspace 标志,仅更新工作空间成员,而不更新其依赖项。这在更新 Cargo.toml 中的版本并希望更新 Cargo.lock 而不运行任何其他命令时特别有用。 #8725

变更

  • 上传到 registry 的 .crate 文件现在使用可重现的设置构建,以便在不同机器上创建的相同 .crate 文件应该完全一致。 #8864
  • 指定了多个 branchtagrev 的 Git 依赖项现在会被拒绝。 #8984
  • 构建脚本的 rerun-if-changed 指令现在可以指向一个目录,在这种情况下,Cargo 将检查该目录中的任何文件是否发生更改。 #8973
  • 如果 Cargo 无法确定用户名或电子邮件地址,cargo new 将不再失败,而是创建一个空的 authors 列表。 #8912
  • 进度条的宽度已减小,为显示当前正在构建的 crates 腾出更多空间。 #8892
  • cargo new 现在将支持 .gitconfig 中的 includeIf 指令,以便在确定用户名和电子邮件地址时匹配正确的目录。 #8886

修复

  • 修复了 cargo metadatacargo tree 仅下载请求目标的包。 #8987
  • 更新了 libgit2,带来了许多修复,特别是修复了在 32 位系统上偶尔出现的 zlib 错误。 #8998
  • 修复了使用 links 字段的循环开发依赖项导致的栈溢出。 #8969
  • 修复了 cargo publish 在某些文件系统上失败的问题,特别是在 WSL2 上的 9p 文件系统。 #8950

仅 Nightly 版本

  • 允许 resolver="1" 指定原始的特性解析行为。 #8857
  • 添加了 -Z extra-link-arg,它添加了 cargo:rustc-link-arg-binscargo:rustc-link-arg 构建脚本选项。 文档 #8441
  • 实现了外部凭证进程支持,并添加了 cargo logout。(RFC 2730)(文档#8934
  • 修复了使用 -Zbuild-std 且没有根节点时的 panic。 #8942
  • 将 docs.rs 设置为 crates.io 的默认 extern-map。 #8877

Cargo 1.49 (2020-12-31)

75615f8e…rust-1.49.0

新增

  • cargo metadata 添加了 homepagedocumentation 字段。 #8744
  • 添加了 CARGO_PRIMARY_PACKAGE 环境变量,当运行 rustc 时,如果该包是命令行上选定的“根”包之一,则会设置此变量。 #8758
  • 为命令行上的包和目标选择标志(例如 -p 'serde*'--test '*')添加了对 Unix 风格 glob 模式的支持。 #8752

变更

  • 计算出的 LTO 标志现在包含在文件名元数据哈希中,以便 LTO 设置的更改将独立缓存构建工件,而不是覆盖之前的工件。这在某些情况下(例如在某些情况下在 cargo buildcargo test 之间切换)可以防止重复构建。 #8755
  • cargo tree 现在在 proc-macro 包旁边显示 (proc-macro)#8765
  • 添加了一个警告,特性名称允许的字符已限制为字母、数字、_-+,以适应未来的语法更改。这仍然是 crates.io 允许的语法(仅需 ASCII)的超集。这在未来计划更改为错误。 #8814
  • 不带值的 -p 现在将打印工作空间包名称列表。 #8808
  • 将点添加到允许的特性名称字符中。 #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
  • 使用语法 dep:serde 的命名空间特性新实现。 文档 #8799
  • 添加了对“弱”依赖项特性的支持,使用语法 dep_name?/feat_name,这将在启用依赖项的同时启用该依赖项的特性,而不会仅仅因为启用了特性就启用依赖项。 #8818
  • 修复了新的特性解析器下载了非严格必需的额外依赖项的问题。 #8823

Cargo 1.48 (2020-11-19)

51b66125…rust-1.48.0

新增

  • 添加了 term.progress 配置选项,用于控制何时以及如何显示进度条。 文档 #8165
  • cargo locate-project 添加了 --message-format plain 选项,以不带 JSON 格式显示项目位置,使其更易于在脚本中使用。 #8707
  • cargo locate-project 添加了 --workspace 选项,以显示工作空间 manifest 的路径。 #8712
  • 添加了 Cargo 自身的贡献者指南。该指南发布在 https://rust-lang.github.io/cargo/contrib/#8715
  • Zsh 的 --target 补全现在将与内置的 rustc 目标一起补全。 #8740

变更

修复

  • 修复了 cargo new 创建 fossil 仓库时无法正确忽略 target 目录的问题。 #8671
  • 安装远程包时,不再显示当前目录中关于工作空间的警告。 #8681
  • 在 Git 仓库中遇到“对象未找到”错误时,自动重新初始化索引。 #8735
  • 更新了 libgit2,带来了 Git 仓库处理的若干修复。 #8778 #8780

仅 Nightly 版本

  • 修复了 cargo install 会忽略本地配置文件中的 [unstable] 表格的问题。 #8656
  • 修复了新特性解析器中不确定行为的问题。 #8701
  • 修复了在特定组合情况下,使用新特性解析器对 proc-macro 运行 cargo test 的问题。 #8742

Cargo 1.47 (2020-10-08)

4f74d9b2…rust-1.47.0

新增

  • cargo doc 现在将在左侧边栏中包含包的版本。 #8509
  • cargo metadata 目标添加了 test 字段。 #8478
  • Cargo 的 man pages 现在可以通过 cargo help 命令显示(例如 cargo help build)。 #8456 #8577
  • 添加了关于 依赖项解析工作原理SemVer 兼容性 的新文档章节,以及关于如何版本化项目和使用依赖项的建议。 #8609

变更

  • 已对修改 .gitignore 时添加的注释进行调整,以增加一些间距。 #8476
  • cargo metadata 的输出现在应该排序以具有确定性。 #8489
  • 默认情况下,即使在 release 模式下,构建脚本和 proc-macros 现在也以 opt-level=0 和默认的 codegen units 构建。 #8500
  • workspace.default-members 现在受 workspace.exclude 过滤。 #8485
  • workspace.members globs 现在忽略非目录路径。 #8511
  • git zlib 错误现在会触发重试。 #8520
  • “http”类 git 错误现在会触发重试。 #8553
  • Git 依赖项现在会覆盖 core.autocrlf git 配置值,以确保它们在跨平台上的行为一致,特别是在 Windows 上 vendoring Git 依赖项时。 #8523
  • 如果需要更新 Cargo.lock,它将自动转换为新的 V2 格式。此格式删除了 [metadata] 表格,并且应该更容易在源代码控制系统中合并更改。此格式在 1.38 版本中引入,并在 1.41 版本中成为新项目的默认格式。 #8554
  • 添加了对默认分支不是“master”的 Git 仓库的支持准备。实际支持将在未来版本中实现。这引入了一些警告:
    • 如果 Git 依赖项未指定分支,并且仓库的默认分支不是“master”,则发出警告。将来,Cargo 将 fetch 默认分支。在这种情况下,应显式指定分支。
    • 如果一个工作空间对同一个 Git 仓库有多个依赖项,一个没有 branch 而另一个有 branch="master",则发出警告。所有依赖项都应使用其中一种形式。 #8522
  • 如果 required-features 条目列出了不存在的特性,现在会发出警告。 #7950
  • 内置别名现在包含在 cargo --list 中。 #8542
  • 使用已 yank 的特定版本运行 cargo install 现在将显示该版本已被 yank 的错误消息,而不是“找不到”。 #8565
  • 对于 publish 字段设置为单个 registry 且未给定 --registry 标志的包,cargo publish 现在将发布到该 registry,而不是生成错误。 #8571

修复

  • 修复了一个问题:如果项目目录被移动,并且其中一个构建脚本没有使用 rerun-if-changed 指令,则该构建脚本在不应该被重建时被重建。 #8497
  • 控制台颜色现在应该在 Windows 7 和 8 上正常工作。 #8540
  • CARGO_TARGET_{triplet}_RUNNER 环境变量现在将正确覆盖配置文件,而不是尝试合并命令。 #8629
  • 修复了 LTO 与 doctests 的问题。 #8657 #8658

仅 Nightly 版本

  • 添加了对 -Z terminal-width 的支持,它告诉 rustc 终端的宽度,以便更好地格式化诊断信息。 文档 #8427
  • 添加了通过 [unstable] 表格在配置文件中配置 -Z 不稳定标志的功能。 文档 #8393
  • 添加了 -Z build-std-features 标志来设置标准库的特性。 文档 #8490

Cargo 1.46 (2020-08-27)

9fcb8c1d…rust-1.46.0

新增

  • registry 索引的 config.json 文件中的 dl 键现在支持替换标记 {prefix}{lowerprefix},允许像索引本身那样将 crates 分散到不同的目录中。 文档 #8267
  • 添加了在编译期间设置的新环境变量:
    • CARGO_CRATE_NAME:正在构建的 crate 名称。
    • CARGO_BIN_NAME:可执行二进制文件的名称(如果这是二进制 crate)。
    • CARGO_PKG_LICENSE:manifest 中的 license 字段。
    • CARGO_PKG_LICENSE_FILE:manifest 中的 license-file 字段。 #8270 #8325 #8387
  • 如果在 Cargo.toml 中未指定 readme 的值,现在会根据是否存在名为 READMEREADME.mdREADME.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 依赖项 fetch 的数据量。如果 Cargo 知道要 fetch 的分支或标签,现在只会 fetch 该分支或标签,而不是所有分支和标签。 #8363
  • 增强了 Git fetch 错误消息。 #8409
  • .crate 文件现在以 GNU tar 格式生成,而不是 UStar,后者支持更长的文件名。 #8453

修复

  • 修复了一个罕见的情况,即 Cargo.lock 更新首次失败,但后续运行却允许其继续进行。 #8274
  • 移除了 Windows dylibs 必须具有 .dll 扩展名的断言。某些自定义 JSON spec 目标可能会更改扩展名。 #8310
  • 更新了 libgit2,其中包含针对某些远程 Git 服务器(如 googlesource.com)的 zlib 错误修复。 #8320
  • 修复了非 master 分支上 Git 依赖项的 GitHub 快速路径检查(检查是否最新)的问题。 #8363
  • 修复了启用 pkg/feature 语法的特性时遇到的问题:如果 pkg 是一个可选依赖项,同时也是一个开发依赖项,并且在 registry 摘要中开发依赖项出现在可选普通依赖项之前,则可选依赖项不会被激活。 #8395
  • 修复了如果包中有一个名为 build 的测试,clean -p 会删除构建目录的问题。 #8398
  • 修复了 Cargo 多行错误消息的缩进问题。 #8409
  • 修复了一个问题:为 rustdoc 自动包含 --document-private-items 标志会覆盖传递给 cargo rustdoc 命令的任何标志。 #8449
  • Cargo 现在将在指纹目录的哈希中包含版本,以支持对指纹结构的向后不兼容更改。 #8473 #8488

仅 Nightly 版本

  • 添加了 -Zrustdoc-map 特性,为 rustdoc 提供外部映射(如 https://docs.rs/ 链接)。 文档 #8287
  • 修复了在 Cargo.toml 中使用下划线(如 proc_macro = true)声明 proc-macro 时的特性计算问题。 #8319
  • 添加了对使用 -Zdoctest-xcompile 设置 -Clinker 的支持。 #8359
  • 修复了在配置文件中设置 strip profile 字段的问题。 #8454

Cargo 1.45 (2020-07-16)

ebda5065e…rust-1.45.0

新增

变更

  • 更改了官方文档,推荐使用 .cargo/config.toml 文件名(带 .toml 扩展名)。.toml 扩展名支持在 1.39 版本中添加。 #8121

  • registry.index 配置值不再允许使用(已弃用 4 年)。 #7973

  • 如果同时传递 --index--registry,将生成错误(之前 --index 会被静默忽略)。 #7973

  • registry.token 配置值不再与 --index 标志一起使用。这样做是为了避免潜在地将 crates.io token 泄露给其他 registry。 #7973

  • 添加了警告,如果 registry.token 与源替换一起使用。预计未来版本中这将成为错误。 #7973

  • Windows GNU 目标现在会将 DLL crate 类型的 .dll.a 导入库文件复制到输出目录。 #8141

  • 现在无条件地将所有依赖项的 Dylibs 复制到输出目录。一些不明确的场景可能会导致在构建之间引用旧的 dylib,这确保了所有最新的副本都被使用。 #8139

  • package.exclude 现在可以匹配目录名。如果指定了目录,整个目录将被排除,Cargo 将不再尝试进一步检查。以前 Cargo 会尝试检查目录中的每个文件,如果目录包含不可读文件可能会导致问题。 #8095

  • 使用 cargo publishcargo 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 的实现已重写,以便更准确地删除特定包的文件。 #8210

  • Cargo 计算构建输出的方式已重写,以使其更完整和准确。新跟踪的文件将显示在 JSON 消息中,并且在某些情况下可能会被提升到输出目录。由此带来的一些变化包括:

    • Windows MSVC 动态库上的 .exp 导出文件现在被跟踪。
    • Windows 上的 Proc-macros 跟踪导入/导出文件。
    • 所有生成独立调试文件(pdb/dSYM)的目标(如测试等)都被跟踪。
    • 添加了 wasm32-unknown-emscripten 的 .map 文件。
    • macOS dSYM 目录被跟踪所有动态库(dylib/cdylib/proc-macro)和构建脚本。

    由此带来了一系列其他变化:

    • Windows MSVC 上带有连字符的二进制示例现在会在 examples 目录中显示两次(foo_bar.exefoo-bar.exe)。以前 Cargo 只是简单地重命名文件,而不是创建硬链接。
    • 示例库现在遵循与普通库相同的连字符/下划线转换规则(现在它们将使用下划线)。

    #8210

  • Cargo 尝试从 HTTP 调试的 debug log 中清除任何秘密信息。 #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
  • 修复了一个错误:当包位于 Git 仓库内部,且其祖先路径中存在符号链接时,Cargo 在扫描时会失败。 #8186
  • 修复了使用未使用的 [patch] 进行 cargo update 时,不会卡住并拒绝更新的问题。 #8243
  • 修复了 stderr 关闭且编译器生成大量消息时,Cargo 会挂起的问题。 #8247
  • 修复了 macOS 上 backtraces 不显示文件名或行号的问题。由此带来的一个结果是,Apple 目标上的二进制可执行文件在 Cargo 的缓存中,文件名不包含哈希值。这意味着 Cargo 只能跟踪一个副本,因此如果您切换特性或 rustc 版本,Cargo 需要重新构建可执行文件。 #8329 #8335
  • 修复了在 Windows 上使用 lld 和 dylib 时指纹识别的问题。Cargo 错误地认为 dylib 总是不过期。 #8290 #8335

仅 Nightly 版本

  • 修复了使用 JSON spec 目标时,为 --targetrustdoc 传递完整路径的问题。 #8094
  • -Cembed-bitcode=no 重命名为 -Cbitcode-in-rlib=no#8134
  • Cargo.toml 添加了新的 resolver 字段,以选择使用新的特性解析器。 #8129
  • -Zbuild-std 不再将 std 依赖项视为“本地”。这意味着它不会对这些依赖项使用增量编译,会将它们从 dep-info 文件中移除,并将 lints 的上限设置为“allow”。 #8177
  • 添加了 -Zmultitarget,允许使用多个 --target 标志同时为多个目标构建相同的内容。 文档 #8167
  • 为 profile 添加了 strip 选项,以移除符号和调试信息。 文档 #8246
  • 修复了使用 cargo tree --target=all -Zfeatures=all 时的 panic。 #8269

Cargo 1.44 (2020-06-04)

bda50510…rust-1.44.0

新增

  • 🔥 添加了 cargo tree 命令。 文档 #8062
  • 添加了警告,如果包包含 Windows 限制的文件名(如 nulconauxprn 等)。 #7959
  • 添加了 "build-finished" JSON 消息,表示编译已完成,以便工具可以检测何时停止侦听包含 cargo runcargo test 等命令的 JSON 消息。 #8069

变更

  • 有效的包名现在仅限于 Unicode XID 标识符。这与之前基本相同,但包名不能以数字或 - 开头。 #7959
  • cargo newinit 将警告或拒绝额外的包名(保留的 Windows 名称、保留的 Cargo 目录、非 ASCII 名称、冲突的标准库名称如 core 等)。 #7959
  • 测试不再硬链接到输出目录(target/debug/)。这确保工具可以访问调试符号并以与 Cargo 相同的方式执行测试。工具应使用 JSON 消息来发现可执行文件的路径。 #7965
  • 更新 Git 子模块现在会为每个子模块显示“Updating”消息。 #7989
  • 提取 .crate 文件时,现在保留文件修改时间。这扭转了 1.40 版本中不保留 mtime 的更改。 #7935
  • 构建脚本警告在构建脚本失败时现在会单独显示。 #8017
  • 移除了 git-checkout 子命令。 #8040
  • 进度条现在对所有 unix 平台启用。以前仅限于 Linux、macOS 和 FreeBSD。 #8054
  • 由 pre-release 版本的 rustc 生成的工件现在共享相同的文件名。这意味着更改 nightly 版本不会在构建目录中留下陈旧文件。 #8073
  • 使用重命名依赖项时,无效的包名会被拒绝。 #8090
  • 将某些类别的 HTTP2 错误添加为“虚假”错误,会进行重试。 #8102
  • 允许 cargo package --list 成功,即使存在其他验证错误(如 Cargo.lock 生成问题或缺少依赖项)。 #8175 #8215

修复

  • Cargo 不再在内存中缓冲过多的编译器输出。 #7838
  • Git 仓库中的符号链接现在在 Windows 上正常工作。 #7996
  • 修复了一个问题:当 dev profile 未在 Cargo.toml 中定义时,使用 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 版本

  • 修复了使用新的特性解析器和 required-features 时引发的 panic。 #7962
  • 添加了 RUSTC_WORKSPACE_WRAPPER 环境变量,它提供了一种仅为工作空间成员封装 rustc 的方法,并影响文件名哈希,以便由 wrapper 生成的工件被单独缓存。可以在 nightly clippy 中使用 cargo clippy -Zunstable-options 看到这种用法。 #7533
  • 添加了 --unit-graph CLI 选项,以 JSON 格式显示 Cargo 的内部依赖图。 #7977
  • -Zbuild_dep 改名为 -Zhost_dep,并将 proc-macros 添加到特性解耦逻辑中。 #8003 #8028
  • 修复了当 RUSTDOCFLAGS 中找到 --crate-version 标志时,不会自动传递该标志的问题。 #8014
  • 修复了使用 -Zfeatures=dev_depcheck --profile=test 时引发的 panic。 #8027
  • 修复了使用 -Zfeatures=itarget 和某些主机依赖项时引发的 panic。 #8048
  • 添加了对 -Cembed-bitcode=no 的支持,这为非 LTO 构建提供了性能提升并减少了磁盘空间使用。 #8066
  • -Zpackage-features 已扩展,并添加了多项更改,旨在使其更容易在工作空间中的命令行上选择特性。 #8074

Cargo 1.43 (2020-04-23)

9d32b7b0…rust-1.43.0

新增

  • 🔥 Profile 现在可以在配置文件(和环境变量)中指定。 文档 #7823
  • ❗ 在构建集成测试时,添加了 CARGO_BIN_EXE_<name> 环境变量。此变量包含包中任何 [[bin]] 目标的路径。集成测试应使用 env! 宏来确定要执行的二进制文件的路径。 文档 #7697

变更

  • cargo install --git 现在会尊重 Git 仓库中的工作空间。这允许使用工作空间设置,例如 [patch][replace][profile]#7768
  • cargo new 现在将对新文件运行 rustfmt,以应用 rustfmt 设置,例如 tab_spaces,使新文件与用户首选的缩进设置一致。 #7827
  • 使用“非常详细”输出(-vv)打印的环境变量现在排序一致。 #7877
  • 指纹重建检测的调试日志现在包含更多信息。 #7888 #7890 #7952
  • 如果 license-file 不存在,在 publish 期间添加警告。 #7905
  • 即使 license-file 未在 include 列表中明确列出,或者位于包根目录之外的位置,它也会在 publish 期间自动包含。 #7905
  • 运行构建脚本时,CARGO_CFG_DEBUG_ASSERTIONSCARGO_CFG_PROC_MACRO 不再设置。这些在过去曾被无意中设置,但没有任何意义,因为它们始终为 true。此外,cfg(proc-macro)target 表达式中不再受支持。 #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 当前会遍历整个仓库以查找请求的包。某些无效的 manifests 已经被跳过,现在它应该跳过所有这些无效文件。 #7947

仅 Nightly 版本

  • 添加了 build.out-dir 配置变量来设置输出目录。 #7810
  • 添加了 -Zjobserver-per-rustc 特性,以支持改进并行 rustc 的性能。 #7731
  • 修复了 build-stdcc 等 crate 之间的文件名冲突问题。 #7860
  • -Ztimings 现在即使发生错误也会保存其报告。 #7872
  • 更新了 --config 命令行标志,以支持接受配置文件路径进行加载。 #7901
  • 添加了新的特性解析器。 #7820
  • Rustdoc 文档现在会自动在侧边栏中包含包的版本(需要 -Z crate-versions 标志)。 #7903

Cargo 1.42 (2020-03-12)

0bf7aafe…rust-1.42.0

新增

  • 添加了关于 Git 身份验证的文档。 #7658
  • crates.io 现在支持 Bitbucket Pipeline badge。 #7663
  • cargo vendor 现在接受 --versioned-dirs 选项,强制它始终在每个包的目录名中包含版本号。 #7631
  • proc_macro crate 现在自动添加到 proc-macro 包的 extern prelude 中。这意味着对于 proc-macros 来说,extern crate proc_macro; 不再是必需的。 #7700

变更

  • 如果 debug_assertionstestproc_macrofeature=cfg() 表达式中使用,则会发出警告。 #7660
  • 大幅更新了 Cargo 文档,添加了关于 Cargo 目标、工作空间和特性的新章节。 #7733
  • Windows:现在所有 Windows MSVC 目标都会将 .lib DLL 导入库文件复制到 dll 旁边。以前仅支持 pc-windows-msvc。这增加了对 uwp-windows-msvc 目标的 DLL 支持。 #7758
  • [target] 配置中的 ar 字段不再读取。它已经被忽略了 4 年多。 #7763
  • Bash 补全文件简化并更新以适应最新更改。 #7789
  • 凭证仅在需要时加载,而不是每个 Cargo 命令都加载。 #7774

修复

  • 移除了 --offline 空索引检查,这在某些情况下是误报。 #7655
  • 可以通过将其添加到 include 列表中,将以 . 开头的文件和目录包含在包中。 #7680
  • 修复了当凭证文件中存在以前的条目时,cargo login 会删除备用 registry token 的问题。 #7708
  • 修复了与备用 registry 一起使用时,cargo vendor 会 panic 的问题。 #7718
  • 修复了指纹调试日志消息中不正确的解释。 #7749
  • 多次定义的 [source] 现在将导致错误。以前是随机选择一个 source,这可能导致不确定行为。 #7751
  • cargo metadata 中的 dep_kinds 现在已去重。 #7756
  • 修复了打包时,Cargo.lock 列在 Git 仓库内的子目录中的 .gitignore 文件中的问题。以前它假设 Cargo.lock 位于仓库的根目录。 #7779
  • 部分文件传输错误现在将触发自动重试。 #7788
  • Linux: 修复了 CPU iowait stat 下降时引发的 panic。 #7803
  • 修复了通过 RUSTFLAGS 传递 --sysroot 时,使用错误的 sysroot 检测主机编译器设置的问题。 #7798

仅 Nightly 版本

  • build-std 现在使用 --extern 而不是 --sysroot 来查找 sysroot 包。 #7699
  • 添加了 --config 命令行选项来设置配置项。 #7649
  • 添加了 include 配置设置,允许包含另一个配置文件。 #7649
  • 配置文件中的 profile 现在支持任何命名 profile。以前仅限于 dev/release。 #7750

Cargo 1.41 (2020-01-30)

5da4b4d4…rust-1.41.0

新增

  • 🔥 Cargo 现在使用新的 Cargo.lock 文件格式。这种新格式应该更容易在源代码控制系统中进行合并,并通常使合并更改更安全。目前此新格式启用,但 Cargo 如果看到它就会使用它。将来某个时候,计划将其设为默认格式。 #7579
  • 🔥 cargo install 现在会升级已安装的包,而不是失败。 #7560
  • 🔥 已添加 profile 覆盖功能。这允许覆盖单个依赖项或构建脚本的 profile。更多信息请参阅文档#7591
  • 添加了构建脚本的新文档。 #7565
  • 添加了 Cargo JSON 输出的文档。 #7595
  • 大量扩展了配置和环境变量文档。 #7650
  • 重新添加了对 cargo doc --openBROWSER 环境变量支持。 #7576
  • cargo metadata 中的依赖项添加了 kindplatform#7132
  • OUT_DIR 值现在包含在 build-script-executed JSON 消息中。 #7622

变更

  • cargo doc 现在默认会为二进制文件中的私有项生成文档。 #7593
  • 子命令拼写错误建议现在包含别名。 #7486
  • 调整了在 .gitignore 中添加“already existing…”注释的方式。 #7570
  • 忽略 token 中来自复制/粘贴的 cargo login 文本。 #7588
  • Windows:如果文件系统不支持文件锁定,则忽略锁定文件的错误。 #7602
  • .gitignore 中移除 **/*.rs.bk#7647

修复

  • 修复了 build 配置部分中某些键的未使用警告。 #7575
  • Linux:解析 /proc/stat 时不会 panic。 #7580
  • cargo vendor 中不显示规范路径。 #7629

仅 Nightly 版本

Cargo 1.40 (2019-12-19)

1c6ec66d…5da4b4d4

新增

  • 添加了 http.ssl-version 配置选项来控制 TLS 版本,以及最小/最大版本。 #7308
  • 🔥 编译器警告现在缓存在磁盘上。如果构建生成了警告,重新运行构建现在将重新显示警告。 #7450
  • cargo metadata 添加了 --filter-platform 选项,以将解析器图中显示的节点限制为仅包含给定目标 triplet 的包。 #7376

变更

  • Cargo 的“platform” cfg 解析已被提取到名为 cargo-platform 的单独 crate 中。 #7375
  • 提取到 Cargo 缓存中的依赖项不再保留 mtimes,以减少系统调用开销。 #7465
  • Windows:EXE 文件不再在文件名中包含元数据哈希。这有助于调试器将文件名与 PDB 文件关联。 #7400
  • Wasm32:.wasm 文件不再被视为“可执行文件”,允许 cargo testcargo run 与生成的 .js 文件正常工作。 #7476
  • crates.io 现在支持 SPDX 3.6 许可证。 #7481
  • 改进了循环依赖错误消息。 #7470
  • 裸执行 cargo clean 不再锁定包缓存。 #7502
  • cargo publish 现在允许发布没有版本 key 的 dev-dependencies。git 或 path-only 的 dev-dependency 将在上传前从包 manifest 中移除。 #7333
  • 虚拟工作空间的根目录中的 --features--no-default-features 现在会生成错误,而不是被忽略。 #7507
  • 包存档中生成的文件(如 Cargo.tomlCargo.lock)的时间戳现在设置为当前时间,而不是 epoch 时间。 #7523
  • -Z 标志解析器现在更加严格,拒绝更多无效语法。 #7531

修复

  • 修复了一个问题:如果一个包有 include 字段,并且 .gitignore 中有 Cargo.lock,并且有一个二进制或示例目标,并且 Cargo.lock 在当前项目中存在,则会因为 Cargo.lock 是脏的而无法发布。 #7448
  • 修复了特定组合的 [patch] 条目导致的 panic。 #7452
  • Windows:当 cargo testrustc 以非正常方式(如信号或 seg fault)崩溃时,会提供更好的错误消息。 #7535

仅 Nightly 版本

  • mtime-on-use 特性现在可以通过 unstable.mtime_on_use 配置选项启用。 #7411
  • 添加了对命名 profile 的支持。 #6989
  • 添加了 -Zpanic-abort-tests,允许使用“abort” panic 策略构建和运行测试。 #7460
  • build-std 更改为使用 --sysroot#7421
  • -Ztimings 进行了各种修复和增强。 #7395 #7398 #7397 #7403 #7428 #7429
  • Profile 覆盖功能已将语法重命名为 [profile.dev.package.NAME]#7504
  • 修复了工作空间中未使用 profile 覆盖的警告。 #7536

Cargo 1.39 (2019-11-07)

e853aa97…1c6ec66d

新增

  • 配置文件现在可以使用 .toml 文件名扩展名。 #7295
  • 已添加 --workspace 标志作为 --all 的别名,以帮助避免关于“all”含义的混淆。 #7241
  • publish 字段已添加到 cargo metadata 中。 #7354

变更

  • 如果解析 rustc 输出失败,显示更多信息。 #7236
  • TOML 错误现在显示列号。 #7248
  • cargo vendor 不再删除 vendor 目录中以 . 开头的文件。 #7242
  • cargo fetch 现在将显示 manifest 警告。 #7243
  • cargo publish 现在将检查 git 子模块是否包含任何未提交的更改。 #7245
  • 在构建脚本中,cargo:rustc-flags 现在允许没有空格的 -l-L 标志。 #7257
  • cargo install 替换旧版本的包时,现在会删除新安装版本中不再存在的任何已安装二进制文件。 #7246
  • Git 依赖项现在在发布时也可以指定 version key。git 值将从上传的 crate 中剥离,这与 path 依赖项的行为一致。 #7237
  • 工作空间 default-members 的行为已更改。default-members 现在仅在工作空间根目录中运行 Cargo 时应用。以前无论 Cargo 在哪个目录运行都会始终应用。 #7270
  • libgit2 已更新,包含了上游的所有更改。 #7275
  • 更新 home 依赖项以定位 home 目录。 #7277
  • zsh 补全已更新。 #7296
  • SSL 连接错误现在会重试。 #7318
  • jobserver 已更改为获取 N 个 token(而不是 N-1),然后立即获取额外的 token。此更改是为了适应 Windows 上的 cc crate,允许它释放其隐式 token。 #7344
  • 已更改用于选择下一个构建 crate 的调度算法。现在选择等待其完成的传递性 crate 数量最多的 crate。以前使用最大拓扑深度。 #7390
  • RUSTFLAGS 不再包含在元数据和文件名哈希中,这撤销了 1.33 版本中添加此更改的决定。这意味着 RUSTFLAGS 的任何更改都会导致重新编译,并且不会影响符号 mangling。 #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 "a b",或使用逗号分隔,或使用多个 --features 标志。 #7419

仅 Nightly 版本

  • 添加了直接从 Cargo 构建标准库的基本支持。(文档#7216
  • 添加了 -Ztimings 特性,用于生成关于单个编译步骤耗时的 HTML 报告。这也可以在控制台输出完成步骤和 JSON 数据。(文档#7311
  • 添加了交叉编译 doctests 的能力。(文档#6892

Cargo 1.38 (2019-09-26)

4c1fa54d…23ef9a4e

新增

  • 🔥 Cargo 构建流水线已默认启用,以在构建期间利用更多空闲 CPU 并行性。 #7143
  • Cargo 的 --message-format 选项现在可以指定多次,并接受逗号分隔的值列表。除了之前的值,它现在还接受 json-diagnostic-shortjson-diagnostic-rendered-ansi,用于配置来自 rustc 在 json 消息模式下的输出。 #7214
  • crates.io 现在支持 Cirrus CI badge。 #7119
  • 引入了新的 Cargo.lock 文件格式。这种新格式旨在更频繁地避免源代码控制合并冲突,并通常使合并更改更安全。此新格式目前启用,但 Cargo 如果看到它就会使用它。将来某个时候,计划将其设为默认格式。 #7070
  • 为 FreeBSD 添加了进度条支持。 #7222

变更

  • -q 标志不再抑制 Cargo 自身错误的根错误消息。 #7116
  • Cargo Book 现在使用 mdbook 0.3 发布,提供了多项格式修复和改进。 #7140
  • --features 命令行标志现在可以指定多次。来自所有标志的特性列表将合并在一起。 #7084
  • 包 include/exclude glob-vs-gitignore 警告已移除。包现在可以使用 gitignore 风格的匹配,而不会产生任何警告。 #7170
  • 当查询 rustc 获取信息(如 cfg 值)时,如果解析 rustc 输出失败,Cargo 现在会显示命令和输出。 #7185
  • cargo package/cargo publish 现在允许符号链接指向 git 子模块,以包含该子模块。 #6817
  • 改进了当版本要求不匹配任何版本但有 pre-release 版本可用时的错误消息。 #7191

修复

  • 修复了当使用 git-fetch-with-cli 配置选项且设置了 GIT_DIR 环境变量时,更新 Git 仓库时使用错误目录的问题。这可能发生在从 Git 回调运行 Cargo 时。 #7082
  • 修复了具有独立调试输出的目标的 dep-info 文件被覆盖的问题。例如,带有 .dSYM 目录的 -apple- 目标上的二进制文件会覆盖 .d 文件。 #7057
  • 修复了 [patch] 表未保留“每个 source 一个 major 版本”规则的问题。 #7118
  • 忽略 cargo rustc 命令中 --remap-path-prefix 标志的元数据哈希。这导致 remap 设置无意中影响符号名称。 #7134
  • 修复了 [patch] 依赖项中的循环检测问题。 #7174
  • 修复了在 Windows 上当 core.symlinks git 配置为 true 时,cargo new 会留下符号链接的问题。同时添加了上游 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 传递 args 的问题。 #7162

Cargo 1.37 (2019-08-15)

c4fcfb72…9edd0891

新增

  • 添加了 doctest 字段到 cargo metadata 中,用于确定目标的文档是否已测试。 #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 key 设置为要默认使用的二进制文件的名称。 #7056

变更

  • cargo package 现在验证构建脚本不会创建空目录。 #6973
  • 如果 cargo doc 生成重复的输出,现在会发出警告,这会导致文件被随机覆盖。这可能是由于多种原因(重命名的依赖项、同一包的多个版本、具有重命名库的包等)引起的。这是一个已知 bug,需要更多工作来正确处理。 #6998
  • 使用 --features foo/bar 启用依赖项特性将不再使用 foo 特性编译当前 crate,即使 foo 不是可选依赖项。 #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 时,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)

6f3e9c36…c4fcfb72

新增

  • 添加了关于目标自动发现的更详细文档。#6898
  • 🔥 稳定了 --offline 标志,该标志允许在没有网络连接的情况下使用 Cargo。#6934 #6871

变更

  • 可以在清单中添加 publish = ["crates-io"] 以限制只能发布到 crates.io。#6838
  • macOS: 仅在 DYLD_FALLBACK_LIBRARY_PATH 未设置时包含默认路径。此外,从默认集合中移除了 /lib#6856
  • 如果登录 token 不可用,cargo publish 现在会提前退出。#6854
  • HTTP/2 流错误现在被视为“虚假”错误,并将触发重试。#6861
  • 在一个依赖项上设置一个指向“required”依赖项的 feature 现在是一个错误。以前只是一个警告。#6860
  • registry.index 配置值现在支持相对的 file: URL。#6873
  • macOS: .dSYM 目录现在符号链接到示例二进制文件旁边,且不包含元数据哈希,以便调试器能够找到它。#6891
  • 新项目的默认 Cargo.toml 模板现在包含一个指向文档链接的注释。#6881
  • crate 下载摘要的措辞有所改进。#6916 #6920
  • ✨ 将 RUST_LOG 环境变量更改为 CARGO_LOG,以便使用 log crate 的用户代码不会显示 Cargo 的调试输出。#6918
  • 打包时,Cargo.toml 现在总是包含在内,即使它未列在 package.include 中。#6925
  • Package include/exclude 值现在使用 gitignore 模式而不是 glob 模式。#6924
  • 当 crates.io 超时时提供更好的错误消息。还改进了其他 HTTP 响应代码的错误消息。#6936

性能

  • 在某些情况下,解析器性能得到改进。#6853
  • 通过缓存结果优化了 Cargo 读取 index JSON 文件的方式。#6880 #6912 #6940
  • 各种性能改进。#6867

修复

  • 更仔细地跟踪依赖项的磁盘指纹信息。这在构建中断并重新启动的罕见情况下有所帮助。#6832
  • cargo run 现在可以正确地将非 UTF8 参数传递给子进程。#6849
  • 修复了 bash 补全,使其能在 macOS 的默认版本 bash 3.2 上运行。#6905
  • zsh 补全的各种修复和改进。#6926 #6929
  • 修复了如果 Cargo.lock 文件丢失,cargo update 会忽略 -p 参数的问题。#6904

仅 Nightly 版本

  • 添加了 -Z install-upgrade feature,用于跟踪已安装 crates 的详细信息,并在它们过时时进行更新。#6798
  • 添加了 public-dependency feature,该 feature 允许跟踪公共依赖项和私有依赖项。#6772
  • 通过 build.pipelining 配置选项(CARGO_BUILD_PIPELINING 环境变量)添加了构建流水线。#6883
  • publish-lockfile feature 有了一些重要变化。默认值现在为 true,二进制 crate 的 Cargo.lock 文件总是会被发布。Cargo.lock 文件现在在发布期间重新生成。cargo install 现在默认忽略 Cargo.lock 文件,并且需要 --locked 才能使用该锁文件。如果检测到 yanked 依赖项,则会添加警告。#6840

Cargo 1.35 (2019-05-23)

6789d8a0…6f3e9c36

新增

  • 添加了 rustc-cdylib-link-arg 键,用于构建脚本指定 cdylib crate 的链接器参数。#6298

变更

  • 传递测试过滤器时,例如 cargo test foo,不再构建示例(除非它们设置了 test = true)。#6683
  • --quiet 标志从 cargo test 转发到 libtest harness,以便测试真正安静。#6358
  • cargo package 中检查文件是否被修改的验证步骤现在更加严格。它使用内容的哈希而不是检查文件系统 mtime。它还会检查包中的“所有”文件。#6740
  • Jobserver token 现在在 Cargo 阻塞在文件锁上时释放。#6748
  • 对之前 TOML 解析器中的一个 bug(允许具有相同名称的多个表头)发出警告。#6761
  • CARGO_PKG_* 环境变量从元数据哈希中移除,并添加到指纹中。这意味着当这些值发生变化时,不会留下陈旧的产物。还将“repository”值添加到指纹中。#6785
  • cargo metadata 不再显示 resolve.nodes.deps 中没有库的依赖项的 null 字段。该依赖项不再显示。#6534
  • 如果 cargo new 中的 authors 字段设置为空字符串,则不再包含电子邮件地址。#6802
  • 当为多个包生成文档时,cargo doc --open 现在可以正常工作。#6803
  • cargo install --path P 现在从目录 P 加载 .cargo/config 文件。#6805
  • 在版本要求中使用 semver 元数据(例如 1.0.0+1234)现在会发出警告,表明它将被忽略。#6806
  • cargo install 现在拒绝某些标志组合,这些组合会导致某些标志被忽略。#6801
  • 在某些情况下,解析器性能得到改进。#6776

修复

  • 修复了运行分开的命令(例如先 cargo buildcargo test)时,第二个命令可能使用了构建脚本的陈旧结果的问题。#6720
  • 修复了如果存在与根包目录匹配的 .gitignore 文件时,cargo fix 无法正常工作的问题。#6767
  • 修复了如果在 profile 中设置了 panic=unwind 时意外多次编译同一个库的问题。#6781
  • build.target 配置值中 JSON 文件的路径现在被规范化,以修复构建依赖项的问题。#6778
  • 修复了如果在编译中断(例如被杀死)时重新运行构建脚本的问题。#6782
  • 修复了 cargo new 初始化 Fossil 仓库的问题。#6792
  • 修复了在使用 git-fetch-with-cli feature 时支持更新被 force push 的 git 仓库的问题。当 git-fetch-with-cli 失败时,现在也会显示更多错误信息。#6800
  • 针对 WASM 目标构建的 --example 二进制文件已修复,不再在文件名中包含元数据哈希,并且在 compiler-artifact JSON 消息中正确发出。#6812

仅 Nightly 版本

  • cargo clippy-preview 现在是 Cargo 的内置命令。#6759
  • build-override profile 设置现在包含 proc-macro 及其依赖项。#6811
  • 可选依赖项和目标依赖项现在与 -Z offline 配合得更好。#6814

Cargo 1.34 (2019-04-11)

f099fe94…6789d8a0

新增

  • 🔥 稳定了 备用 registry 的支持。#6654
  • 添加了关于将 builds.sr.ht 持续集成与 Cargo 一起使用的文档。#6565
  • Cargo.lock 现在顶部包含一个注释,表明它是 @generated#6548
  • 现在支持 Azure DevOps 徽章。#6264
  • 如果 --exclude 标志指定了未知包,则会添加警告。#6679

变更

  • cargo test --doc --no-run 不执行任何操作,因此现在显示相应的错误。#6628
  • bash 补全的各种更新:添加缺失的选项和命令,支持 libtest 补全,使用 rustup 进行 --target 补全,回退到文件名补全,修复命令行编辑。#6644
  • 发布带有 [patch] 段落的 crate 不再生成错误。[patch] 段落在发布前从清单中移除。#6535
  • build.incremental = true 配置值现在与 CARGO_INCREMENTAL=1 视为相同,以前它被忽略了。#6688
  • 来自 registry 的错误现在总是显示,无论 HTTP 响应代码如何。#6771

修复

  • 修复了 cargo run --example 的 bash 补全问题。#6578
  • 修复了使用“本地”registry 并同时运行多个构建同一个 crate 的 Cargo 命令时的竞态条件。#6591
  • 修复了进度条的一些闪烁和过度更新问题。#6615
  • 修复了使用返回不正确凭据的 git 凭据助手时发生的挂起问题。#6681
  • 修复了本地 registry 处理 yanked 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)

8610973a…f099fe94

新增

  • compiler-artifact JSON 消息现在包含一个 "executable" 键,其中包含构建的执行文件的路径。#6363
  • man 手册页已重写,现在与 Web 文档一起发布。#6405
  • cargo login 现在保存 token 后会显示确认信息。#6466
  • 如果 [patch] 条目不匹配任何包,现在会发出警告。#6470
  • cargo metadata 现在包含包的 links 键。#6480
  • 使用 -vv 的“非常详细”输出现在显示 Cargo 运行进程时设置的环境变量。#6492
  • 不带参数的 --example, --bin, --bench, 或 --test 现在列出这些选项可用的目标。#6505
  • Windows: 如果进程以扩展状态退出代码失败,现在会显示代码的可读名称。#6532
  • cargo packagecargo publish 命令添加了 --features, --no-default-features, 和 --all-features 标志,以便在验证包时使用给定的 features。#6453

变更

  • 如果 cargo fix 在应用修复后编译失败,rustc 错误现在会显示在控制台上。#6419
  • 隐藏 cargo login--host 标志,它未使用。#6466
  • 构建脚本指纹现在包含 rustc 版本。#6473
  • macOS: 切换到设置 DYLD_FALLBACK_LIBRARY_PATH 而不是 DYLD_LIBRARY_PATH#6355
  • RUSTFLAGS 现在包含在元数据哈希中,这意味着更改标志不会覆盖之前构建的文件。#6503
  • 更新 crate graph 时,不相关的 yanked crate 被错误地移除。如果可能,它们现在会保留在其原始版本。这导致在使用 cargo update -p somecrate 时,不相关的包被降级。#5702
  • TOML 文件现在支持 0.5 TOML 语法

修复

  • cargo fix 现在会忽略修改多个文件的建议。#6402
  • cargo fix 现在每次只修复一个目标,以处理共享相同源文件的目标。#6434
  • 修复了 bash 补全显示 Cargo 命令列表的问题。#6461
  • cargo init 现在会避免在 .gitignore 文件中创建重复条目。#6521
  • 构建现在会尝试检测编译过程中文件是否被修改,以便您可以再次构建并获取新的更改。这是通过跟踪编译“开始”的时间(而不是结束的时间)来实现的。此外,撤销了 #5919,这意味着 Cargo 不再将相同的文件系统 mtime 视为需要重新构建。 #6484

仅 Nightly 版本

  • 允许在 [patch] 表中使用 registry“名称”而不是仅使用 URL。#6456
  • cargo metadata 为依赖项添加了 registry 键。#6500
  • Registry 名称现在受限,与包名称采用相同的风格(字母数字,-_ 字符)。#6469
  • cargo login 现在显示来自 registry 配置的 /me URL。#6466
  • cargo login --registry=NAME 现在支持 token 的交互式输入。#6466
  • Registry 现在可以省略 config.json 中的 api 键,以表明它们不支持 API 访问。#6466
  • 修复了使用 metabuild 时,结合 --message-format=json 导致 panic 的问题。#6432
  • 修复了使用备用 registry 时,检测发布到 crates.io 的问题。#6525

Cargo 1.32 (2019-01-17)

339d9f9c…8610973a

新增

  • Registry 现在可以在成功发布后显示警告。#6303
  • 文档中添加了词汇表#6321
  • cargo check 添加了别名 c#6218

变更

  • 🔥 HTTP/2 多路复用现在默认启用。可以使用 http.multiplexing 配置值禁用它。#6271
  • 使用 ANSI 转义序列清除行而不是空格。#6233
  • 签出 git 依赖项时禁用 git 模板,这可能会导致问题。#6252
  • 使用 net.git-fetch-with-cli 选项时包含 --update-head-ok git 标志。这有助于防止在 fetch 某些仓库时失败。#6250
  • cargo package 的验证步骤中提取 crate 时,不再设置文件系统 mtime,这在某些罕见的文件系统上会导致失败。#6257
  • Cargo.toml 中的 crate-type = ["proc-macro"] 现在与 proc-macro = true 视为相同。#6256
  • 如果在虚拟工作区中设置了 dependencies, features, target, 或 badges,则会引发错误。如果在工作区成员中使用了 replacepatch,则会显示警告。#6276
  • 在某些情况下改进了解析器的性能。#6283 #6366
  • .rmeta 文件不再硬链接到基本目标目录(target/debug)。#6292
  • 如果使用相同输出文件名构建多个目标,则会发出警告。#6308
  • 使用 cargo build(不带 --release)时,benchmark 现在使用“test”profile 构建,而不是“bench”。这使得调试 benchmark 更容易,并避免了令人困惑的行为。#6309
  • 用户别名现在可以覆盖内置别名(b, r, t, 和 c)。#6259
  • 设置 autobins=false 现在会禁用推断目标的自动发现。#6329
  • 如果项目使用了不稳定功能,cargo verify-project 现在会在 stable 版本上失败。#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 package git 发现过于激进的问题。--allow-dirty 现在完全禁用 git 仓库检查。#6280
  • 修复了 [patch] 依赖项的构建变更跟踪问题,该问题导致 cargo build 在不应该重新构建时重新构建。#6493

仅 Nightly 版本

  • 允许在 registry URL 中使用用户名。#6242
  • 为 build-plan JSON 结构添加了 "compile_mode" 键,以便能够区分运行自定义构建脚本和编译构建脚本。#6331
  • --out-dir 不再复制构建脚本。#6300

Cargo 1.31 (2018-12-06)

36d96825…339d9f9c

新增

  • 🔥 稳定了 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_PKG_REPOSITORY 环境变量,其值为 Cargo.toml 中的 repository 值。#6096

变更

  • cargo test --doc 现在会拒绝其他标志,而不是忽略它们。#6037
  • cargo install 忽略 ~/.cargo/config#6026
  • cargo version --verbose 现在与 cargo -vV 相同。#6076
  • Cargo.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 时使用任意 toolchain 名称。#6038
  • 修复了解析器在回溯失败的依赖项时的边缘情况。#5988
  • 修复了 cargo test --all-targets 导致 lib test 运行三次的问题。#6039
  • 修复了向 crates.io 发布重命名依赖项的问题。#5993
  • 修复了在包含多个二进制文件的 git 仓库上使用 cargo install 的问题。#6060
  • 修复了 rustc 发出的深度嵌套 JSON 丢失的问题。#6081
  • Windows: 修复 msys 终端锁定宽度为 60 字符的问题。#6122
  • 修复了带有破折号的重命名依赖项问题。#6140
  • 修复了当 dylib 同时存在于 target/debugtarget/debug/deps 时,链接到错误的 dylib 的问题。#6167
  • 修复了使用 panic=abort 时的一些不必要的重新编译问题。#6170

仅 Nightly 版本

  • cargo install 添加了 --registry 标志。#6128
  • 添加了 registry.default 配置值,用于指定如果未传递 --registry 标志时使用的默认 registry。#6135
  • cargo newcargo init 添加了 --registry 标志。#6135

Cargo 1.30 (2018-10-25)

524a578d…36d96825

新增

  • 🔥 添加了动画进度条,显示构建过程中的进度。#5995
  • cargo metadata 添加了 resolve.nodes.deps 键,它包含有关已解析依赖项的更多信息,并正确处理了重命名依赖项。#5871
  • 创建包时,当未能发现 git 仓库中文件是否修改时,使用 -v 提供更详细的信息。还修复了 Windows 上发现问题。#5858
  • 在工作区中可以使用 --bin, --test, --example, --bench, 或 --lib 等过滤器,而无需选择特定的包。#5873
  • 在工作区中可以使用 cargo run,而无需选择特定的包。#5877
  • cargo 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 库来 fetch 仓库。#5914
  • 添加了 required-featurescargo metadata#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 配置值的支持,用于指定使用 config 表达式的目标的 run/test/bench runner。#5959

变更

  • Windows: cargo run 在主进程退出时不会杀死子进程。#5887
  • 切换到 opener crate 以使用 cargo doc --open 打开 Web 浏览器。这应该在所有平台更可靠地选择系统首选的浏览器。#5888
  • 相同的文件 mtime 现在会导致目标被重新构建。以前只有当文件严格“新于”上次构建时才会导致重新构建。#5919
  • 运行 cargo install 时忽略 build.target 配置值。#5874
  • cargo fix 忽略 RUSTC_WRAPPER#5983
  • 忽略空的 RUSTC_WRAPPER#5985

修复

  • 修复了创建包含 edition 字段的 Cargo.toml 包时出现的错误。#5908
  • 在工作区中更一致地使用路径依赖项的相对路径。#5935
  • cargo fix 现在总是运行,即使之前已经运行过。#5944
  • Windows: 尝试更可靠地检测终端宽度。基于 msys 的终端被强制宽度为 60 字符。#6010
  • 允许 cargo doc --document-private-items 使用多个 target 标志。6022

仅 Nightly 版本