zoop 实现原理分析
2024-08-12 在 博客
zoop 是什么 zoop 是 zig 的一个 OOP 解决方案,详细信息可以看看 zoop官网。 为什么不用别的 OOP 语言 简单的说,是我个人原因,必需使用 zig 的同时,还一定要用 OOP,所以有了 zoop。 zoop 入门 类和方法 1 2 3 4 pub const Base = struct { pub usingnamespace zoop.Fn(@This()); mixin: zoop.Mixin(@This()), } 2-3行是一个struct成为zoop类必需的两 …
Zig 分配器的应用
2024-06-16 在 博客
原文地址: https://www.openmymind.net/Leveraging-Zigs-Allocators/ 假设我们想为Zig编写一个 HTTP服务器库。这个库的核心可能是线程池,用于处理请求。以简化的方式来看,它可能类似于: 1 2 3 4 5 6 7 fn run(worker: *Worker) void { while (queue.pop()) |conn| { const action = worker.route(conn.req.url); …
HashMap 原理介绍下篇
2024-06-11 在 博客
在第一部分中,我们探讨了六种 HashMap 变体之间的关系以及每种变体为开发人员提供的不同功能。我们主要关注如何为各种数据类型定义和初始化 HashMap,并讨论了当 StringHashMap 或 AutoHashMap 不支持的类型时使用自定义 hash 和 eql 函数的重要性。在这篇文章中,我们将更深入地研究键和值的存储、访问方式以及我们在它们生命周期管理中的责任。 Zig 的哈希表内部采用两个切片结构:一个用于存放键(key),另一个用于存储对应的值(value)。通过应用哈希函数计 …
HashMap 原理介绍上篇
2024-06-10 在 博客
阅读这篇文章的前提是了解 Zig 的范型实现 如大多数哈希映射实现一样,Zig 的 std.HashMap 依赖于两个函数:hash(key: K) u64 和 eql(key_a: K, key_b: K) bool。其中,哈希函数接收一个键并返回一个无符号的64位整数作为哈希码。相同的关键字总是会返回相同的哈希码。然而,为了处理不同的键可能生成相同哈希码的情况(即碰撞),我们还需要 eql 函数来确定两个键是否相等。 这是一些标准做法,但Zig的实现有一些特定的细节值得关注。尤其是考虑到标 …
Zig 标准库中的实现接口的惯用法与模式
2024-05-24 在 博客
原文链接: https://zig.news/yglcode/code-study-interface-idiomspatterns-in-zig-standard-libraries-4lkj 引言 在 Java 和 Go 中,可以使用“接口”(一组方法或方法集)定义基于行为的抽象。通常接口包含所谓的虚表(vtable) 以实现动态分派。Zig 允许在结构体、枚举、联合和不透明类型中声明函数和方法,尽管 Zig 尚未支持接口作为一种语言特性。 Zig 标准库应用了一些代码习语或模式以达到类似 …
build.zig.zon 中的依赖项哈希值
2024-05-07 在 博客
原文地址:build.zig.zon dependency hashes 引言 作者 Michał Sieroń 最近在思考 build.zig.zon 中的依赖项哈希值的问题。这些哈希值都有相同的前缀,而这对加密哈希函数来说极其不同寻常。习惯性使用 Conda 和 Yocto 对下载的压缩包运行 sha256sum,但生成的摘要与 build.zig.zon 中的哈希值完全不同。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .dependencies = .{ …
0.12.0 Release Party 回顾
2024-04-27 在 社区新闻
2024-04-20,0.12.0 终于发布了,历时 8 个月,有 268 位贡献者,一共进行了 3688 次提交!下面是它的 Release notes: https://ziglang.org/download/0.12.0/release-notes.html ZigCC 对这个文档进行了翻译、整理,供需要升级适配的朋友参考: 0.12.0 升级指南 0.12.0 版本说明 为了庆祝这一盛事,ZigCC 决定在 2024-04-27 举行了一次线上的发行聚会,主要来讨论这次的版本,下面是 …
通过 Zig,学习 C++ 元编程
2024-04-06 在 博客
尽管 Zig 社区宣称 Zig 语言是一个更好的 C (better C),但是我个人在学习 Zig 语言时经常会“触类旁通”C++。在这里列举一些例子来说明我的一些体会,可能会有一些不正确的地方,欢迎批评指正。 “元能力” vs “元类型” 在我看来,C++的增强方式是希望赋予语言一种“元能力”,能够让人重新发明新的类型,使得使用 C++的程序员使用自定义的类型,进行一种类似于“领域内语言”(DSL)编程。一个通常的说法就是 C++中任何类型定义都像是在模仿基本类型int。 …
ZigCC 第三次线上会议
2024-01-14 在 社区新闻
在 2024-01-13 晚,ZigCC 社区举行了第三次线上会议,参会人员: 西瓜 Lambert 金中甲 夜白 会议主要讨论了下面两个议题: 公众号运营 如何与其他社区互动 公众号运营 这是最近群里聊到的问题,由于 Zig 语言本身属于较新的技术,因此社区内资料比较少,这导致很多感兴趣的人没有一个好的学习途径。 但对中文环境来说,我们其实之前已经积攒了一些素材,是完全可以通过公众号的形式进行传播的,主要来源: Learning Zig 中文翻译 Zig 语言圣经 Zig Cookbook …
如何发布 Zig 应用程序
2024-01-12 在 博客
原文链接: https://zig.news/kristoff/how-to-release-your-zig-applications-2h90 API 适配到 Zig 0.12.0 版本 本文配套代码在这里找到 你刚用 Zig 写了一个应用程序,并希望其他人使用它。 让用户方便使用的一种方式是为他们提供应用程序的预构建可执行文件。 接下来,我将讨论一个好的发版流程所需要正确处理的两个主要事项。 为什么提供预构建的可执行文件? 鉴于 C/C++ 依赖系统如何工作(或者说 不工作), …