How Our Rust-to-Zig Rewrite Is Going
5 hours ago
- #Roc
- #Zig
- #Compiler
- Roc编译器团队已将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编程语言基金会支持。