首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

来自 Rust 的 Zig 感觉如何

摘要

What Zig felt like, coming from Rust Intro I’ve spent the last 7 years as a Rust developer, working mostly on open source projects, and I’d like to think I’ve built a solid feel for the language and i...

the and Zig Rust for like with built language thing
2026-09-20 1 阅读 约7分钟阅读 ksec
分享:
字号:
Zig 的感觉如何,来自 Rust Intro 在过去的 7 年里,我一直是一名 Rust 开发人员,主要从事开源项目,我想我已经对这门语言及其生态系统建立了扎实的感觉。我倾向于 Rust 的功能方面,比如干净的功能、富有表现力的类型,诸如此类。但我总是对其他语言感到好奇,而 Zig 作为 C 语言的候选继任者已经在我的关注范围内有一段时间了:它的级别更低,重量更轻,并且在人们认真对待的语言中稳步赢得了一席之地。我在职业生涯的早期就曾接触过 C,所以总觉得进行比较很有趣。值得一提的是:我对 Zig 的体验始于这个项目。对于每天使用 Zig 的人来说,一些观察结果看起来天真而明显,而我一路上做出的一些决定几乎肯定不是最佳的,它们更多地是由 Rust 遗留下来的习惯而不是深层的 Zig 习惯所塑造的。没关系,每个人都必须从某个地方开始,与此同时,无论好坏,我都依靠我多年来建立的跨语言直觉。为了公平比较,我决定重新实现一些我已经用 Rust 构建的东西,不是一个玩具,也不是一个庞大的项目,最好是社区可以实际使用的东西。我选择了 JSONPath:一种 JSON 查询语言,在 RFC 9535 中指定。Rust 版本已经存在 ( jsonpath-rust ),目标是将相同的东西带到 Zig:zig-jsonpath 。 IDE 支持 首先让我措手不及的是 IDE 支持,或者说几乎完全缺乏它。我一直在 Rust 中使用 RustRover,在其他语言中使用各种 JetBrains 风格,相比之下,Zig 除了语法突出显示和基本自动完成之外几乎没有提供任何功能。这并不奇怪,但它确实迫使我回到基础:主要从命令行学习使用该语言。一开始的缺点变成了体验中更有趣的部分之一。事实证明,我只是忘记了依赖裸 CLI 工具是多么简单。这里的第一个真正的教训是 build.zig ,它可以轻松地处理这个问题。我最终决定了这个设置: zig build test # 运行所有测试 zig build test -Dfilter = "filter match function basic" # 运行一个测试 zig build test -Ddebug-query = true # 所有带有调试功能的测试 zig build compliance # 合规性套件 zig build check # 单元测试 +合规性 一旦你接受了这些条款,使用起来真的很耳目一新。我要感谢 Zig,以一种迂回的方式,启动了更大的连锁反应,即我从完整的 IDE 转向 helix + alacritty + zellij 设置。扁平结构 对于 Rust 和大多数其他语言,我总是花费大量时间(来回)尝试在文件大小和文件夹深度之间找到适当的平衡。您可以随意分割文件并将文件夹层次结构扩展至您喜欢的深度。事实证明,Zig 对此也很满意,但不知何故并没有真正鼓励它(就像 C 一样,这对于低级系统语言来说并不奇怪)。如果需要,您可以嵌套文件和文件夹,但这样做会带来一些导入摩擦,真正的问题是:为什么要麻烦呢?通过将所有内容拆分到更多文件和文件夹中,您实际上可以获得什么可读性?理论上可读性更好。实际上,当您将相关内容折叠到一个更大的文件中时,您可以将其切片并逐节导航,将所有内容放在一个位置确实有好处。大多数情况下,Zig 会推动你走向平坦。如果某个东西需要模型的伴侣,我只需在它旁边创建一个 model_ 文件并继续。我不认为这可以扩展到大型项目,这意味着在某些时候你需要一个真正的层次结构,但事实证明,Zig 中需要一个层次结构的门槛比我预期的要高得多。在 Rust 中,我倾向于尽早接触文件夹结构,几乎是默认的。在 Zig 中,我一直推迟它,到这个项目结束时,我根本不需要它。这种对比不仅对 Zig 很有用,因为它让我重新考虑,即使是在其他语言中,我组织文件是因为项目真正需要它,还是出于习惯。这也是衡量项目实际大小的一种非常诚实的方法:如果您在第一天就忍不住伸手去拿文件夹,那么它可能比您感觉的要小。下面是实际的区别: Rust ( src/ ): src/ ├── lib.rs ├── parser.rs ├── parser/ │ ├── error.rs │ ├── Macros.rs │ ├── model.rs │ ├── tests.rs │ └── Grammar/ │ └── json_path_9535.pest ├── query.rs └── query/ ├──atom.rs ├──相当.rs ├──比较.rs ├──filter.rs ├──jp_query.rs ├──queryable.rs ├──segment.rs ├──selector.rs ├──state.rs ├──test.rs └── test_function.rs Zig ( src/ ): src/ ├── root.zig ├── parser.zig ├── model.zig ├── model_query.zig └── 查询
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