news 2026/9/13 1:27:19

【Rust日报】《LLVM 糟糕的一面》|《cargo-semver-checks 呈现指数级增长》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust日报】《LLVM 糟糕的一面》|《cargo-semver-checks 呈现指数级增长》

《LLVM 糟糕的一面》

作者:Nikita Popov(LLVM 核心维护者、Rust 编译器团队负责人)

文章深度分析了 LLVM 当前存在的弊端。他强调,这份清单并非劝退指南,而是为 LLVM 指明未来的改进方向

宏观层面的问题:

  • 审查能力不足(Review Capacity):LLVM 不缺代码贡献者,但极度缺乏合格的代码审查者。这导致大量 PR 长期搁置,或者被非专业人士“盖章”通过,影响了代码质量和贡献者体验。

  • 频繁的改动(Churn):LLVM 的 C++ API 和 IR(中间表示)并不稳定。这种快速迭代虽然能修正过去的错误,但给下游用户(如 Rust、Clang)带来了巨大的维护成本。

技术设计上的缺陷:

  • Context 与 Module 的割裂

    • LLVM 将全局数据存储在Context中,将编译单元存储在Module中。

    • 痛点:类型(Types)和常量(Constants)存在于Context中,但关于类型布局的关键信息(如“指针有多宽”)却存储在ModuleDataLayout中。这导致在处理类型和常量时,经常无法直接获取其内存布局信息。

  • ABI 与 目标特性(Target Features)的耦合

    • 在某些架构(如 AArch64)上,开启特定的目标特性(如浮点寄存器)会改变函数的调用约定(ABI)。

    • 风险:如果一个开启了某特性的函数调用了另一个关闭该特性的函数,可能会导致 ABI 不匹配,进而引发崩溃。作者认为 ABI 应该是模块级的,而特性应该是函数级的,两者目前耦合过于紧密。

  • 常量表达式(Constant Expressions)的残余

    • 虽然 LLVM 已经在逐步移除复杂的常量表达式(转而使用普通指令),但仍有一些顽固的残余(如icmpfcmp等)。这些表达式增加了编译器的复杂性,且难以维护。

已取得的进展:作者提到,他几年前提出的三大痛点已接近解决:

  • 不透明指针(Opaque Pointers):已完全完成,消除了不同类型指针在 IR 层面的区分。

  • 常量表达式移除:已完成大部分。

  • ptradd 迁移:正在进行中,旨在统一指针算术运算。

结论与展望: Nikita Popov 认为 LLVM 正处于一个“还债”期。虽然它作为工业界事实上的标准非常强大,但其历史包袱和设计缺陷依然明显。他呼吁更多的企业和资深开发者投入到代码审查基础架构清理中,而不仅仅是贡献新功能。

阅读:https://www.npopov.com/2026/01/11/LLVM-The-bad-parts.html

《cargo-semver-checks 呈现指数级增长》

作者: Predrag Gruevski

这篇文章总结了 Rust 生态中的语义化版本(SemVer)检查工具cargo-semver-checks在 2025 年的进展,指出该项目正处于爆发式增长阶段,旨在实现“无畏的 cargo 更新“。

指数级增长的数据:

  • Lint 规则数量翻倍:Lint 规则(检查项)从 2022 年底的 30 个、2023 年的 57 个、2024 年的 120 个,增长到了 2025 年底的242 个,连续多年保持翻倍增长。

  • 发布与贡献:全年发布了 7 个主要版本(v0.39 至 v0.45),包含来自 18 位作者的 734 次提交。

关键技术突破与改进:

  • 性能大幅提升:Lint 的总执行时间减少了4 倍,部分特定规则的运行速度提升了 10 倍。

  • Rustdoc JSON 兼容性:工具在 2025 年平滑支持了26 个不同版本的 rustdoc JSON 格式(从 v32 到 v57)。这意味着用户无需关心底层格式变化,工具能自动适应不同版本的 Rust 编译器。

  • Sealed Traits 检测:v0.40 版本大幅升级了对密封 Trait 的识别系统,提高了检查准确性并支持处理循环 Trait 关系。

项目愿景:无畏更新。 作者重申了项目的终极目标:消除cargo update时的“俄罗斯轮盘赌”现象。目前,即便是最流行的前 1000 个 crate 中,也有超过 1/6 的项目曾意外发布过破坏性变更。cargo-semver-checks的存在就是为了在发布前拦截这些问题。

