开封做网站睿艺美,专业网站建设分类标准,互联网站建设机构,做数学网站Zig 是一种比较新的编程语言#xff0c;于 2016 年首次推出。Zig 社区将其描述为“一种用于维护稳固的、可优化和可重用软件的通用编程语言”。
看似一句简单的描述#xff0c;却隐藏着远大的抱负。Zig被看作是可与C语言一较高下的编程语言。此外#xff0c;Zig 也是一个编…Zig 是一种比较新的编程语言于 2016 年首次推出。Zig 社区将其描述为“一种用于维护稳固的、可优化和可重用软件的通用编程语言”。
看似一句简单的描述却隐藏着远大的抱负。Zig被看作是可与C语言一较高下的编程语言。此外Zig 也是一个编译器工具链可以作为现有 C 编译器的替代品。
作为一个使用 Go 的程序员我发现 Zig 及其工具链提出的主张很有意思。我在研究 Zig 时发现这两种语言Zig 和 Go有一些共同之处。接下来我将详细介绍作为 Go 程序员我觉得 Zig 有趣的功能。 1、简单
这两种语言都采用了简单的设计理念执行过程很顺畅大大提高了工作效率。Zig 不支持宏、预处理器或运算符重载。
Go 是一种托管内存语言并且运行时有特别的方法来处理内存的分配 / 释放。但 Zig 始终恪守“无隐藏控制流”的口号没有自动内存管理而是提供 API让程序员通过其标准库手动管理内存。
2、强类型
作为一种为系统编程而设计的语言Zig围绕其类型系统提供了大量以安全性和C ABI兼容性为中心的特性。虽然我无法充分介绍所有内容但可以提出一些你可能会感兴趣的亮点:
有符号/无符号整数预设大小从 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 错误值之间的交叉。那么它是如何运行的
首先所有 Zig 错误都是必须分配和处理的值否则将导致编译时错误。Zig 错误使用error这个关键字声明为一组值 使用二进制运算符 !可以将Zig错误值与正常类型的值组合起来形成可由函数返回的 Union 类型。
例如下面的函数可以返回类型为 error 或 u32 的值返回类型为 !u32(或显示为DigitError!u32): 此外Zig 用一个非常有意思的结构来处理错误。与其他语言中的异常处理类似Zig 使用 catch 关键字将错误处理代码块附加到函数调用中如果返回错误值则该函数调用将被执行如下所示 Zig 还支持使用关键字 try 在调用堆栈中传播错误的机制。例如addAll 的功能是如果返回或继续执行其他操作下面的函数将返回错误。 最后Zig 可以使用 if-else-switch 来更精确地过滤和处理错误结果 4、Zig测试
在 Zig 中源代码测试是一流的组成部分在该语言中拥有自己的test关键字。测试的声明方式与顶级函数类似使用 test 关键字后跟描述和代码块 与go test一样工具链附带了zig test命令用于在源代码中执行测试: 5、Zig运行
与 go run 类似Zig 提供了一个更便捷的 zig run 命令结合了编译和运行 Zig 源代码的步骤 6、延迟
与Go类似Zig使用 defer 来简化资源管理以便在当前执行的范围块结束时执行清理操作例如释放资源。 7、Comptime
comptime是该语言中另一个有趣的概念在大多数其他语言中都没有。Zig 没有单独的元语言或宏系统。但Zig 提供了一种巧妙的解决方案使用comptime或编译时的概念将其源代码的可编程性扩展到编译阶段。
通过comptimeZig 可以在编译时实现多种功能
在编译时解析的变量和表达式基于编译时值运行的函数comptime 编译期间选择性执行的代码块编译时执行的元编程
8、通用性
当然Zig 编译时可编程性带来结果是泛型类型和数据结构的实现。在 Zig 中comptime 提供对可作为常规数据值存储和传递的类型值的访问。
这使得创建采用类型参数的函数成为可能如下所示 由于 comptime 类型值被视为任何类型因此 Zig 允许使用它们构建通用数据结构。例如MakeList 使用 comptime 类型信息返回在编译时构建的结构 9、Zig可作为C交叉编译器
Zig 工具链具有全功能 C 编译器这意味着你可以使用 Zig 来替代当前的 C 编译器工具链。给出以下 hello.c 源代码文件 Zig 可以使用以下命令将源代码编译为可执行二进制文件 10、Zig 和 C 交叉编译
Zig 可以轻松交叉编译代码无论是 C 还是 Zig并且汇集了所有必要的工具和库以确保你可以针对其支持的任何架构。
例如Zig 可以将之前的 C 源代码交叉编译为针对 linux 的静态二进制文件使用 musl
11、Zig 和 CGo 交叉编译
事实证明Zig 的C交叉编译支持对于交叉编译支持Go的Go源代码非常有用。例如在 add.c 中添加以下 C 函数 我们用Go来调用它 假设在 MacOS 构建代码我们可以通过命令 zig cc 来使用 Zig 的 C 编译器将 C 代码交叉编译为链接到 Go 对象文件的目标文件从而为在 x86 架构上运行的 Linux 构建静态二进制文件 要实现此功能你只需在工作站上安装 Zig 工具链无需其他辅助工具。
虽然这看起来没什么大不了的但请记住交叉编译支持 CGo 的静态二进制文件会更复杂在不使用 Zig 的情况下。通常需要几个步骤来准备构建环境其中包含交叉编译目标平台所需的软件包(请参阅此处)。
结论
Zig 够简单、够强大、够安全又兼备 C 兼容性备受开发人员青睐 。无论你是在为新项目寻找语言还是只是想扩展编程能力Zig 都是值得探索的很棒的选择。