256 Lines or Less: Test Case Minimization16 hours agohttps://matklad.github.io/2026/04/20/test-case-minimization.html一个简单的基于属性的测试(PBT)库仅用256行Zig代码实现,它使用有限随机数生成器(FRNG)预生成所有随机数,并且可能耗尽熵。该FRNG提供内置函数用于生成字节、数组、整数、布尔值、有界整数和切片索引,通过编译时多态性实现灵活性。该库用于模拟测试,通过向被测系统输入随机数据,并在任何不一致时崩溃,而有限熵允许通过二分查找自动最小化测试用例,以找到最小的失败输入。测试框架为被测系统创建一个独立进程,通过标准输入传递熵,并使用种子+大小的方式来复现运行。搜索算法先倍增步长以发现失败,然后减半以最小化熵大小,最终输出最小失败种子和大小以用于调试。
Minimal Viable Zig Error Contexts16 hours agohttps://matklad.github.io/2026/05/03/zig-error-context.html
Talk: Introducing Ghostty and Some Useful Zig Patterns16 hours agohttps://mitchellh.com/writing/ghostty-and-useful-zig-patternsGhostty 是一个用 Zig 编写的新终端模拟器,旨在结合速度、丰富功能以及原生平台集成。本次演讲重点介绍了 Ghostty 中使用的 Zig 模式,包括编译时接口、数据表和类型生成,以实现零成本抽象。Ghostty 目前处于封闭测试阶段,可访问源代码,计划于 2024 年以 GPL(可能)许可免费开源发布。在 macOS 上,Ghostty 使用 Swift 实现原生 UI(AppKit、SwiftUI),而 Linux 使用 GTK,核心逻辑用 Zig 编写。主要特性:快速渲染(压力测试下 480-500 FPS)、多种字体样式、分屏、真彩色、Kitty 图形协议以及原生错误消息。未来工作包括 GUI 设置、iCloud 同步、性能改进、内存优化、模糊测试以及扩大测试版计划。该项目旨在创新超越传统模拟器的终端功能,例如进度条、拖放以及安全特性。
Conditionally Disabling Code with Comptime in Zig16 hours agohttps://mitchellh.com/writing/zig-comptime-conditional-disableZig的comptime允许在编译时运行标准Zig代码,无副作用,用于条件编译。条件代码禁用对于平台特定代码、调试和构建配置很有用,避免了运行时条件判断并减小了二进制体积。与C语言的预处理器(独立语言)和Go的文件级构建标签(外部构建系统)不同,Zig使用带有comptime的普通Zig代码。编译器会自动评估comptime条件;`comptime`关键字是可选的,但可以明确意图。示例:`if (comptime builtin.os.tag == .macos) { ... }` 在针对macOS编译时会省略非macOS代码。Comptime可以与运行时条件混合使用;为假的comptime条件会使编译器跳过整个块,从而避免因缺少库或类型而导致的错误。注意:comptime默认不会跨越函数边界;在函数调用前使用`comptime`关键字或将函数标记为`inline`。Comptime是跨平台代码的杀手级功能,消除了对复杂构建系统或外部工具的需求。
Pledging $300,000 to the Zig Software Foundation16 hours agohttps://mitchellh.com/writing/zig-donationMitchell Hashimoto 和他的妻子向 Zig 软件基金会捐款 30 万美元。Hashimoto 自 2019 年起关注 Zig,为编译器做出贡献,并在他的终端项目 Ghostty 中使用 Zig。他支持那些具有变革性、管理良好且出于热情构建的独立软件项目。Zig 被描述为雄心勃勃、创新、实用,且有清晰的稳定性和行业采用路径。ZSF 约三分之一的资金来自个人捐款,现呼吁大家捐款。
Ghostty: Reflecting on Reaching 1.016 hours agohttps://mitchellh.com/writing/ghostty-1-0-reflectionGhostty 1.0 发布;作者回顾项目历程。该项目最初是为了学习 Zig 和图形编程而启动,并未打算公开发布。内测版帮助管理了带宽和家庭时间,但也引发了炒作和挫败感。技术栈使用 Zig 构建核心,并采用平台特定的图形界面,事实证明这种做法是成功的。围绕 Ghostty 形成的社区对性能、设计和质量充满热情。1.0 之后的计划包括修复漏洞并发布独立的 libghostty 供其他项目使用。作者感谢内测社区、Discord 管理员以及妻子的支持。
We Rewrote the Ghostty GTK Application16 hours agohttps://mitchellh.com/writing/ghostty-gtk-rewriteGhostty的GTK应用被重写,完全从Zig融入GObject类型系统,从而实现了更丰富的功能、更高的稳定性和可维护性。此次重写通过将Zig拥有的Config结构包装在引用计数的GObject中,解决了内存管理错误,简化了配置重载和GUI更新。广泛使用Valgrind来验证每一项更改,识别内存泄漏和未定义访问,尤其是在C API边界处。Zig自身的代码库在C API边界处仅有一个泄漏和一个未定义访问,凸显了Zig的内存安全特性。重写使得能够使用现代GTK UI技术如Blueprint,从而更容易添加GUI功能,例如标题栏标签和动画铃铛边框。Valgrind捕获了微妙的问题,如不正确的GObject WeakRef清理,这可能导致罕见的崩溃,强调了跨C API时工具的必要性。新的GTK应用现在是源代码的默认构建,并将包含在Ghostty 1.2版本中。
Zig Builds Are Getting Faster16 hours agohttps://mitchellh.com/writing/zig-builds-getting-fasterZig 0.15.1相比0.14版本在构建时间上显著提升,Ghostty项目亲测有效。构建脚本编译时间从7秒降至1.7秒。完全未缓存的二进制构建时间从41秒减至32秒。Ghostty可执行文件的增量构建从19秒改进至16秒。libghostty-vt的增量构建从2.9秒降至0.975秒,已实现亚秒级。尽管Ghostty大部分仍使用LLVM且增量编译尚未完全功能化,这些增益仍得以实现。自托管的x86_64后端对调试构建已足够稳定,预计近期将有进一步改进。
Don't Trip[wire] Yourself: Testing Error Recovery in Zig16 hours agohttps://mitchellh.com/writing/tripwire
Zig by Example3 days agohttps://zigbyexample.neocities.org/Zig是一种通用编程语言,旨在开发健壮、优化且可复用的软件。官方文档可供进一步学习。《Zig示例》是一本通过带注释的示例程序进行实践入门的教程。这些示例是为0.16版本编写的;如果某些内容无法正常运行,请检查你的版本。
Buz – A fork of Bun using modern Zig, with sub-1s incremental builds4 days agohttps://ziggit.dev/t/buz-a-drop-in-replacement-for-bun-using-modern-zig-with-sub...Buz 是 Bun 的一个正在开发中的分支,基于其 Rust 重写前的最后一个提交,目前尚未准备好用于生产环境。该项目已移植到当前上游 Zig 构建,并在 build.zig 中拥有完整的构建图,可实现亚秒级增量构建。目标是以更干净的代码库成为 Bun 的直接替代品,已导入所有来自 Rust Bun 的新测试,并删除了超过 11,000 行死代码。代码库已被重写并现代化,更依赖 Zig 的标准库,在此过程中修复了无数错误。该项目使用一个略微修补的 Zig 主子模块,但可以使用上游 Zig 的 2b1c663 提交进行构建。在项目被认为足够稳定之前,不接受人工编写的贡献,广泛使用 LLM 进行代码生成以减少技术债务。作者旨在几周或几个月内创建一个可维护的、可直接替代 Rust Bun 1.4.0 的项目,专注于惯用的 Zig 并减少冗余代码。
How Our Rust-to-Zig Rewrite Is Going12 days agohttps://rtfeldman.com/rust-to-zigRoc编译器团队已将30万行Rust代码重写为Zig,最近实现了与原编译器同等功能特性。基于Zig的新编译器核心特性包括:开发期间热代码加载、交叉编译二进制文件、支持零堆分配的类型安全模式匹配字符串插值。重写源于架构挑战,特别是实现多态去函数化时,需要彻底重构而非渐进式修改。选择Zig而非Rust的原因是:编译时间更快、通过细粒度分配器实现更优内存控制、生态更契合编译器需求、对非安全内存代码有更好辅助支持。内存安全性对比显示Zig编译器内存损坏错误报告(10例)少于Rust(21例),但多数属于错误编译问题而非编译器自身缺陷。Zig增量编译耗时(35毫秒)显著优于Rust(3.4秒),尽管当前稳定版存在暂时影响性能的缺陷。编译器采用零解析反序列化缓存技术,利用数组式数据结构实现I/O密集型性能优化,这得益于Zig的内存控制能力。Zig生态圈(含其编译器源码)提供了可复用组件(如LLVM位码序列化器),契合Roc的特殊需求。相较于Rust缺失的特性包括:测试中自动分配、私有结构体字段、更优死代码检测,但Zig在数据布局控制和错误处理方面具有优势。后续计划包括今年晚些时候发布Roc 0.1.0版本,目前正持续完善文档和修复漏洞,相关工作由非营利组织Roc编程语言基金会支持。
My Thoughts on the Bun Rust Rewrite19 days agohttps://andrewkelley.me/post/my-thoughts-bun-rust-rewrite.htmlJarred最初拥有'初学者能量',这有利于学习,但导致了平庸的工程成果。Bun获得风险投资并成为初创公司后,Jarred的管理风格引发了问题:沟通不畅、期望不切实际且共情力不足。Zig团队发现Bun的代码库存在诸多问题,包括临时解决方案、滥用断言和鲁莽的功能开发,这导致了社交距离的产生。Zig与Bun之间的关系恶化,当Bun被Anthropic收购并停止捐款时,双方都感到了解脱。Rust重写公告受到了Zig团队的欢迎,因为这使他们得以远离Bun的工程实践。关于重写的博客文章被批评为歪曲了漏洞消除、测试套件有效性和性能改进。Zig的编译器性能被强调为高效,而Bun在重写后未提及编译速度。尽管存在批评,但Zig团队对Bun的捐款表示感谢,并对Jarred没有个人恶意,只是对双方商业利益不再交织感到高兴。
Zig: All Package Management Functionality Moved from Compiler to Build System24 days agohttps://ziglang.org/devlog/2026/#2026-06-30包管理功能从编译器移出至构建系统,提升了模块化程度,允许在不重新编译编译器的情况下进行补丁。SPIR-V后端取得进展,新增@SpirvType内置类型、通过调用约定设置执行模式,并支持多线程代码生成。新的@bitCast语义基于逻辑位布局定义,使行为与字节序无关,并支持整数到向量转换等新操作。ELF链接器改进实现了快速增量编译和与外部库的链接,但DWARF调试信息支持尚待完善。构建系统重构为配置器和构建器分离的进程,显著加快构建速度并提升缓存效率。增量编译现已支持LLVM后端,加快了开发过程中的错误反馈速度。类型解析重新设计使编译器更惰性,改进了依赖循环的错误信息,并增强了增量编译。io_uring和Grand Central Dispatch的std.Io实现已就绪,允许轻松切换I/O实现。包管理功能增强:依赖项本地存储在zig-pkg目录中,新增--fork标志便于依赖项分支。Windows标准库现优先使用原生ntdll API而非kernel32,以避免不必要的开销并提高可靠性。zig libc项目用Zig封装器替代C源文件,减少冗余并提升优化效果。