2026 年展望与挑战:

  • 可持续性问题:作者直言目前开源项目的资金支持(如 GitHub Sponsors 和企业赞助)仍显不足。如果没有重大的企业资助,2026 年可能无法维持这种翻倍增加 Lint 的强度。

  • 策略转变:2026 年的工作重点可能会从单纯增加规则转向提升稳定性、减少误报以及进一步集成到 Cargo 官方生态中。

2025 年是cargo-semver-checks走向成熟的关键一年,它通过更强大的自动化检查和更快的运行速度,进一步保障了 Rust 生态的稳定性。作者呼吁更多依赖该工具的企业参与资助,以维持这一核心基础设施的健康发展。

阅读:https://predr.ag/blog/cargo-semver-checks-2025-year-in-review/

stdout-tv:在终端播放 YouTube 视频


作者不仅完成了一个有趣的 Demo(在终端看 YouTube),还将其中的核心图像处理逻辑封装成了高质量、可复用的工具库pixel2ascii

核心功能:该工具可以抓取 YouTube 视频流,并将其每一帧实时转换为 ASCII 字符(文字画),在终端内直接播放。

开发动机:这是作者的第一个 Rust 学习项目,旨在通过实践掌握 Rust 的所有权(Ownership)、性能优化和终端 I/O 处理。

技术实现:它依赖于作者独立拆分出来的核心库pixel2ascii来进行图像到文字的转换,并加入了基础的帧率(FPS)控制机制。

pixel2ascii是上述视频播放器的“心脏”,是一个专门负责将像素图像转换为 ASCII 字符的 Rust 库(Crate)和命令行工具。核心功能:

  • 图像转 ASCII:支持将 PNG, JPEG, GIF, BMP 等多种格式转换为文字画。

  • **真彩色支持 (ANSI Truecolor)**:对于支持 24 位色的现代终端,可以生成带有颜色的 ASCII 图,视觉效果非常丰富。

  • 多种字符集方案:提供内置的default(标准)、dense(密集型)和blocks(由 Unicode 方块组成,效果最接近像素图)三种方案,也支持自定义字符。

  • 自适应调整:支持长宽比修正(解决终端字符非正方形的问题)和亮度反转(适配浅色或深色终端背景)。

  • 高性能:得益于 Rust 的特性,它能快速处理图像块的平均色彩和亮度采样。

仓库:https://github.com/SameerVers3/stdout-tv

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

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

Orin十年演进

下面这份内容,不是 NVIDIA 产品路线图复述,也不是算力参数对比,而是站在Orin 作为“一代自动驾驶/机器人计算平台的代表性节点”的高度,对它在未来十年中的角色演进与历史定位做一次结构性判断。🧠⚙️ Orin 十年演进&…

作者头像 李华
网站建设 2026/9/9 22:16:32

车联网十年演进

下面这份内容,不是“V2X 技术白皮书”,也不是通信协议时间线,而是站在**“车联网作为智能交通与自动驾驶的社会级基础设施”视角,对未来十年的一次结构性演进判断**。🌐🚗 车联网十年演进(2025–…

作者头像 李华
网站建设 2026/9/3 1:10:24

车规级芯片十年演进

下面这份内容,不是芯片参数对比,也不是厂商 Roadmap,而是站在 “车规级芯片作为智能汽车系统底座”的高度,对未来十年的一次结构性演进判断。🧠🚗 车规级芯片十年演进(2025–2035) 一…

作者头像 李华
网站建设 2026/9/4 6:32:10

LLVM后端入门9:JIT支持

目标机器的实现可以选择性地包含一个即时(JIT)代码生成器,该生成器会将机器码和辅助结构作为二进制输出进行生成,这些输出可直接写入内存。要实现这一点,可通过执行以下步骤来实现 JIT 代码生成: 编写 XXXCodeEmitter.cpp 文件,其中包含一个机器函数 pass,用于将目标机…

作者头像 李华
网站建设 2026/8/25 8:16:38

系统软件缺少comct332.ocx无法启动 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/9/11 18:12:54

你不是在和AI竞争,你是在和“不用AI的自己”

导言:被误读的竞争关系 凌晨三点的告警邮件、重复的冒烟测试、永无止境的回归用例...当ChatGPT写出第一条测试脚本时,测试圈掀起海啸式恐慌。但真正需要警惕的并非AI,而是我们面对技术变革时固化的思维模式——软件测试的竞争本质&#xff0…

作者头像 李华