当前位置:首页 > 科技  > 软件

作为一名 Go 程序员,我为啥更喜欢用 Zig?

来源: 责编: 时间:2023-12-06 09:20:00 398观看
导读作者 | Vladimir Vivien编译 | 如烟出品 | 51CTO技术栈(微信号:blog51cto)Zig 是一种比较新的编程语言,于 2016 年首次推出。Zig 社区将其描述为“一种用于维护稳固的、可优化和可重用软件的通用编程语言”。看似一句简单

作者 | Vladimir Vivien5mj28资讯网——每日最新资讯28at.com

编译 | 如烟5mj28资讯网——每日最新资讯28at.com

出品 | 51CTO技术栈(微信号:blog51cto)5mj28资讯网——每日最新资讯28at.com

Zig 是一种比较新的编程语言,于 2016 年首次推出。Zig 社区将其描述为“一种用于维护稳固的、可优化和可重用软件的通用编程语言”。5mj28资讯网——每日最新资讯28at.com

看似一句简单的描述,却隐藏着远大的抱负。Zig被看作是可与C语言一较高下的编程语言。此外,Zig 也是一个编译器工具链,可以作为现有 C 编译器的替代品。5mj28资讯网——每日最新资讯28at.com

作为一个使用 Go 的程序员,我发现 Zig 及其工具链提出的主张很有意思。我在研究 Zig 时,发现这两种语言(Zig 和 Go)有一些共同之处。接下来,我将详细介绍作为 Go 程序员,我觉得 Zig 有趣的功能。5mj28资讯网——每日最新资讯28at.com

1、简单

这两种语言都采用了简单的设计理念,执行过程很顺畅,大大提高了工作效率。Zig 不支持宏、预处理器或运算符重载。5mj28资讯网——每日最新资讯28at.com

Go 是一种托管内存语言,并且运行时有特别的方法来处理内存的分配 / 释放。但 Zig 始终恪守“无隐藏控制流”的口号,没有自动内存管理,而是提供 API,让程序员通过其标准库手动管理内存。5mj28资讯网——每日最新资讯28at.com

2、强类型

作为一种为系统编程而设计的语言,Zig围绕其类型系统提供了大量以安全性和C ABI兼容性为中心的特性。虽然我无法充分介绍所有内容,但可以提出一些你可能会感兴趣的亮点:5mj28资讯网——每日最新资讯28at.com

  • 有符号/无符号整数(预设大小从 8 位到 128 位)
  • 任意大小的有符号/无符号整数(即i77 位 int)
  • 浮点(从 16 位精度到 128 位精度)
  • 切片和数组(即 []u8{ ‘h’, ‘i’, ‘!’}或[4]i32{ 1, 2, 3, 4 })
  • UTF-8 编码的字符串文字,存储为以 null 结尾的字节数组
  • 具有 C ABI 兼容性的功能丰富的结构类型
  • 具有隐式/显式序数值的枚举和对方法的支持
  • 用于存储多种类型选择的值的联合
  • 支持使用向量的并行运算
  • 传统指针和带有切片表达式的多项指针

3、处理错误

Zig 中的错误处理效果非常好。它是 try-catch-exception 语义和 Go 错误值之间的交叉。那么它是如何运行的?5mj28资讯网——每日最新资讯28at.com

首先,所有 Zig 错误都是必须分配和处理的值(否则将导致编译时错误)。Zig 错误使用error这个关键字声明为一组值:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

使用二进制运算符 !,可以将Zig错误值与正常类型的值组合起来,形成可由函数返回的 Union 类型。5mj28资讯网——每日最新资讯28at.com

例如,下面的函数可以返回类型为 error 或 u32 的值,返回类型为 !u32(或显示为DigitError!u32):5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

此外,Zig 用一个非常有意思的结构来处理错误。与其他语言中的异常处理类似,Zig 使用 catch 关键字将错误处理代码块附加到函数调用中,如果返回错误值,则该函数调用将被执行,如下所示:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

Zig 还支持使用关键字 try 在调用堆栈中传播错误的机制。例如,addAll 的功能是如果返回或继续执行其他操作,下面的函数将返回错误。5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

最后,Zig 可以使用 if-else-switch 来更精确地过滤和处理错误结果:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

