编程语言Zig:简单、安全、高效的系统级编程语言 logo 引言 在计算机编程的世界中,有许多编程语言可供选择。每种语言都有自己的特点和应用领域。...在这篇博客中,我们将介绍一种新兴的编程语言,它就是Zig。Zig是一种系统级编程语言,旨在提供简单、安全和高效的编程体验。...在本篇博客中,我们将深入探讨Zig的特点、学习资源以及它的应用领域。 摘要 Zig是一种新兴的系统级编程语言,其设计目标是简单、安全和高效。它的语法类似于C语言,但在类型安全和错误检测方面更加强大。...语言特性 Zig的语法类似于C语言,但在类型安全和错误检测方面更加强大。它支持静态类型检查、模块化编程、自动内存管理和编译时错误检测等特性。Zig鼓励显式编程,强调代码的可读性和可维护性。...社区支持:加入Zig的社区,例如访问官方论坛或参与在线讨论。在社区中与其他Zig开发者交流经验和知识,获取帮助和反馈。
ZIG语言的设计目标是提供高性能、简洁性和模块化,同时避免许多其他语言的常见错误和陷阱。本文将探讨ZIG是如何实现这些目标的。 在编程语言发展的历史长河中,我们见证了许多编程语言的诞生与消亡。...ZIG是一种新兴的编程语言,由Andre "复兴瑞"内侧在他的个人项目"无主之地"的音效编辑器中创造。后来,该语言发展成为一个独立的开源项目。...ZIG语言的目标是提供高性能、简洁性和模块化,同时避免许多其他语言的常见错误和陷阱。 性能 ZIG语言追求高性能,其设计旨在与C和C++的执行速度相匹配。...这主要通过低级语言特性、静态类型和优化编译来实现。然而,与C和C++不同,ZIG语言避免了直接操作硬件和手动内存管理,从而简化了开发过程并降低了出错的可能性。...为了实现这些目标,ZIG采用了低级语言特性、静态类型和优化编译等技术,同时也引入了独特的抽象概念和方法,如所有权系统和范围检查器。这些特点使得ZIG在性能和可靠性方面具有很大的优势。
Zig 的吉祥物“零号(Zero the Ziguana)” 编程语言专家曾对 Zig 编程语言的创造者 Andrew Kelley 说,在编译时运行代码是个蠢主意。...以这段简单的函数为例,在 a 和 b 两个数之间取最大值。不使用泛型或 comptime 代码的话,我们就需要将这个函数的具体变量类型写死,比如这里用的 Zig 中 32 位整数 i32 。...在 maximum 函数在被调用时,将默认 anytype 为提供的参数类型。请注意,Zig 不是动态编程语言,在用不同参数类型调用 maximum 时,Zig 的编译情况也会不同。...因此我们需要使用 switch 条件语句找到具体是在使用.Int 还是.Float 字段。|info|语法在 Zig 中是用来解包数值的,在这里我们用它来找描述类型的结构。...C/C++、Java 或 Swift 等语言中,我们通常可以从输入参数中推断变量类型。
C++ 的过度复杂:多范式、模板元编程、异常、虚表、ABI 兼容性……开发者的精力往往被语言特性消耗,而非业务逻辑。 于是,Zig 在 2015 年作为一门实验性语言诞生了。...消灭隐式行为:C 语言中充斥着隐式类型转换,而 Zig 选择 几乎完全取消隐式转换,一切都必须显式表达。 错误作为“一等公民”:不再依赖含糊不清的整数返回码,Zig 引入了 !...2.1 显式性:拒绝“惊喜” Zig 的核心信条是:永远不要猜测语言在背后帮你做了什么。 在 Zig 中: 没有隐式的控制流(不会自动调用析构函数,除非你写了 defer)。...\n", .{}); } 3.2 变量与类型推导 Zig 是一门强类型语言,但支持推导。...在 C 中未初始化的数组包含垃圾值。在 Zig 中显式写 undefined 告诉编译器:“我知道这里没初始化,我稍后会覆盖它”。
我们找到了两种截然不同的方法: 在并行区域或现有区域中的独立集群提供基本的 arm64 支持,并在那里运行测试(实验质量); 让所有的核心基础设施都知道现在不止一种架构,然后像生成其他 SKU 一样生成...Bazel 与 Zig 对于 Bazel 来说,只有一个 C++ 工具链(在本例中是 Zig SDK)是不够的:它还需要一些粘合代码,一个工具链配置。...Uber 自 2022 年 4 月以来一直在运行 Zig 生成的二进制文件,因此我们对 Zig 信心满满。...Uber 有使用 Zig 语言吗 可以说有,也可以说没有。例如,ermet_cc_toolchain 中的启动器是我们用 Zig 编写的。...尽管如此,我们还没有将用 Zig 编写的生产应用程序引入到我们的代码库中(虽然工具链已经完全设置好了),因为目前公司中只有少数人知道这门语言。
就像 GNU C 一样,默认情况下,Zig 会为当前目标(CPU 和操作系统)生成二进制文件,因此上述命令在我的计算机上为我生成了 x86 Linux 二进制文件。...作为现代语言,布尔类型也得到了支持: var initialized: bool = true; 您可以将字符存储在无符号字节(8 位整数)中,如下所示: const std = @import("std...然后,Zig 将使用 comptime 类型将它们存储起来,保证编译时评估: Zig 还支持原生 C 类型(即 c_char、c_int 等)。可以在官方文档的表格中查看所有支持的类型。...在这里,我们使用了 @TypeOf() 内置函数来获取变量的类型。您可以在官方文档中浏览所有支持的内置函数。...没有覆盖的一些(非常重要的)内容包括: 测试(Zig使得编写测试非常容易) 标准库 内存模型(Zig在分配器方面没有倾向性) 在本教程中,我们学习了Zig编程语言开发背后的概念、目标和设计技术。
作为一名Go开发者,我对Zig及其工具链的能力尤为感兴趣。在研究Zig时,发现这两种语言(Zig和Go)在某些方面有着共同的特性。...在研究Zig时,发现这两种语言(Zig和Go)在某些方面有着共同的特性。在这篇博文中,将重点介绍作为Go程序员,对Zig感兴趣的一些特性。...Zig测试 在Zig中,测试是语言的关键性能力,使用`test`关键字声明: test "test that 1 + 1 equals 2" { const result = 1 + 1;...assert(result == 2); } 使用`zig test`命令运行源代码中的测试,在标准库中,测试大多跟源代码处于同一文件。...编译时执行的元编程 泛型 在 Zig 中,comptime提供了对类型值的访问,可以像普通数据值一样存储和传递这些类型值。
自那时起,BOF变得非常流行,因此也衍生出了在Cobalt Strike的Beacon之外的其他环境中启动或执行BOF的需求。...应用程序完美集成; 4、增加了用Zig编程语言编写BOF的能力,该语言的所有功能和丰富的标准库都可以用于BOF; 5、异步BOF执行,能够在单独的线程中启动更耗时的BOF; 6、BOF进程注入,通过将其注入新进程来启动风险更大的...为此,我们需要在当前目录中下载Zig的tarball文件,将该目录路径添加到PATH环境之后,构建项目代码就非常简单了: cd bof-launcher zig build 构建生成的文件将存储在...ig-out/bin和zig-out/lib目录中。...bofContextGetOutput(context, NULL); if (output) { // 处理BOF输出 } bofContextRelease(context); 工具使用 在开发和调试过程中
因此,必须将其作为一种新类型的语句添加到Zig中。我们决定将 pragma 实现为特殊的注释,这与 Fortran 中的支持方式类似。...第二个挑战是,在预处理阶段缺乏语义上下文(例如变量类型及其用途),这一点在III-B3中有更详细讨论。 将预处理器纳入 Zig 编译器的一个核心部分,具有以下几个优点。...*anyopaque指针,这是 Zig 中等同于 C 的void *的类型。这三组参数指向包含firstprivate、shared和reduction子句变量的结构体。 在分解函数中,一旦?...对于private变量,只需在分解函数中简单定义。 Reduction 操作更为复杂,通过使用 Zig 的标准原子类型创建一个值来实现。...通过增强编译器以支持 OpenMP 循环指令,我们提供了在 Zig 中基于 pragma 的共享内存并行性的能力,并证明了其缩放性与其他语言相当。此外,对于 HPC 工作负载,性能甚至超过原有语言。
但细想之下就会发现,其实我们并不苛求程序 100% 正确——至少在大多数领域如此。 现实中几乎所有程序都有缺陷,但依然能正常运行。...(另一点在于:容错分布式系统中,存储不能视为独立黑盒——因为它本身也会故障)。 • 显式上限:没有随便的 u32——所有数据在系统边界都经过严格数值检查。...但多数案例变得更简单,因为不需要用类型系统编程。Zig 语言极其简朴:没有闭包(需要就手动打包胖指针);表达能力旨在生成精准汇编,而非高度抽象的源代码。...正如 Zig 创始人 Andrew Kelley 所言,Zig 是「生成机器码的领域特定语言(DSL)」。 Zig 强烈偏好显式资源管理。...思考 虽然在纠结学习哪门语言(Rust 还是 Zig),但是这个周末我还是在思考一个问题:AI 时代的编程可能会颠覆传统的编程的思考方式?
编译时反射和类型系统 Zig:Zig 提供了编译时类型反射,允许在编译时查询类型信息,并根据这些信息生成代码。Zig 的类型系统与元编程紧密结合,使得实现泛型和其他复杂结构更加灵活和简洁。...具有阶段区分的语言可能会为类型和运行时变量设置单独的命名空间。在优化编译器中,阶段区分标记了哪些表达式可以安全删除的边界。 理论 阶段区分通常与静态检查结合使用。...在 Zig 中,类型是 `type` 类型的值,仅在编译时可用。对于下一个例子,我将从标准库中提取一些代码,展示这种功能的更有用的用法。...如果看一下 sqrt 的签名,它在应声明返回类型的地方调用了一个函数。在 Zig 中,这是允许的。原始代码实际上内联了一个 if 表达式,但出于更好的可读性,我将其移到了一个单独的函数中。...通过这些功能,Zig 的元编程提供了灵活而强大的编译时能力,允许在编译阶段实现类型检查、类型推断和代码生成等高级功能。 Zig仍然是一种新语言,ZSF仍在定期实现和测试更多功能。
Zig 是一种命令式、通用、静态类型、编译型系统编程语言和工具链,用于维护健壮、优化和可重用的软件。 a. 健壮:即使在内存不足等极端情况下,行为也是正确的。 b....在 Ziglearn 的第 3 章中,详细解释了文档生成过程: Zig 编译器自带自动文档生成功能。...你可以通过在 zig build-{exe, lib, obj} 或 zig run 命令中添加 -femit-docs 参数来调用这个功能。生成的文档会保存在 ....我们觉得在仓库中维护 docs/ 文件夹不太合适,所以把它添加到了 .gitignore 中。我们想要的是在推送提交到主分支时,能够自动生成文档并部署它。...此工作流程中的 TARGET 变量由两部分组成: CPU 架构(例如 x86_64) 操作系统(例如 linux) 总结 在本教程中,我们学习了如何使用 Zig 编程语言构建一个简单的 HTTP 服务器
其他常规结论则包括: 过去一年收入最高的语言是Zig; 最受欢迎的Web框架是Phoenix; PostgreSQL终于取代MySQL成为最受欢迎数据库; 云计算平台中,AWS仍然强势第一,使用率是Azure...编程语言:工资最高的变了 老规矩,还是先从编程语言看起。 最流行的还是JavaScript,它已经连续11年霸榜。 Python今年则超过SQL,重新回到第三的位置。...但要说最受喜爱的编程语言,还得看Rust,有超过80%的使用者表示希望明年继续。 相比之下,最不受欢迎的是MATLAB,只有不到20%的人明年继续。 最赚钱的语言是哪个? Zig。...我们还在前十中看到了TF和Pytorch的身影,不过相比往年,前者只是略微优先了。...不过,在还在学习编码的人群中,大家还是用npm或Pip更多一些。 有意思的是,最受欢迎的开发工具其实是Cargo,它在流行度排名中都未进前十,是一位妥妥的潜力股。
为了实现类似Rust的内存安全性,Zig提供了促进内存安全的机制,例如: 严格的编译时检查 用于处理潜在空值的可选类型 带有Error类型的明确错误处理 内置分配器的增强内存分配 这些机制不会像Rust...那么Zig呢?它的哲学包括: 与C和C++代码轻松整合 生成不依赖系统依赖项的独立二进制文件 轻松的跨平台开发 快速的编译时间 接下来,我们将看一看Zig的优势和劣势,之后再看它的用例。...与Rust一样,Zig也有一些更为专业的使用场景: 游戏开发,因支持高性能游戏引擎、能够实时模拟 在嵌入式系统和物联网中,用于编程微控制器、传感器和其他资源受限设备 在密码应用中,用于实现加密算法、数字签名...让我们从它们的共同之处开始: 内存安全性:Rust和Zig都优先考虑内存安全性,并通过严格的编译器检查、静态类型和适用于每种语言的特殊规则来防止常见的编程错误。...Zig: 性能 客观来看,在Rust和Zig之间,并没有绝对性能更好的语言。Rust在特定应用中可能会胜过Zig,而Zig在其他方面可能会超越Rust。
这一类别中最值得注意的是 Zig 和 Rust,我们最近讨论过它们。Zig 是一种快速、高性能的低级、编译、静态类型系统编程语言,旨在成为 C 的最终替代品。Zig 声称比 C 更快、性能更高。...Zig 由 Andrew Kelley 设计,于 3 月份首次发布2016年。 Rust 是一种静态编译、强类型、多范式、通用编程语言,旨在构建低级内存安全应用程序。...在今天的文章中,我们将并排研究这两种编程语言,试图找出其中哪一种是最终的系统编程语言。 我们将根据以下几点考虑它们。...在 Zig 中,不允许指针指向任何内容,这与 C 形成鲜明对比,在 C 中可以有空指针,相反,Zig 使用选项类型,它只是单独的类型,用于指示可选为空的数据。...如果您使用过任何类似 C 的语言,那么 Zig 的学习曲线就会显着缩短。Zig 尝试保留 C 的大部分现有语法,只在必要时引入新语法。让 Zig 变得对初学者友好。
Zig语言最为目前新兴语言,正是热度不断上升的阶段。我们知道Zig 作为一门以高性能、底层控制为核心的系统编程语言,它在爬虫开发中具备独特优势,尤其适合需要极致性能、精细内存管理或嵌入式部署的场景。...今天我利用我所学的知识综合分析下Zig的优劣势,如有不对望各位指点:一、Zig 用于爬虫的核心优势1、、高性能与低开销 Zig 生成的二进制文件极小(可缩至 4KB),运行时无垃圾回收(GC)开销,适合高并发爬取...2、安全的网络与数据处理编译时整数溢出检查、可选类型(?T 替代空指针)减少内存错误风险。...T 类型),需大量 try/catch,代码显冗长。3、并发模型较原始依赖协程(async/await)而非线程,异步逻辑需自行调度,高并发下调试复杂。...如果大家在追求开发效率,Go/Python 更优;若深耕系统级控制,Zig 是值得投资的潜力语言,尤其在替代 C 的演进路径上优势显著。具体选择那种语言得根据自身项目需求来决定。
这份zig简明教程适合已经有编程基础知识的同学快速了解zig语言,同时也适合没有编程经验但是懂得善用搜索引擎的同学,该文章详细介绍Zig编程语言各种概念,主要包括基础知识、函数、结构体、枚举、数组、切片...{x}); } 在某些情况下,如果 Zig 可以推断出类型信息,才允许你省略类型信息。...在编译时,std.debug.print会找出元组中参数的类型,并生成一个针对你提供的参数字符串的版本,这就是为何Zig知道如何将打印的内容变得漂亮的原因。...你可以通过在前面声明类型并提供值列表来初始化它们,同时可以通过数组的len字段访问它们的长度。 注意:Zig中的数组也是从零开始索引的。...Zig 中已经不存在了,并且在 Zig 0.12 版本中也可能不会出现。)
Part1 引言 Go语言的一个优势是能够生成静态链接的可执行程序。但是,这并不是说默认情况下编译出来的Go可执行程序都是静态链接的。在有些情况下,需要额外的操作才能实现。...输出为空,表明helloworld中没有任何未定义符号。 Part4 DNS和用户组 在Unix机器上,当满足特定条件时,Go语言标准库会借助libc实现DNS和用户组功能。...当cgo启用时(默认情况下,在Unix系统下 CGO_ENABLED 值为1,表示默认开启)。Go语言标准库中的net包会调用C语言库实现DNS查找功能。...Part7 使用Zig作为C编译器 Zig 是一种新的系统编程语言,与Go语言类似,它也提供了一系列编译工具即Zig工具链,该工具链包含有Zig编译器、C/C++编译器、链接器和用于静态链接的libc。...Go语言中有一个提案,即在 go build 命令中添加一个 -static 标志,表明将程序编译为静态类型,目前还未实现。
现在,Uber 只在 Go Monorepo 中使用 bazel-zig-cc,但计划尽可能地将zig cc推广到其他需要 C/C++ 工具链的语言。...在后端代码中使用其他语言的情况很少。 我们的 Go Monorepo 比 Linux 内核还要大,有几千名工程师在开发和维护。总而言之,很大。 Uber 是如何使用 Zig 的?...Abhinav Gupta 是我们的来自 Go 平台团队的同事,其实他描述得比我好:我理解我们只是在使用 Zig 的 C 工具链,而不是将其作为语言使用。...所以,如果需要 CGo 的话(我们的许多服务都需要),我们就无法在 Mac 上编译生成 Linux 上的可执行文件。这可以通过...... 而不是交叉编译来解决。...我集成了zig ar,完善了文档,并 在 Zig 邮件列表中宣布了我创建的 bazel-zig-cc 分叉。至此,它对我的小项目是有效的。
这个版本重点对其他语言的支持做了一些改进,比如新增了fortran的编译支持,zig语言的实验性支持,另外对golang/dlang增加了第三方依赖包支持以及交叉编译支持。...") 至于为啥windows不支持呢,详情见我之前提给zig的issues,#5825 而动态库不支持,也是因为我躺了一些坑(zig生成的动态库会自动追加.0.0.0),详情见:issue 5827...更多例子见:Zig Examples Go依赖包和交叉编译支持 新版本xmake对go构建支持继续做了一些改进,比如对go的交叉编译也进行了支持,例如我们可以在macOS和linux上编译windows...关于这一点,最新的vs2019预览版中,微软终于对齐做了改进,通过新的/sourceDependencies xxx.json编译选项,可以更好的输出includes依赖信息,方便多语言环境下的解析提取...Xcode插件生成支持 目前,我们还没有时间去自己实现xcode工程的生成,但不代表不支持,因为xmake支持生成cmakelists.txt文件,而cmake是支持xcode工程文件生成的,在官方还没有实现之前