
动手学Zig 编程
文章平均质量分 87
《动手学Zig 编程》专栏,是每一位编程爱好者的宝藏🔮!从零基础到高手,我们手把手带你揭秘Zig语言的魅力✨。不管是编程小白还是资深码农,这里都有适合你的学习节奏🎶。跟着我们的步伐,一步步构建你的Zig编程堡垒,解锁无限潜力🚀。快来加入我们,一起动手实践,成为Zig领域的专家吧!#Zig编程
xiaodeshi
I'm Xiao Deshi and I'm a splendid chap. OSS developer for k8e(https://getk8e.com/)
展开
-
【实战进阶】用Zig高效引入外部库,打造专属命令行神器!
我们主要目的就是玩,好处是这个编程语言是社区驱动的,迭代快,语法比 C 要高级点,本身也能替代 C,为以后写高级程序做好储备。后面出错,也不要抱怨,直接社区沟通,让我们一起交流。经过几周的密集练习,我们开始对 Zig 有了感觉了吧。本篇将把这些核心的技能加以混合使用,拿编写命令行程序为目的,把整个流程给大家跑一遍,手把手教导一遍,和大家一起梳理。首先,我们要找到处理命令行程序参数和打印字符串的框架,这里,有技巧。代码量不多,自己多联系几遍,掌握 Zig 编程的乐趣吧。这个类库有了,我们怎么用呢。原创 2024-06-15 16:26:09 · 742 阅读 · 0 评论 -
Zig标准库:最全数据结构深度解析(2)
通过翻阅标准库中的常用数据结构,我们可以熟悉 zig 的数据结构情况,毕竟这些数据结构是组成代码的骨架,不学不行,但是真正能在你日后项目中使用到的并不会多见。但是我们如果不熟悉这些标准库的玩法,后面想用就会非常困难,所以我们要学要看。Zig 数据结构文件有一个特点就是每一个文件后面都是有测试用例,通过这些测试用例我们就可以学会任何一个结构的用法。就这么多,多练多看这些数据结构,可能还需要大概记住这些大标题,日后我们还会用到呢。原创 2024-06-14 20:38:36 · 1347 阅读 · 1 评论 -
Zig标准库:最全数据结构深度解析(1)
当需要传递那些确切大小仅在运行时才知悉,但最大尺寸在编译时已知的小型数组,并且无需分配器(Allocator)的情况下,使用有界数组是非常有用的。这是一种特殊的分配器,仅在测试环境中生效,并具备检测内存泄漏的功能。相比于分别维护缓冲区和活动长度,或者涉及到包含指针的结构,有界数组使用起来更简便也更安全。Zig中广泛使用了std.ArrayList,它充当了一个可以动态改变大小的缓冲区。是一种结构,它包含一个固定大小的数组以及当前正在使用的长度。)来读取和写入其中的数据。的等价物,这就是你想要的。原创 2024-06-14 18:09:52 · 1378 阅读 · 0 评论 -
实战:Zig 编写高性能 Web 服务(2)
我们采用了第三方的类库:mitchellh/libxev,libxev 是一个跨平台、高性能的事件循环库,提供了非阻塞 IO、定时器、事件等的抽象,并且能够在 Linux(io_uring 或 epoll)、macOS(kqueue)以及 Wasm + WASI 上运行。它既可以作为 Zig 语言的 API,也可以作为 C 语言的 API 使用。使用zig init搭建项目的前置工作你先自行搭建好,不会的翻看前面铺垫的章节熟悉zig的项目结构。原创 2024-06-05 15:27:52 · 1651 阅读 · 0 评论 -
实战:Zig 编写高性能 Web 服务(1)
std.http 是 Zig 标准库中用于处理 HTTP 相关操作的类库。以我学习新的编程语言的经历来看,编写web程序是最常见的技术场景,所以熟练掌握 HTTP server/client 服务相关的编程知识是比较重要的。,这是一个安全的分配器,可以防止双重释放(double-free)、使用后释放(use-after-free),并且能够检测内存泄漏。1.2 编写一个HTTP client程序。为了简化,我们将使用。原创 2024-06-03 16:39:58 · 1715 阅读 · 0 评论 -
与C共舞:让编译更顺滑(2)
这意味着zig cc和zig c++不仅可以编译C和C++代码(带有与Clang兼容的参数),而且还可以在遵守Zig的目标三元组参数的同时这样做;您可能希望使用zig translate-c main.c > int_sort.zig将其管道化到文件中(警告Windows用户:在PowerShell中管道化将产生编码不正确的文件——使用您的编辑器来更正这一点)。在packed结构体内部,Zig的整数占用其位宽的空间(即,u12的@bitSizeOf为12,意味着它将在packed结构体中占用12位)。原创 2024-05-31 14:07:21 · 1691 阅读 · 1 评论 -
与C共舞:让编译更顺滑(1)
通过定义这些规则并且不违反它们,ABI被认为是稳定的,这可以用来,例如,可靠地链接多个库、可执行文件或对象,这些都是在单独编译的(可能是在不同的机器上或使用不同的编译器)。这意味着,例如,f32值的地址必须是4的倍数,这意味着f32的对齐是4。这包括参数是如何提供给函数的(即它们去哪里——在寄存器中还是在堆栈上,以及如何提供),以及返回值是如何被接收的。由于我们的x值是一个外部结构体,我们可以安全地将其传递给期望Data类型的C函数,前提是C函数也是用相同的gnu ABI和CPU架构编译的。原创 2024-05-31 13:53:28 · 1144 阅读 · 1 评论 -
实战Zig构建系统:从小白到高手的爆款技能!
Zig 提供了四种构建模式,其中调试模式是默认的,因为它只需要最短的编译时间。DebugYesNoYesYes, SpeedNoYes, SizeNoYes, Speed这些模式可以通过 zig run 和 zig test 命令使用 -O ReleaseSafe、-O ReleaseSmall 和 -O ReleaseFast 参数来使用。原创 2024-05-30 11:37:30 · 1475 阅读 · 0 评论 -
揭秘编程世界的魔法:泛型 Generics 的魅力!♂️✨
但除了匿名和嵌套在一个函数中之外,我们的结构看起来就像我们目前看到的其他结构一样。在我们的这个简单的示例中,这样做没有问题,但对于大型数据结构,编写完整的通用名称可能会变得有点繁琐,尤其是当我们有多个类型参数时(例如,散列(Hashing)映射的键和值需要使用不同的类型)。为了得到一个更典型的范型,我们需要做最后一个改动:我们的函数必须接受一个类型。这是必须的,因为我们的函数返回一个具体的类型,而这个类型需要在编译时就完全确定。我们可以创建更复杂的示例,使用多种类型参数和更先进的算法。原创 2024-05-27 09:32:14 · 471 阅读 · 0 评论 -
深入浅出:探索堆内存与分配器的奥秘
迄今为止,我们所接触到的一切都有个限制,需要预先知道大小。数组总是有一个编译时已知的长度(事实上,长度是类型的一部分)。我们所有的字符串都是字符串字面量,其长度在编译时是已知的。此外,我们所见过的两种内存管理策略,即和,虽然简单高效,但都有局限性。这两种策略都无法处理动态大小的数据,而且在数据生命周期方面都很固定。本部分分为两个主题。第一个主题是第三个内存区域--堆的总体概述。另一个主题是 Zig 直接而独特的堆内存管理方法。即使你熟悉堆内存,比如使用过 C 语言的malloc。原创 2024-05-24 19:40:40 · 1124 阅读 · 0 评论 -
揭秘内存管理:栈内存的奥秘✨
在深入研究堆之前,我们要知道,对于来自垃圾回收语言的开发人员来说,这很可能会导致错误和挫败感。我们一定要掌握栈的概念,归根结底,就是要意识到数据的生命周期。原创 2024-05-24 19:06:37 · 769 阅读 · 0 评论 -
揭秘指针魔法,让你的编程之旅如虎添翼!♂️✨
我们在这里探索的模型是最常见的,有些语言可能只是向开发者隐藏了很多细节,因此也就隐藏了灵活性。这似乎是一个奇怪的默认行为,但它的好处之一是,函数的调用者可以确保函数不会修改参数(因为它不能)。但对于它们来说,最大字段的大小是已知的,这样 Zig 就可以使用它。这就是变量的威力,它们可以引用内存,并包含以有意义的方式理解和操作内存所需的类型信息。由于指针的值是一个地址,复制该值意味着我们得到的是相同的地址。我们将从指针开始讨论,这本身就是一个重要的话题,同时也是训练我们从面向内存的角度来看待程序数据的开始。原创 2024-05-23 17:22:02 · 812 阅读 · 0 评论 -
掌握Zig编程风格,成为开发高手!✨
例如,上面代码中第一个编译错误提示“sum”是一个未被引用的局部常量,而第二个编译错误指出在“add”函数的所有参数中,“b”是一个未被使用的参数。虽然这些情况在初看时可能像是明显的疏漏,但在实际开发中,保留未使用的变量或参数有时是有其合理性的。但是,理解 Zig 自身的命名规范是有益的,因为大部分你需要打交道的代码,如 Zig 标准库,或者其他三方库,都采用了 Zig 的命名规范。除了这三条规则外,一个有趣的交叉规则是,如果一个变量表示一个类型,或者一个函数返回一个类型,那么这个变量或者函数遵循。原创 2024-05-23 16:59:27 · 583 阅读 · 0 评论 -
初探 Zig 编程:新手入门二
虽然我们还未涉及 Zig 语言中更高级的功能,但我们通过两篇文章也覆盖了常见的语法场景。它们将作为一个基础,让我们能够探索更复杂的话题,而不用被语法所困扰。原创 2024-05-22 14:33:12 · 1134 阅读 · 0 评论 -
初探 Zig 编程:新手入门
但是语法概念绝对是新手最需要了解掌握的,虽然内容不多,但是知识点全部都是新知识,需要各位读者朋友耐心一起看。主函数里面运行的 add 函数可以在不申明的情况下直接运行,这个是有点颠覆 C/C++ 程序员的习惯的,需要注意。结构体可以有方法,也可以包含声明(包括其他结构),甚至可能包含零个字段,此时的作用更像是命名空间。从之前的篇章我们知道 Zig 是更好的 C,内置 C 编译器,所以和 C 一样,语句都是用分号。作为程序入口的特殊作用,它只是一个非常基本的函数:不带参数,不返回任何东西(void)。原创 2024-05-21 21:56:51 · 2302 阅读 · 0 评论 -
安装 Zig: 一步到位,开启高效编程新时代!
Zig还没有到 v1.0版本,坦率的说并不能算是生产级别的编程语言,但是创始开发者在采访中说,他并不着急发布 v1.0 版本,他希望通过社区驱动来推动,还是非常落地。所以这也说明这个底层系统语言还有很大的空间等待我们去挖掘。当然大家也别被吓着,Zig已经在国外多家创业公司被用于C编译、游戏、数据库、Web服务等开源软件的开发中,就等你一起来编程了。原创 2024-05-20 19:28:21 · 1330 阅读 · 0 评论 -
1. 给你一个学习 Zig 理由
因为 Zig 社区是定义为非中心化社区方式,任何地方都可以自发组建社区并学习 Zig,所以在中文区,我们并不会出现什么官方社区,所有社区都可以被认为是官方的,只要你保持好奇心,并热爱编程。但是作为开发者,我不太满意的地方就是 golang 还是太高级了,并没有让我觉得趁手的机会能采用更底层的编程语言来让这个应用分发平台的构建更纯粹,更快。这个当然是我编写此专栏的目的。这个就是我能给你的理由,它的设计哲学是让开发者不被语法糖所困扰,聚焦业务实现,所以 Zig 的语言设计是简单并唯一确认实现的。原创 2024-05-18 13:47:45 · 950 阅读 · 0 评论