用Zig构建一种高效和便携的编程语言

2021-05-13 22:11:45

从头开始构建一个编程语言并不容易。除了创建编译器外,定义标准库和支持编辑器和构建系统等支持工具,您需要设计语言 - 它是势在必行还是功能?语言将用于什么系统?它是否有成分造影功能?

Zig是我们开源和非营利组织的成员,是一种用于维护最佳和可重复使用的软件的通用编程语言和工具链。这是简单且强大的,并且具有便携式SIMD。对于在Zig工作的团队中,决定建立一个针对他们需求的语言而不是轻微的。要了解更多关于激励这一旅程的信息,我们坐在该项目的团队成员之一坐下来坐落在一起。

洛瑞斯:我想讲一个笑话版本的起源故事,在他的日常工作中被问到Andrew Kelley(Zig的创造者)来清理一个C ++代码库如此杂乱,这是一种发明全新的语言是唯一的方法。但即使他真的负责一个大的C ++码比,事实就是他开始在Zig上工作以获得其他原因,主要与他对实时音频处理的兴趣相关。几年后的Zig夜晚和周末工作后,他开始从Zig社区获得足够的捐款,以便在Okcupid离开他的工作。

与此同时,我在Redis Labs担任开发人员倡导者并开始在Zig投资,因为它是编写Redis扩展的一个美丽替代方案。我最终加入了ZIG社区,并且在大流行开始的挫折和无聊的时刻,我开始了Zig Showtime,这是一个关于开发人员在线活动的实验。不久之后,安德鲁成立了Zig软件基金会,A 501(c)(3)个非营利性公司,我加入了他作为社区副总裁。

Loris:Zig有一个简单的目标:与C(或更多)一样高效和便携,并修复所有的单人,困扰其 - 和邻居 - 生态系统的局限性。我们有能力观察到已经产生了哪些数十年的系统编程,并且在解决一些问题的路径上,Andrew偶然发现了一些强大的想法,如编译时代码执行。他在浅谈谈话中解释了Zig的本质,他做得很好。 Zig 1.0的道路。"

Zig也是社会视角的真正格林菲尔德项目。 Zig背后没有大公司,由于公司和个人捐赠的平衡混合,非营利基金会站在自己的腿上。我们在我们的董事会上没有任何大型技术公司,坦率地说,我们喜欢这种方式。至于这将需要我们,只有时间会告诉我们,但我仍然记得看到编辑后的令人惊讶,并且安德鲁能够指导发展,得出结论,Zig的成功将基本不可避免。

现在,我们已经开始吸引一名非常值得注意的名字,如速溶octo团队的一个软件工程师,Libsodium的作者,为Zig标准图书馆贡献了一套全套的加密工具,我相信我们都分享相同的印象。

汉娜:Zig应用程序如何比C代码更快地运行,同时也具有更好的安全保证?

Loris:Zig是一种带有手动存储器管理的语言,也没有运行时,如C.这意味着Zig和C程序在性能方面本质上是可比的。

此时的战斗是指指指导机器代码如何生成的详细信息,此处Zig具有诸如编辑等的一些关键优势,这给出了Zig泛型和在编译期间预计算结果的功能。在这里,您可以深入解释Zig如何实现更好的性能,但如果我必须在句子中总结它,我会说它往往更方便地在zig中编写高效代码而不是c 。

为了安全,ZIG具有多个构建模式,可以为未定义的行为启用可选的运行时检查(即代码中的错误,例如尝试读取阵列的末尾),但Zig中的安全性也来自更重要的表达式系统,特别是关于指针。在C中,许多错误(以及因此,安全漏洞)源于错误的错误,例如忘记检查空指针,将空隙指针投射到错误的类型,忘记终止字符串或阵列等。这些都是解决的Zig在类型系统中的问题。关于Zig' Safety Story有更多的说法,但为了简洁起见,我毫无疑问地说,在这种情况下,它更方便地在Zig中写出安全代码而不是C.

方便论证可能在纸上听起来很弱,但是当您考虑全球开发人员社区如何使用工具时,便利是对那里的平均图书馆的质量有形的重要因素,这就是为什么Zig尝试真的很难让它方便做正确的事情。

Hannah:Zig的可移植性是什么意思?我读到你可以使用Zig在Windows上开发一个应用程序,并瞬间也可以获得一个在Mac,Linux甚至且且甚至是速溶的无刀片计算环境上工作的版本,计算@ Edge(内置网址构建) - 所有情况都不改变单行代码?

洛瑞斯:是的! Zig在框中作为交叉编译器工作,即使用于编译C和C ++代码也是如此。这是一个简洁的Zig特征,即其他编程语言可以享受。无论如何,交叉编译很棒,但它也需要一些规划,因为您通常需要与目标操作系统互操作:Zig Build System和标准库旨在涵盖大多数常见平台,并且它们甚至具有A"带上自己的操作系统和#34;让您可以最大限度地从标准库中最大限度地重用用于Zig不正式支持的平台的代码重用。

Zig是一种通用的编程语言,这意味着如果你在你面前看起来像von neumann-ish,tuly-trues-clearing机器,你应该能够用zig舒适地编程它。最近有两种这样的(虚拟)机器有很多兴趣:BPF和Webassembly。不用说,我们支持两者和jakub konka,最近除了涉及Webassembly生态系统的Zig核心开发团队,还向Zig标准图书馆增加了支持(他也谈到了它)。

对于速度计算@ Edge,您可能希望通过Frank Denis Zigly查看,它提供了与特定于平台特定的API的清洁集成。

Loris:Zig中的所有动态内存分配都是显式的。没有全局/隐式分配器,如Malloc在C中,并且预计想要分配动态内存的每个功能都会接受输入中的分配器。这种简单的做法的优势是令人惊讶的:如果你想定位一个没有堆的概念的平台或分配有特殊语义(例如webassembly,例如webassembly),只需通过一个适当的分配器,所有代码都将符合,图书馆符合。包括!例如,这也意味着例如,ZIG库可以在需要竞技场等特定分配方案时优雅配合。

当您遇到内存的内存情况时,所有库以可恢复的方式报告错误(即,而不是惊慌用),此时,如果您有适当的策略,则应用程序可以恢复并继续正常运行。这并不总是容易实现,但是由于这种显式范式,它可以在Web服务器中绘制一个免费的路径,该路径用503错误代码回复,而不是在负载下崩溃。

洛瑞斯:也许!我想这取决于你想要的代码所需的级别。我对学习更多关于编程的更多感兴趣,但鉴于我在生活中的道路,它从来没有意义为我购买建立系统的所有意外复杂性,奇怪的C / C ++ Sofguns和遗留特质。 Zig是我成为一个更圆圆形的软件工程师的最简单方法,也许也可以为您服务。

汉娜:ZIG很难学到吗? Zig开始有什么好的资源?

Loris:Zig是一种简单的语言,如果您在系统编程的基本概念(例如,指针和堆栈)的基本概念中,您将能够在周末富有成效。我们是一个年轻的项目,遗憾的是,祝愿' t' t' t'我的建议是遵循官方网站上的“入门”流程,然后搬到Zig学习,这将指导您通过您需要了解的大部分。此时,您应该加入其中一个现有的ZIG社区,以便当您卡住时,其他Zig程序员可以帮助您......哦,如果您想观看Zig会谈,请退房当然!

我们不时向即将到来的活动,新产品,&amp发送电子邮件; 最新的行业趋势,但只有你想要他们。 选中该框以同意接收这些消息。 通过提交您的请求,您同意您在美国迅速传输的信息,以便处理与我们的隐私政策一致。