《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中,但关于类型布局的关键信息(如“指针有多宽”)却存储在Module的DataLayout中。这导致在处理类型和常量时,经常无法直接获取其内存布局信息。
ABI 与 目标特性(Target Features)的耦合:
在某些架构(如 AArch64)上,开启特定的目标特性(如浮点寄存器)会改变函数的调用约定(ABI)。
风险:如果一个开启了某特性的函数调用了另一个关闭该特性的函数,可能会导致 ABI 不匹配,进而引发崩溃。作者认为 ABI 应该是模块级的,而特性应该是函数级的,两者目前耦合过于紧密。
常量表达式(Constant Expressions)的残余:
虽然 LLVM 已经在逐步移除复杂的常量表达式(转而使用普通指令),但仍有一些顽固的残余(如
icmp、fcmp等)。这些表达式增加了编译器的复杂性,且难以维护。
已取得的进展:作者提到,他几年前提出的三大痛点已接近解决:
不透明指针(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语言中文社区