Partially Matching Zig Enums9 months agohttps://matklad.github.io/2025/08/08/partially-matching-zig-enums.html讨论在Zig枚举中处理多个变体的通用代码指出为通用代码场景重构枚举时的笨拙之处介绍针对Zig中AB问题的运行时panic解决方案提出使用`inline .a, .b`和`comptime unreachable`的编译器检查方案解释`comptime unreachable`如何确保不可达分支的编译期失败演示添加错误代码时会按预期导致编译失败
Zig's Lovely Syntax9 months agohttps://matklad.github.io/2025/08/09/zigs-lovely-syntax.htmlZig的语法因其简洁清晰而备受赞誉,尤其是与Rust相比时。Zig的整数字面量只有`comptime_int`一种类型,且需要显式类型转换。Zig的字符串字面量通过将每行视为独立标记,避免了其他语言中原始字符串的常见问题。Zig的记录字面量采用`.{}`语法,使字段写入更易检索。Zig使用前缀类型和后缀解引用,提升了代码可读性。Zig的标识符可通过`@""`语法包含空格,避免关键字冲突。Zig的函数声明省略了Rust中的箭头符号(`->`),简化了语法。Zig用`const`和`var`声明变量,其中`const`更常用。Zig的布尔运算符拼写为`and`和`or`,强调其控制流特性。Zig要求显式`return`语句,避免了Rust中分号导致的歧义。Zig的`if`语句允许省略大括号,编译器会捕获格式错误。Zig的循环支持`else`子句且本身是表达式,提升了可读性。Zig禁止变量遮蔽,并通过显式导入简化名称解析。Zig将所有内容视为表达式,统一了值、类型和模式的语法。Zig的泛型类型像函数一样调用(如`ArrayList(u32)`),且无类型推断。Zig的“结果位置语义”支持基于上下文的类型转换,简化代码。Zig的内置函数采用`@`语法(如`@divExact`),提供清晰的命名操作。Zig通过`@import`函数导入文件,语法明确简洁。Zig的语法设计追求清晰性、易读性和极简主义,既借鉴他山之玉,也坚持创新。
Faster substring search with SIMD in Zig9 months agohttps://aarol.dev/posts/zig-simd-substr/文章探讨了如何利用SIMD(单指令多数据流)技术在Zig语言中实现更快的子字符串搜索。通过与Zig标准库的std.mem.indexOf函数(标准子串搜索方法)进行基准对比,展示了性能差异。该SIMD算法的核心思想是:通过比较目标子串的首尾字符与文本块的对应位置,大幅减少需要检查的字符数量。实现细节包括使用AVX2的256位宽寄存器,以及Zig的@Vector向量类型和@splat填充函数来完成SIMD操作。基准测试显示性能提升达60%,在《白鲸记》等大型文本中效果尤为显著。优化策略包括优先选择子串中的稀有字符来降低误匹配率,减少分支预测错误,从而获得额外性能提升。文章讨论了AVX-512指令集可能带来的更大提速,但也指出平台依赖性和std.mem.indexOf通用性等限制因素。尽管性能优势明显,作者认为由于应用场景较窄和平台特定要求,SIMD子串搜索可能不适合直接集成到Zig标准库中。
We rewrote the Ghostty GTK application9 months agohttps://mitchellh.com/writing/ghostty-gtk-rewriteGhostty的GTK应用程序已用Zig语言通过GObject类型系统重写,提高了稳定性和可维护性此次重写通过集成GObject的引用计数机制解决了内存管理问题,避免了与对象生命周期相关的错误现在可以访问GTK中的信号、属性和动作等新特性,简化了可重载配置等任务的实现项目大量使用Valgrind检测内存问题,发现了GObject交互中的错误,验证了Zig的内存安全性该项目的成功凸显了Valgrind等工具在C语言API边界的重要性,即使对Zig这样的内存安全语言也是如此重写后的GTK应用已成为Ghostty主分支的默认版本,并将包含在即将发布的1.2版本中
I'm too dumb for Zig's new IO interface9 months agohttps://www.openmymind.net/Im-Too-Dumb-For-Zigs-New-IO-Interface/Zig 0.15 引入了带有 std.Io.Reader 和 std.Io.Writer 类型的新 IO 接口旧版 IO 接口存在性能问题且依赖类型与 anytype 的混合使用tls.Client.init 函数需要 *std.Io.Reader、*std.Io.Writer 和配置选项作为参数net.Stream 虽然提供 reader() 和 writer() 方法,但转换为 *std.Io.Reader/*std.Io.Writer 存在不一致性缓冲机制在新 IO 接口中是一等公民,要求明确指定缓冲区大小tls.Client.init 强制要求配置 ca_bundle、host、read_buffer 和 write_buffer 等选项从 tls.Client.reader 读取数据不符合直觉,缺乏简单的 read 方法提供的 TLS 客户端示例代码过于复杂且容易出错
Anonymous Structavaganza in Zig9 months agohttps://lirk.top/blog/structs不同名称的C语言结构体被视为不兼容类型。Zig语言的结构体绑定到其初始名称且不会因重新赋值而改变。Zig结构体可以自省并引用其原始文件。Zig中的类型构造函数如果返回相同的结构体字面量,则可以创建结构上等效的类型。结构体字段的默认值会影响Zig中的类型相等性判断。Zig可能会优化忽略参数的类型构造函数,从而导致生成相同的类型。如果参数存在但未被使用,Zig的类型系统并不总能识别等效类型。Jai和Odin在类型构造和相等性检查方面表现出与Zig类似的行为。
Indices, not Pointers8 months agohttps://joegm.github.io/blog/indices-not-pointers/在数据结构中使用索引而非指针可以通过减少内存占用和加快访问速度来提升性能索引存储在动态数组中,使得节点之间通过索引而非指针相互引用优势包括:更小的节点(4字节 vs 指针的8字节)、连续内存存储带来的更快访问速度、以及更少的内存分配开销释放整个结构是瞬间完成的,因为只需一次free调用缺点是难以在不移动元素的情况下释放单个节点,可通过空闲列表(freelist)机制缓解一个Zig语言的代码示例演示了如何使用索引实现树形结构
Hitting Peak File IO Performance with Zig8 months agohttps://steelcake.com/blog/nvme-zig/使用Zig和io_uring在Linux上最大化文件IO性能fio与Zig代码读写基准测试对比基准测试结果:fio(写入4.083 GB/s,读取7.33 GB/s),Zig(写入3.802 GB/s,读取6.996 GB/s)性能关键特性:轮询IO、内核侧忙轮询(SQ_THREAD_POLL)、注册缓冲区需要两个io_uring实例:一个启用IOPOLL,另一个不启用在库中实现缓冲区接口进行内存管理处理直接IO操作的对齐要求使用SQTHREAD_POLL特性带来的性能优势及其影响与glommio等其他库的对比及Zig实现的独特优化
Automate compile_flags for C/C++ projects on the Zig build system8 months agohttps://simonhartcher.com/posts/2025-09-08-announcing-compile-flagz/Zig构建系统在C/C++项目中对包含路径和代码智能提示缺乏编辑器支持compile_flagz工具通过从build.zig自动生成compile_flags.txt来解决此问题该工具帮助编辑器定位包含路径,从而实现更好的代码补全和导航功能应用示例:ROLLER项目(游戏《Fatal Racing(Whiplash)》的反编译工程)Zig构建系统简化了跨平台编译,但对C/C++项目的IDE集成支持不足compile_flagz生成的compile_flags.txt可被clangd等语言服务器读取用于项目配置配置方法:添加compile_flagz依赖项并在build.zig中设置包含路径未来计划支持更多编译器标志如-isystem、-std和-D等参数该工具显著提升了使用Zig构建系统的C/C++项目开发体验
A Web Framework for Zig8 months agohttps://www.jetzig.dev/简单易用的基于文件路由系统,可映射到RESTful风格的Zig函数声明,支持自定义路由配置Zmpl HTML模板引擎支持布局、局部模板、继承机制和静态内容渲染端点默认采用JSON渲染,提供标准RESTful API接口基于http.zig驱动,具备卓越的性能表现和扩展能力提供用户友好的CLI工具,支持快速创建项目和添加组件可定制的中间件链,用于请求/响应处理,内置htmx支持开箱即用的Cookie、用户会话和请求头支持Discord上拥有活跃友好的开发者社区免费开源项目,采用MIT许可协议JetQuery提供强大灵活的数据库抽象层
Writing an operating system kernel from scratch – RISC-V/OpenSBI/Zig8 months agohttps://popovicu.com/posts/writing-an-operating-system-kernel-from-scratch/使用Zig语言在RISC-V架构上实现精简分时操作系统内核目标受众为底层系统软件方向的学生和爱好者采用现代化工具链和RISC-V架构进行教学实践内核特性包含静态线程定义、用户态线程和时间片轮转调度线程实现为自带堆栈的永不退出的函数通过OpenSBI实现控制台打印和定时器硬件管理演示通过定时器中断和系统调用进行上下文切换采用内核与用户代码单二进制打包的简化设计包含通过SBI或直接UART内存映射的基本I/O驱动示例用户线程循环打印带线程ID的消息提供调试模式可查看详细中断和调度日志部署于搭载OpenSBI固件的QEMU虚拟机环境
Show HN: Zedis – A Redis clone I'm writing in Zig8 months agohttps://github.com/barddoo/zedis用Zig编写的Redis兼容内存数据存储,用于学习和实验支持Redis序列化协议(RESP)和核心数据类型如字符串和整数实现基本Redis命令:GET、SET、INCR、DECR、DEL、EXISTS、TYPE具备高性能、线程安全和多客户端连接管理特性包含磁盘持久化(RDB快照)和发布/订阅功能未来计划:AOF日志、更多Redis命令、列表/集合支持、键过期、集群基于Zig构建(最低版本0.15.1),确保内存安全与性能提供简单构建和运行命令遵循Zig规范:类型安全操作、显式错误处理、内存安全和日志记录贡献指南包括添加命令、测试用例和遵循Zig代码格式
Is Zig's New Writer Unsafe?8 months agohttps://www.openmymind.net/Is-Zigs-New-Io-Unsafe/文章讨论了Zig语言新标准库*std.Io.Reader在写入stdout时由于缓冲区大小要求可能导致的未定义行为。小缓冲区(如64字节)在调试模式下可能引发断言失败,在发布模式下可能导致无限循环,具体表现取决于输入内容。这不仅是文档问题——缓冲区的需求可能是条件性的或未知的,使得库开发者难以明确规范。该故障可能与输入内容相关,导致在测试或开发初期难以发现。作者质疑这究竟是真正存在的问题,还是自己对该实现的误解。
Show HN: I wrote an OS in 1000 lines of Zig8 months agohttps://github.com/botirk38/OS-1000-lines-zigOS-1000-lines-zig 是一个基于 Zig 的轻量级操作系统项目采用单体内核架构,具备基础进程和内存管理功能包含简单的命令行交互界面需要 Zig 编译器(v0.10.0+)、代码编辑器和终端环境进行配置安装步骤:克隆仓库 → 进入目录 → 执行 `zig build` 构建使用方法:通过 `zig run` 运行系统并与命令行界面交互核心组件:`kernel.zig`、`common.zig` 和 `build.zig`可通过 `config.zig` 进行配置修改项目采用 MIT 许可证,欢迎贡献代码包含自动化测试(`zig test`),未来计划开发高级功能和网络支持
Why Zig Feels More Practical Than Rust8 months agohttps://dayvster.com/blog/why-zig-feels-more-practical-than-rust-for-real-world-...Zig被认为比Rust更适合CLI工具开发,因其简洁性和手动内存管理更符合实际需求。Rust的所有权检查器在编译时强制保证内存安全,但增加了复杂性和认知负担。内存安全只是软件安全的其中一个维度,可预测行为、健壮性和性能同样至关重要。Zig通过分配器和defer语句实现手动内存管理,在避免Rust所有权检查器复杂性的同时保持控制力。对于小型CLI工具,Zig能提供更优的开发体验,使代码更易于编写和维护。Rust在需要编译期保证的大型多线程系统中表现卓越。Zig将开发者视为能力成熟的成年人,而Rust的严格规则对简单项目可能显得过度约束。
Why TigerBeetle is the most interesting database in the world8 months agohttps://www.amplifypartners.com/blog-posts/why-tigerbeetle-is-the-most-interesti...TigerBeetle是一种独特的数据库,其设计理念与传统数据库相反——专注慢速编写代码、确定性模拟测试、实现零依赖。它强制静态内存分配,在生产环境中保持断言启用,并采用Viewstamped复制协议和Zig语言,而非Raft协议和Rust语言。该数据库专为金融交易设计,将借贷操作作为一等原语,单次1MiB查询可打包8,190笔交易,性能卓越。默认分布式架构能处理存储故障和时钟同步问题,并通过协议感知恢复(Protocol Aware Recovery)实现容错。完全基于Zig语言构建的TigerBeetle,兼具静态内存分配优势和卓越的开发体验。通过VOPR集群进行确定性模拟测试(DST),可在数日内模拟数年运行状态,捕捉极端场景。受NASA《Power of Ten》启发的TigerStyle工程方法论,强调简洁优雅的设计哲学和断言机制的应用。仅用3.5年即通过Jepsen测试验证,印证了其架构的健壮性和数据库设计的前瞻性。
Implementing OpenMP for Zig to enable its use in HPC context7 months agohttps://arxiv.org/abs/2408.09902探索为Zig添加OpenMP支持以用于高性能计算应用Zig在保持与C/Fortran相当性能的同时,提供内存安全等现代特性通过LLVM编译器工具链在Zig中实现了部分OpenMP支持Zig使用OpenMP时的性能表现与传统高性能计算语言相当或更优论证了Zig作为高性能计算开发的现代替代方案的可行性
Simple Hotkey Daemon for macOS, Ported to Zig7 months agohttps://github.com/jackielii/skhd.zigskhd.zig 是 macOS 的快捷键守护进程,由 skhd 移植到 Zig 语言开发,保持对原版 skhd 配置文件的兼容性。新增功能包括进程组管理、命令定义 (.define)、按键转发/重映射以及改进的错误报告机制。支持通过 Homebrew 安装、按架构直接下载或使用 Zig 从源码构建三种安装方式。提供便捷的服务管理命令,可轻松实现服务启动、状态查询和停止操作。核心特性包含事件捕获、热键映射、进程专属绑定、模态系统和完善的错误报告体系。配置语法完全兼容原版 skhd,新增了 shell 定制指令、黑名单功能及额外配置文件加载功能。高级特性支持左右修饰键区分、特殊按键处理、穿透模式及配置文件嵌套引入。调试与分析功能因构建模式而异(Debug/ReleaseSafe/ReleaseFast/ReleaseSmall),其中 ReleaseFast 模式为日常使用优化。示例配置展示了基础热键映射、应用专属命令、窗口管理模式和可复用命令定义等场景。性能优化确保低延迟热键处理,在 release 构建中实现无分配事件循环。
Fast SSIMULACRA2 Implementation in Zig7 months agohttps://github.com/gianni-rosato/fssimu2用Zig语言实现的高速SSIMULACRA2衍生版本,命名为fssimu2支持sRGB格式的PNG、PAM、JPEG、WebP或AVIF输入格式在Intel Core i7 13700k处理器上测试,性能较参考实现提升最高23%,内存占用减少约40%提供JSON输出和误差图保存功能通过validate.py验证与参考SSIMULACRA2的符合性,显示高度相关性(PCC: 0.999700)编译需要Zig(版本0.15.1)、libjpeg-turbo、libwebp和libavif提供C兼容ABI接口(ssimu2.h头文件)用于SSIMULACRA2分数计算示例C程序存放在c_abi_example/目录项目采用Apache 2.0许可证,包含来自libspng、libminiz和vapoursynth-zip的第三方代码
Zig Builds Are Getting Faster7 months agohttps://mitchellh.com/writing/zig-builds-getting-fasterZig 的主要目标一直是更快的编译时间,为此进行了大量工作来实现这一目标。Zig 0.15.1 相比 Zig 0.14 在实际构建时间上展现了显著改进。构建脚本编译时间在 Zig 0.15.1 中从 7 秒缩短至 1.7 秒。完整无缓存的 Ghostty 二进制构建时间从 41 秒提升至 32 秒。Ghostty 可执行文件的增量构建时间从 19 秒降低到 16 秒。libghostty-vt 的增量构建时间从 2.884 秒大幅缩减至 975 毫秒。自研 x86_64 后端的改进有望进一步减少构建时间。未来的增量编译支持可能将构建时间压缩至毫秒级。Zig 对编译时间的专注正在为开发者带来切实效益。