news 2026/9/15 1:42:55

Rust 1.XX (beta) -> Rust 1.XX

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust 1.XX (beta) -> Rust 1.XX

Rust 1.XX (beta) -> ## Rust 1.XX

【免费下载链接】rust-clippyA bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/项目地址: https://gitcode.com/GitHub_Trending/ru/rust-clippy

- 更新新稳定版本的发布日期行: ```markdown Current beta, release 20YY-MM-DD -> Current stable, released 20YY-MM-DD
  • 更新上一稳定版本的发布日期行:

    Current stable, released 20YY-MM-DD -> Released 20YY-MM-DD

变更日志更新:为每次 Rust 发布撰写 CHANGELOG

何时更新

针对新 Rust 发布的 changelog 更新,理想情况下应在即将到来的稳定版发布前一周完成(发布日期见 Rust Forge)。多数时候只需为 Rust 的小版本更新 changelog,Clippy 改动被包含进 patch 版本的情况非常罕见。不过,错别字及其他小修小补随时欢迎提交。

更新步骤

第 1 步:找到相关的 Clippy commits

每个 Rust 版本都携带自己的 Clippy 版本(作为 subtree 位于 Rust 仓库的tools目录)。根据更新目标选择对应的 commit 来源:

  • 即将到来的稳定版写发布说明:checkout 当前 Rustbeta分支上的 Clippy commit;
  • 即将到来的 beta 版本写发布说明:checkout 当前 Rustmain上的 Clippy commit;
  • 过去的稳定版补写发布说明:checkout 对应稳定版的 release tag。

通常要写的是即将到来的稳定版的 changelog,但需先确认 Rust 仓库中beta分支已经切出。在rust-lang/rustcheckout(大多数时候在upstream/beta分支)中查找 commit hash:

git log --oneline -- src/tools/clippy/ | grep -o "Merge commit '[a-f0-9]*' into .*" | head -1 | sed -e "s/Merge commit '\([a-f0-9]*\)' into .*/\1/g"

第 2 步:抓取这两个 commit 之间的 PR

拿到正确的 commit 区间后运行:

util/fetch_prs_between.sh start_commit end_commit > changes.txt

其中end_commit是上一步得到的 commit hash,start_commit是当前 CHANGELOG.md 中记录的 commit hash。然后用编辑器打开changes.txt

第 3 步:撰写最终 changelog

脚本会导出所有相关 PR 并过滤掉大部分无关 PR,但建议再手动清理一遍,挑选有价值的 PR;不确定的 PR 可以留在文件中供 review 时讨论。之后逐条把 PR 的changelog:内容移入 CHANGELOG.md,措辞可自行润色但要保持连贯。各节顺序大致如下:

### New Lints * Added [`LINT`] to `GROUP` ### Moves and Deprecations * Moved [`LINT`] to `GROUP` (From `GROUP`, now LEVEL-by-default) * Renamed `LINT` to [`LINT`] ### Enhancements ### False Positive Fixes ### ICE Fixes ### Documentation Improvements ### Others

同时务必更新文件顶部的Unreleased/Beta/In Rust Nightly区段中的 commit 区间,并新增Rust <version>区段,注明发布日期与 PR 区间。

第 4 步:纳入 beta-accepted 的 PR

查找带 [beta-accepted] 标签的 PR,确保它们也被写进 changelog。若可行,在 changelog PR 合并后移除这些标签。注意:其中部分 PR 可能被 backport 到上一个beta,这类 PR 必须写进上一个版本的 changelog。

第 5 步:更新#[clippy::version]属性

核对新增 lint 的#[clippy::version]属性是否为正确的版本号。针对 "New Lints" 一节中的每个 lint 运行:

grep -rB1 "pub $LINT_NAME" .

显示的版本应与本次 changelog 对应的发布版本一致;不一致则更新为该 changelog 版本。

Backport:紧急修复回流 beta

某些情况下需要把改动 backport 到 Clippy 的 beta 版本。Backport 在 Clippy 中很罕见,必须经 Clippy 团队批准。典型场景包括:修复了关键的 ICE(编译器内部错误),或某个 lint 损坏到必须在进入 stable 前被禁用。

若你认为某个 PR 需要 backport,可为其打上beta-nominated标签。这必须在发布前一周的周四之前完成。

筛选待 backport 的 PR

先通过beta-nominated标签过滤器找出所有被标记的 PR,然后逐个审视,重点检查三件事:

  1. 这个修复值得 backport 吗?这比较主观。ICE 修复通常值得;把 lint 移到更低的组(从 warn 默认改为 allow)通常也值得;单独的 FP(误报)修复通常不值得(但如果本来就要 backport,FP 修复也可以顺带包含)。改动量大的 PR 需要更谨慎地评估。
  2. 该 PR 修复的问题是否已经在beta中?如果问题还没进入 Rust 仓库的beta分支,且修复已同步到 Rust 仓库,则无需 backport(它会与引入问题的 commit 一起进入 stable)。若修复 PR 尚未同步,则需要在下一个 backport 周期把它"backport"到 Rustmasterbeta
  3. 确保修复已在master上,再移植到beta修复必须先同步到 Rustmaster分支,否则下一个beta会再次缺少该修复。若确需紧急 backport 而修复还未进master,应先做一次小规模的周期外同步(该同步的改动会直接进入beta,未经 nightly 充分测试,因此必须保持精简)。

Backport 操作步骤

所有命令在 Rust 仓库克隆中执行(先按 release.md 的 "Defining Remotes" 一节定义clippy-upstreamremote):

git fetch clippy-upstream master git switch beta git fetch upstream git reset --hard upstream/beta

PR 通过 GitHub merge queue 合并后,会以<PR title> (#<PR number>)的形式关闭。找到该 commit 的<sha1>,在Rust 仓库的克隆中执行:

git cherry-pick -m 1 `<sha1>`

对所有需要 backport 的 PR 重复此操作。随后向 Rust 仓库的beta分支(注意不是master)打开 PR,描述模板如下:

[beta] Clippy backports r? @Mark-Simulacrum Backports: - <Link to the Clippy PR> - ... <Short summary of what is backported and why>

Mark 来自 release 团队,最终需要他合并此 PR 才能切出新的beta版本,因此要 tag 他。最后列出所有 backport 并简要说明内容与理由。PR 被 backport 到 Rustbeta后,为其打上beta-accepted标签,该标签会在撰写 changelog 时被收集。

周边基础设施:本书维护与性能基准

维护 Clippy Book

你现在正在读的这本书(Clippy book)由 Markdown 编写、mdBook 生成。本地安装 mdBook 后可构建、测试并在本地 serve 以预览改动:

cargo install --locked mdbook

在仓库顶层运行mdbook serve book --open启动本地服务器(默认http://localhost:3000),对 book/src 下 Markdown 文件的改动会自动热更新。细节见 book.md。

用 Lintcheck 做性能基准

Clippy 的性能基准直接复用 lintcheck 工具:只需加上--perf标志,Lintcheck 就变成一个简单而强大的基准工具。它依赖系统安装perf工具(底层由 perf 负责 profiling),每次基准会生成一个perf.data文件存放在target/lintcheck/sources/<package>-<version>目录,对应目录中的那个 crate。Lintcheck 使用-g标志,因此可以获取栈回溯,配合 flamegraph 类工具做更丰富的分析。目前只统计指令数这一指标,因为它是可复现性最好的度量,rustc-perf 也将其作为核心指标。

基准某个 PR 时,先切到该 PR 分支跑一次cargo lintcheck --perf,再回到与 master 的最近公共 commit 跑第二次,最后用perf diff对比两次结果:

git fetch upstream pull/<PR_NUMBER>/head:<BRANCH_NAME> git switch BRANCHNAME # 基准 cargo lintcheck --perf # 找到最近公共 commit 并 checkout LAST_COMMIT=$(git log BRANCHNAME..master --oneline | tail -1 | cut -c 1-11) git switch -c temporary $LAST_COMMIT # 现在位于 master 上 # 基准 cargo lintcheck --perf perf diff ./target/lintcheck/sources/CRATE/perf.data ./target/lintcheck/sources/CRATE/perf.data.0

【免费下载链接】rust-clippyA bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/项目地址: https://gitcode.com/GitHub_Trending/ru/rust-clippy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 1:41:20

RAG工程落地全链路实战:从文档切块到K8s生产部署

1. 项目概述&#xff1a;这不是“速成课”&#xff0c;而是一份RAG工程落地的完整施工图你点开这个标题&#xff0c;第一反应可能是——又一个标题党&#xff1f;7天从小白到大神&#xff1f;吊打付费&#xff1f;存下吧很难找全&#xff1f;这些话术确实刺眼&#xff0c;但如果…

作者头像 李华
网站建设 2026/9/15 1:40:11

用Doom实测Astra云电脑:老游戏才是串流延迟的照妖镜

现在测云电脑的人&#xff0c;第一反应都是打开 3A 大作&#xff0c;画面一糊、帧率一掉就断定平台不行。但我一直觉得这个思路反了——真正能看出一个串流平台底子的&#xff0c;恰恰是那些“看起来毫无压力”的老游戏。Doom 这种老祖宗级别的 FPS&#xff0c;对帧率天花板要求…

作者头像 李华
网站建设 2026/9/15 1:39:21

Flutter与OpenHarmony构建高性能播放器进度条实践

1. 为什么选择 Flutter OpenHarmony 构建播放器控件在移动端开发领域&#xff0c;播放器进度条看似简单&#xff0c;实则涉及跨平台渲染性能、手势交互精度、状态同步等复杂问题。传统方案通常面临三个困境&#xff1a;一是原生开发需要针对Android/iOS分别实现&#xff0c;维…

作者头像 李华
网站建设 2026/9/15 1:37:26

实体关系抽取实战:从依赖树到图卷积神经网络的完整实现

简介&#xff1a;基于图卷积神经网络的实体关系抽取项目&#xff0c;面向深度学习、自然语言处理方向的在校学生、研究人员及企业开发者&#xff0c;完整覆盖实体关系抽取中数据预处理、GCN模型构建、训练测试、结果评估与可视化展示的流程。整个资源包共41个文件&#xff0c;以…

作者头像 李华
网站建设 2026/9/15 1:36:38

Telegraf Basicstats 聚合器插件:指标基础统计与聚合实践指南

Telegraf Basicstats 聚合器插件&#xff1a;指标基础统计与聚合实践指南 【免费下载链接】telegraf Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 项目地址: https://gitcode.com/GitHub_Trending/te/telegraf …

作者头像 李华