实现自托管后,Zig 的下一步是什么?


随着 11 月 1 日 Zig v0.10.0 版本的发布,其新的自托管编译器(self-hosted compiler)也将同步推出。“尽管自托管编译器现已实现,但仍有更多的工作要做。与此同时,更多令人兴奋的功能的大门已经打开,比如 Zig 的官方包管理器。”

Zig 项目的下一步计划包括:

性能改进

与旧的 C++ implementation(也称为 bootstrap compiler)相比,新的自托管编译器将内存使用量减少了 3 倍

例如,构建编译器本身过去需要 9.6GB 的 RAM,而现在只需要2.8GB。现在可以在 32 位系统和资源有限的机器(如 CI 运行器)上构建 Zig。此改进解决了一些用户无法在其设备上构建 Zig 的问题。

而内存效率的提高在很大程度上也要归功于在自托管编译器设计中采用的面向数据的编程技术。

自定义后端

虽然成功的节省了内存,但自托管编译器并没有比旧的编译器快(作为一个 data point,自我构建的速度快 7%)。正如 Zig’s New Relationship with LLVM 中所述,编译时间由 LLVM 主导,因此提高编译速度的唯一方法是 Zig 拥有自己的自定义后端。

公告指出,为最常见的架构构建自定义后端的工作已经开始,感兴趣的可以关注 0.10.0 发行说明中的​​进度报告。但可以总结一下,即:arm64 的进度约为 40%,x86_64 的进度约为 60%。启用这些后端后,你的程序的调试构建将完全绕过 LLVM。

C 后端

开发团队还在开发一种特殊的后端,它可以生成 C 源代码。而得益于一个惊人的贡献,C 后端的进展最近突飞猛进(87% 并且还在增加) 。

这个后端的有趣之处在于,它将在我们替换旧的 bootstrap compiler 实现的计划中发挥作用;也许更有趣的是,它将允许 Zig 以 LLVM 不支持的架构为目标, 包括那些迫使你使用特定 C 编译器的架构,如某些游戏机平台

编译器开发速度

作为语言的使用者,你不会直接体验到 bootstrap compiler 代码库与新代码库之间的差异,但这种变化也会影响到你,因为它将影响到花费在编译器上的总工作量。

目前 Zig 已经开始有更多的人对编译器做出贡献。“我自己就是一个例子:我已经开始致力于自动化文档系统的新实现”。现在对编译器的贡献已经变得更容易了。

新的 for 循环语法

一个例子是即将实现的新 for 循环语法,它也支持 ranges。不过值得注意的是,这不会包含在 0.10.0 版本中。

const nums = [3]usize {42, 42, 42};
const chars = [3]u8 {'a', 'b', 'c'};

// easy "zip" iteration (all arguments must have the same length)
for (nums, chars) |n, c| { ... }

// easy range loops
for (0..3) |idx| { ... } 

// but this won't work anymore (old syntax)
for (chars) |c, idx| { ... }

// now you need a range if you want an index
for (chars, 0..) |elem, idx| { ... }

为 multi-argument for loops 提供 language-level 支持:

  • 允许进行 hoist out-of-bounds checks,提高安全构建模式(Debug、ReleaseSafe)下的性能。
  • 鼓励与 MultiArrayList 和其他面向数据的设计技术一起使用的内存访问模式。
  • 提供简洁的语法来进行 ranges 循环。

阅读有关此语言提案的更多信息。

官方包管理器

一旦自托管编译器与 bootstrap 编译器达到功能对等,开发团队将开始处理官方包管理器的第一次迭代。“我们并不期望首先尝试确定每个设计方面,但我们确实知道我们想要朝着哪个大方向前进”。

第一次迭代的主要目标是启用依赖项的简单使用来开始构建包生态系统,并确保可以轻松打包 C/C++ 项目,而不仅仅是 Zig。Zig 构建系统已经可以构建 C/C++ 项目,“因此我们希望确保我们可以利用 40 多年的开源工作,而不仅仅是 Zig 重写。也就是说,支持 C/C++ 不仅有利于 Zig,因为我们相信 Zig 可以帮助简化仅打算将 Zig 用作编译器和构建系统的项目的获取和构建依赖项的过程。”

有关官方包管理器的特定功能,目前的看法为:

  • 包管理器将成为编译器的一部分,而不是单独的可执行文件。Zig 是一种语言和编译器工具链。
  • 包管理器不会假定存在中央包索引。不打算创建官方包索引。
  • 版本解析将类似于 Go 的最小版本选择,但有一个额外的限制:stable packages 将只能依赖于其他 stable packages(例如,一个v1.x包不能依赖于一个v0.y包)。