4、Zig测试

在 Zig 中,源代码测试是一流的组成部分,在该语言中拥有自己的test关键字。测试的声明方式与顶级函数类似,使用 test 关键字,后跟描述和代码块:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

与go test一样,工具链附带了zig test命令,用于在源代码中执行测试:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

5、Zig运行

与 go run 类似,Zig 提供了一个更便捷的 zig run 命令,结合了编译和运行 Zig 源代码的步骤:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

6、延迟

与Go类似,Zig使用 defer 来简化资源管理,以便在当前执行的范围块结束时执行清理操作,例如释放资源。5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

7、Comptime

comptime是该语言中另一个有趣的概念,在大多数其他语言中都没有。Zig 没有单独的元语言或宏系统。但Zig 提供了一种巧妙的解决方案,使用comptime(或编译时)的概念将其源代码的可编程性扩展到编译阶段。5mj28资讯网——每日最新资讯28at.com

通过comptime,Zig 可以在编译时实现多种功能:5mj28资讯网——每日最新资讯28at.com

  • 在编译时解析的变量和表达式
  • 基于编译时值运行的函数
  • comptime 编译期间选择性执行的代码块
  • 编译时执行的元编程

8、通用性

当然,Zig 编译时可编程性带来结果是泛型类型和数据结构的实现。在 Zig 中,comptime 提供对可作为常规数据值存储和传递的类型值的访问。5mj28资讯网——每日最新资讯28at.com

这使得创建采用类型参数的函数成为可能,如下所示:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

由于 comptime 类型值被视为任何类型,因此 Zig 允许使用它们构建通用数据结构。例如,MakeList 使用 comptime 类型信息返回在编译时构建的结构:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

9、Zig可作为C(交叉)编译器

Zig 工具链具有全功能 C 编译器,这意味着你可以使用 Zig 来替代当前的 C 编译器工具链。给出以下 hello.c 源代码文件:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

Zig 可以使用以下命令将源代码编译为可执行二进制文件:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

10、Zig 和 C 交叉编译

Zig 可以轻松交叉编译代码(无论是 C 还是 Zig),并且汇集了所有必要的工具和库,以确保你可以针对其支持的任何架构。5mj28资讯网——每日最新资讯28at.com

例如,Zig 可以将之前的 C 源代码交叉编译为针对 linux 的静态二进制文件(使用 musl):5mj28资讯网——每日最新资讯28at.com

11、Zig 和 CGo 交叉编译

事实证明,Zig 的C交叉编译支持对于交叉编译支持Go的Go源代码非常有用。例如,在 add.c 中添加以下 C 函数:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

我们用Go来调用它:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

假设在 MacOS 构建代码,我们可以通过命令 zig cc 来使用 Zig 的 C 编译器,将 C 代码交叉编译为链接到 Go 对象文件的目标文件,从而为在 x86 架构上运行的 Linux 构建静态二进制文件:5mj28资讯网——每日最新资讯28at.com

图片图片5mj28资讯网——每日最新资讯28at.com

要实现此功能,你只需在工作站上安装 Zig 工具链,无需其他辅助工具。5mj28资讯网——每日最新资讯28at.com

虽然这看起来没什么大不了的,但请记住,交叉编译支持 CGo 的静态二进制文件会更复杂(在不使用 Zig 的情况下)。通常需要几个步骤来准备构建环境,其中包含交叉编译目标平台所需的软件包(请参阅此处)。5mj28资讯网——每日最新资讯28at.com

结论

Zig 够简单、够强大、够安全又兼备 C 兼容性,备受开发人员青睐 。无论你是在为新项目寻找语言,还是只是想扩展编程能力,Zig 都是值得探索的很棒的选择。5mj28资讯网——每日最新资讯28at.com

参考链接:5mj28资讯网——每日最新资讯28at.com

https://medium.com/@vladimirvivien/things-i-like-about-zig-as-a-go-programmer-75eb02aab00f5mj28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-38525-0.html作为一名 Go 程序员,我为啥更喜欢用 Zig?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 构建强大REST API的十个最佳实践

下一篇: PyCharm编辑器结合Black插件,轻松实现Python代码格式化

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top