202402 | Zig 2024 Roadmap 新鲜出炉
重大事件
Andrew 最近在 zigshow 节目中介绍了 Zig 2024 年的规划,主要有以下几点:
- 0.12 版本会尽快发布
编译时间现在太慢,进而导致修 bug 的时间长,因此 core team 会优先解决这个编译时间问题。在这个看板中,有相应的进度,主要是:Ditch LLVM、Incremental Compilation 这两个。
- 很多人都对 Ditch LLVM 这个事情嗤之以鼻,认为这是不自量力,这个 issue 的讨论也比较多,已经有近 200 条回复,最近 Andrew 增加了一条回复,引用了 In Defense of Not-Invented-Here Syndrome,该文章的核心观点是如果一个技术是一个产品的核心点,那么就应该自己写,因为这样才有核心竞争力,文中的例子是 Excel 团队会自己维护一个 C 编译器。
异步的支持,目前还有还有不少需要解决的技术难点,比如:
- async 函数挂起时,会保存所有上下文,但是在递归函数里,容易 oom
- 无法推倒出 函数指针 是不是 async fn 的,async fn 与普通 fn 的调用方式是不一样的
- Donor Bounties,捐赠性悬赏,
- 工具链,目前还没精力,只能让社区先来做
更多细致总结可以参考:Zig Roadmap 2024 - Andrew Kelley #91 B 站搬运地址:https://www.bilibili.com/video/BV1UC4y167w9/
观点/教程
- Fast-growing Zig tops Stack Overflow survey for highest-paid programming language
- 估计是 Bun 带动的贫富差距?!
- Pool with generational references in Zig
- 作者在文中介绍了一种有意思的思路:当有很多指针指向同一个对象时,如何不用遍历这些指针就能让其失效,答案是用一个胖指针,包括两部分:真正的数据指针和指向对象的年龄,当指针的年龄和指向对象的年龄不一致时,即认为该指针失效。
- TCC RISC-V Compiler runs in the Web Browser (thanks to Zig Compiler)
TCC 是一个 64 位 RISC-V 的编译器,作者在这篇文章里利用 Zig 把它编译成 WebAssembly 放到浏览器里执行。其中的难点在于 TCC 会调用 Posix 的一些函数,比如:fopen、fprintf、strncpy、malloc 等,但是这些在 WebAssembly 里是没有的,因此需要自己实现,不过幸好 Zig 社区内已经有不少 libc 的实现了:
- marler8997/ziglibc
- ZigEmbeddedGroup/foundation-libc,A libc implementation written in Zig that is designed to be used with freestanding targets.
- Building the DirectX shader compiler better than Microsoft?
- Porting Zig to NetBSD
- Sig Engineering - Part 2 - Progress on AccountsDB & more
Syndica 公司的 Sig,这是一款用 Zig 编写的、专注于 RPS 的 Solana 验证器客户端。在这篇文章里,他们分析了如何优化 HashMap 的性能,而且实现了一个基于本地磁盘的 Allocator。而且他们还在招聘 Zig 工程师:
项目/工具
- semickolon/kirei
- 🌸 The prettiest keyboard software
- Dok8tavo/Interfacil
- Interfacil is a Zig package for making and using interfaces easily in Zig.
- kamlesh-nb/azure-sdk-for-zig
- Azure Sdk for Zig - Experimental
- ringtailsoftware/zig-wasm-audio-framebuffer
- Examples of integrating Zig and Wasm for audio and graphics on the web
- cztomsik/tokamak
- Server-side framework for Zig, relying heavily on dependency injection.
- The-Z-Labs/cli4bofs
- Command line interface for (running) BOFs
- nelipuu/zbind
- Zig-TypeScript binding generator 🟦 🦎
- sneekyfoxx/ziggy
- 又又一个 Zig 版本管理工具