“我们对这些决定相当有信心,除了稳定性限制。好消息是,如果它被证明过于苛刻,我们总是可以在不破坏现有包的情况下放松这一限制。”

更多详情可查看官方博客。


相關推薦

2022-11-02

添加-fstage1flag 即可使用。 官方介绍称,自托管编译器的实现在性能和内存使用方面优于旧版本。以下是编译器自身构建的两项数据(在 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz 上测试): Wall Clock Time: 43 seconds to 40 seconds (7% faster) P

2023-08-05

阅读 Zig 0.10.0 正式发布,自托管编译器首次亮相 实现自托管后,Zig 的下一步是什么? Zig 重要里程碑:已初步实现自举

2023-09-08

类。它们能生成速度最快、体积最小的 Wasm 应用程序。 托管语言。托管语言仍然是编译语言,但编译器输出需要"managed runtime"才能正常运行。包括有 Kotlin、Dart、Go、Java 和 .Net 等。 脚本语言。JavaScript、Ruby、PHP 和 Python 等

2022-09-28

、错误报告、调试和更小的 bundle sizes;但它真正做的是实现谷歌计划的未来改进。随着 Ivy 的完成,谷歌的计算资源减少了 90%,这反过来又导致谷歌最大的 Angular 应用程序的构建时间减少了大约 50 分钟。 同时,Angular 团队还

2023-05-15

按照计划,Deluge 固件将在 GPLv3 许可下发布;源代码将托管在 GitHub,并于 2023 年 6 月可用。Synthstrom 还计划建立一个 Patreon,以帮助支持“社区”开发。

2022-10-24

导入了对应的函数以支持。因此Wasm极大限制了攻击面,实现了多租户环境中不受信任的代码安全受限地执行。这种安全模式是一个关键的促成因素,允许开发人员使用插件和用户提交的代码来扩展现有的应用程序,我们将在下

2024-02-05

时,Andrew还分享了关于为Zig软件基金会(ZSF)筹集资金和实现1.0版本目标的宝贵信息。 即将到来的版本:专注于质量而非时间 Zig团队采取了一种独特的方法来推进即将发布的版本,即专注于完成具体任务而不是遵循严格的时

2023-09-24

已经与 Azure Artifacts 和 JFrog Artifactory 这样的私有 npm 仓库实现了更好的兼容性。用户可以使用 bunfig.toml 文件来配置这些私有仓库,这为开发者提供了更大的灵活性。 值得一提的是,应广大用户的反馈,Bun 决定默认关闭&n

2022-08-26

大家介绍 Oven —— 这家公司将领导 Bun 的开发、提供托管服务并将 Bun 发展为 JavaScript 的端到端解决方案。 Oven 已经筹集了 700 万美元的资金,由 Bucky 在 Kleiner Perkins 牵头,Guillermo Rauch、YCombinator 的 Continuity Fund 等也参与其

2022-12-01

项开发工作的细节并不多,但 Astian 提到: 我们已经实现并开发了一个完全开源的搜索引擎,没有使用第三方 API,也不存储用户的 IP 地址、不存储搜索历史。我们把这个搜索引擎称为 AstianGO,这个搜索引擎是用 PHP 开发的,

2022-09-15

新增 job.jobStore.misfireThreshold 参数 新增 BPM 获取节点的下一步处理人信息接口 新增 OSS 对象存储的文件预览(阿里、腾讯、七牛、MinIO) 优化 默认允许 @Table orderBy 排序 设置为空 v4.5.0 v5.1.0 优化 开发环境时避免 user

2023-08-25

前发展的决心。相反,它证明了不断追求卓越、创新,并实现个人价值的决心更加坚定,并取得了更大的成就。 再向前一步 经过三年不断地学习和市场反馈,我对于 .NET/C# 这门技术有了更深入的理解。我看到了 Furion

2022-12-19

rome 和 Firefox 开发团队也加入进来,将合作开发 Speedometer 的下一个大版本,即 Speedometer 3。 Speedometer 1.0 于 2014 年发布,随后于 2018 年带来了 2.0 版本的重大更新,目前最新的稳定版本为 2.1。 常看我们文章的用户对 Speedometer 应

2024-10-29

开发现状 现在已完成第一个冒烟测试版本。正在开发进一步的功能更新。会有明显的增强。 介绍视频 冒烟测试版 https://www.bilibili.com/video/BV1aNyDYmEXN/ https://www.bilibili.com/video/BV1sz1cYNEDq/ 已知问题 由于sqlite.zig驱动的功能限制