matklad

RSS: https://matklad.github.io/feed.xml
matklad(Alex Kladov)的技术博客,Rust 社区知名开发者,rust-analyzer 主要作者。

Zig 的 IDE 可以如何工作

rust-analyzer 作者 matklad 撰文探讨 Zig 的 IDE 支持难点:Zig 的 comptime 机制让静态语义分析变得困难。文章先解释 Zig 编译流程(AST→Zir→部分求值→单态化),再评估三种 IDE 方案:全量编译(受条件编译和不完整代码限制,且对小修改的性能压力大)、按需编译(无法在不完全分析的情况下确定最小子图,因为 comptime 反射可绕过调用图分析)、抽象解释(将未具体化的 comptime 参数视为不透明值做部分求值,作为 IDE 的第一响应层)。 作者认为 Sema 需要支持不透明值,后台全量单态化可作为异步补全。全文有清晰的技术判断和个人思考,讨论入口明确。
评论点赞收藏2 天前

寻找 Bug

matklad(Rust regex 作者)用自写 fuzzer 复现了 Rust regex crate 旧版本中 ".abb|b" 匹配 "zabb" 时返回 "b" 的 bug,并把它写成教学案例。 核心方法是 oracle 对比:用 regex_lite 与 regex 两个实现互检,随机生成 regex 和输入串再比较结果;同时强调生成器要偏向短而 tricky 的样本而非大串,可通过加权特性组合、随机分布(swarm testing)、内存复用提升效率。 文中给出完整思路与代码链接,并指出当 fuzzer 漏掉某个 pest 时,应先把这视为 fuzzer 本身的 bug 去改,而不是直接加 unit test。 对测试/工程质量读者有清晰可操作的信息增量,且有具体 bug 与可复现案例,讨论入口强。
评论点赞收藏11 天前

取消、异步取消与优雅停机的区别

区分同步取消、异步取消和优雅停机三个常被混淆的概念。同步取消是控制流操作,异步取消是通信协议,优雅停机是应用层设计模式。 TigerBeetle 用异步取消处理 Grid 操作,用同步 reset 处理上层状态机,并指出"graceful shutdown"常被误用——实际应做 crash-only 设计配合尾延迟容忍。
评论点赞收藏30 天前

Rust Glancer

Rust Glancer Aug 21, 2026 Rust Glancer, a functional LSP server for Rust which uses two orders of magnitude less RAM, is incredibly cool. Go check it out! This post started as a comment on, but I figu...
评论点赞收藏39 天前

更好的电池:标准库质量取决于社会架构,不是大小

标准库该多还是少,这个问题问错了。真正的问题是:哪种社会架构能产出高质量标准库。Python的问题不是臃肿,是质量参差不齐;Go的标准库口碑好,靠的是团队有制度化的交付能力;Rust 1.0的API设计出色,但执行能力有限——rust-lang-nursery已成坟场,而在持续补充。 Rust到2026年还没有从OS获取随机字节流的API,不是技术难题,是组织难题。
评论点赞收藏40 天前

打印列表的简洁写法

用"先打印逗号再打印元素"的方式,可以简洁地输出逗号分隔的列表,避免末尾多余逗号。
评论点赞收藏47 天前

Zig's Io.Threaded Is Neat

Zig’s Io.Threaded is Neat Aug 6, 2026.Threaded is one of the implementations of Zig’s new Io interface that enables concurrency. This is a boring “just use threads” impl. I personally find it neat tho...
评论点赞收藏55 天前

内存安全最难解决的问题

Matklad 指出内存安全的真正难点不在析构函数或堆,而在标签联合(tagged union)的类型混淆。通过 Zig 代码演示了如何在保持类型安全的前提下,利用指针绕过检查实现类型混淆。 文章认为业界最大的失误是未采纳 Walter Bright 关于 C 语言数组语法的建议,并强调缓冲区溢出虽易修复,但此类类型混淆更具隐蔽性。
评论点赞收藏72 天前

CSS: Unavoidable Bad Parts

CSS: Unavoidable Bad Parts Jun 4, 2026 An ersatz CSS tutorial for people who need to style a web page, but aren’t web developers. I am a wrong person to write this kind of thing, as I have neither the...
评论点赞收藏112 天前

如何进行测试:超越数据驱动测试

本文分享了作者关于测试的实践方法,强调数据驱动的测试策略。通过引入check函数来解耦测试用例,使代码更易维护和扩展。文章还探讨了如何编写可复用的测试、避免过度依赖单元测试,以及使用外部化测试和基于属性的测试等方法,旨在提高测试效率和软件质量。
评论点赞收藏141 天前

学习软件架构

In reply to an email asking about learning software design skills as a researcher physicist:
评论点赞收藏141 天前

引导 Zig Fmt

Two tips on using zig fmt effectively. Read this if you are writing Zig, or if you are implementing a code formatter.
评论点赞收藏145 天前

Zig 的最小可行错误上下文

Out of the box, Zig provides minimal and sufficient facilities for error handling --- strongly-typed error codes. Error reporting is left to the user. Idiomatic solution is to pass a Diagnostics out p...
评论点赞收藏150 天前

256行或更少:测试用例最小化

Property Based Testing and fuzzing are a deep and science-intensive topic. There are enough advanced techniques there for a couple of PhDs, a PBT daemon, and a client-server architecture. But I have t...
评论点赞收藏163 天前

Architecture.md:为什么以及如何为开源项目添加ARCHITECTURE文档

本文作者结合自身开源项目维护经验,强调在大型开源项目中添加ARCHITECTURE文档的重要性。文章指出,该文档能显著降低新贡献者理解代码结构的难度,加速开发效率,并提供了具体编写建议:保持简短、描述高层架构与模块关系、命名重要文件但不直接链接、明确调用边界和不变式,并辅以跨切关注点章节。 作者以rust-analyzer为例,展示了实用架构文档的样例,旨在帮助开源社区提升协作效率。
评论点赞收藏169 天前

什么是依赖?(2024)

本文详细阐述了软件依赖的核心组成部分:校验和(checksum)、位置(location)、名称(name)和版本(version)。校验和作为依赖的主要标识,确保所有依赖项都被明确声明;位置指明了如何获取符合特定校验和的依赖项,通常通过URL实现。 名称用于区分不同版本的同一依赖,便于去重;版本规则则管理依赖项的可替换性,如SemVer规范。文章深入探讨了这些组件在构建可靠依赖系统中的作用和优势。
评论点赞收藏189 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。