forum icon indicating copy to clipboard operation
forum copied to clipboard

Zig 语言中文社区论坛

Results 71 forum issues
Sort by recently updated
recently updated
newest added

`buffer[start..end]` 是 Zig 中获取子切片的方式,那 `buffer[fstart..][0..fsize]` 是什么意思呢? - ​分步切片:首先通过 buffer[fstart..] 获取从 fstart 到原切片末尾的子切片。这一步会检查 fstart 是否越界。 - ​二次切片:接着通过 [0..fsize] 从前一步的结果中取前 fsize 个元素。这一步会检查 fsize 是否超过剩余长度。 - ​等效于:最终结果与 buffer[fstart..fstart+fsize] 相同,但分两步完成。 下面是两种方式的对比: | 方式 |...

日报

最近看到的[一篇文章](https://mertbulan.com/2025/01/26/once-you-are-laid-off-you-will-never-be-the-same-again/),作者分享了再被裁员一周年后的反思,觉得不错,就分享给大家。 原作者在解雇前一直非常积极的给公司干活,甚至经常和产品老大、技术老大进行一对一沟通,但无奈名字也出现在了裁员名单上,之前的贡献瞬间成为泡沫,也让原作者心灰意冷。 > 在你加入之前,他们会费尽心思让你觉得自己很有价值,并兴奋地接受他们的提议。 你会遇到很多人,有些人甚至会提供签约奖金。 但当裁员来临时,你就成了名单上的一个名字。 在离职面谈时,公司随机安排的一个人念着事先准备好的稿子,却无法回答你的问题。 以下是他与近年来被解雇的朋友交谈时,学到的一些经验: 当我与近年来被解雇的朋友交谈时,我们经常会反思自己本可以采取哪些不同的做法。 以下是我们学到的一些经验: 1. 遵守合同规定的工作时间。 如果合同规定工作 40 小时,那就工作 40 小时,不能多也不能少。 2. 保护好你的个人时间和福利,避免超额完成任务。 许多公司鼓励通过有影响力的工作来获得晋升,但与其追逐内部晋升,不如专注于转换公司,实现职业生涯的下一步。 3. 始终坚持面试。 我见过的最大错误之一就是在开始一份新工作后停止面试,对公司失去信心。 相反,要不断发掘机会,这样即使裁员,你也已经准备好了其他选择。 利用外部提供的机会实现薪酬增长。 4. 公司通常不给现有员工大幅加薪,但却为新员工支付高薪。 定期去其他地方面试,如果你得到了加薪 20% 或更高的工作机会,就考虑接受。...

日报

在本例中,端口会显示在控制台中,程序会一直监听,直到有请求提出。 当端口设置为 0 时,Ip4Address 会随机分配一个端口。 ```zig //! Start a TCP server at an unused port. //! //! Test with //! echo "hello zig" | nc localhost const std = @import("std");...

日报

编程通过自动化地处理数据极大地提升了生产力。而元编程则让我们可以像处理数据一样处理代码,以此将编程的力量反向作用于编程自身。而在底层编程中,我想元编程可能带来最大的优势,因为那些高级概念必须得精确映射到某些低级操作。然而,除了函数式编程语言外,我一直觉得各编程语言对元编程的实现并不理想。因此,当我看到 Zig 把元编程列为一个主要特性时,我提起了很大的兴趣。 说实话,刚开始使用 Zig 的 comptime 时,我的体验相当糟糕。那些概念对我而言很陌生,而想要实现预期的效果也很困难。不过后来,当我转换了思路,一切都迎刃而解了,由此,我突然就喜欢上了它。现在,为了帮助你更快地走上这条探索之路,下面我将介绍六种不同的“视角”来理解 comptime。每个视角都从不同的角度,帮助你将已有的编程知识应用到 Zig 中。 这并不是一本完整涵盖了 comptime 的所有所需知识的详细指南。相反,它更侧重于提供多种策略,从不同视角帮助你全面地理解该如何以 comptime 的角度思考问题。 为了明确起见,所有示例都是有效的 Zig 代码,但示例中的转换只是概念性的,它们并不是 Zig 实际的实现方式。 > 全文见:https://ziglang.cc/post/2025/01/23/bonkers-comptime/ # 加入我们 Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来: 1....

日报

各位大家好, 几个月以来,Zig软件基金会相对保持低调,现在是时候给大家带来更新了。 老实说,在发布压力减小、没有即将举行的会议以及可以长时间专注于大型项目编程时,这些宁静的时光是我个人最喜爱的状态。最近我发现了[迷幻音乐合集](https://www.youtube.com/watch?v=xZjM1trmJWA)和深陷于[Mushroom Infected](https://www.youtube.com/watch?v=Uzyii85rwqo)整个作品库,体验了一段纯粹的[快乐时光](https://www.youtube.com/watch?v=AEm3bIBN8aQ)。 就我个人而言,自从Jakub决定转向其他工作后,我接手了Zig的链接器代码。Loris在编写一本书籍,Jacob正在重写x86后台处理(请参阅GitHub上的拉取请求22386),而Veikka 在开发官方[translate-c包](https://github.com/ziglang/translate-c/),使用Aro而不是Clang。Matthew一直在进行更直接可见的工作,包括改进语言、前端错误修复以及 步向增量编译进展(请参阅GitHub上的问题21165)。我们还迎来了[一位新的Zig核心团队成员](https://alexrp.com/),他的新闻公告将在不久后发布。 在大项目上工作虽然令人满足,但是现在到了推出新版本的时候了。 我之前估计在2023年1月1日发布0.14.0标签。这个估算基于等待所有LLVM的错误修复补丁完成,以避免因LLVM的更新而需要我们自己发布错误修复版本。这个截止日期推迟主要是 为我被一个[相当大的分支](https://github.com/ziglang/zig/pull/22220)所牵绊,然而,LLVM最终在1月14日发布了19.1.7版,预计是该系列的最后一次发布,所以看来我们 好赶上时间。 无论如何,我现在设定了一个**二月17日**的硬性截止日期作为0.14.0标签的发布时间。这将给我们一个月的时间来为这个版本进行质量保证。在此期间,我预期会暂时搁置大目 ,转而专注于拉取请求队列(最近有些忽视)、处理所有开放的问题,并制定一个在截止日期前完成的现实优先级清单。 这次发布周期的主要推动力之一是[改进x86后台到成为调试构建时的默认选项](https://github.com/ziglang/zig/issues/22257)。这是否能在版本发布之前实现还未确定,但这 非不可能的事情。 另一个重点是增量编译,由于缺少充分的测试,它不会在默认配置中启用,然而,它的质量已经达到了beta阶段的水平,因此可以使用编译器标志进行选择性尝试更多详细信息将 发布说明中提供。 除了这些主要目标外,这次版本包含了一系列值得关注的语言增强功能,例如[labeled switch continue](https://github.com/ziglang/zig/pull/21257)。此外,Alex在Zig支 表上投入了大量努力,因此你可以期待每个目标都能提升一个级别。 如果你有项目依赖于Zig 0.13.0版本,请考虑升级到最新的主分支发布版。我们希望在发行月确保所有人都能顺利升级,所以如果有任何问题,欢迎提出反馈! 我知道人们都在等待1.0标签的出现,但在项目达到这样承诺的准备阶段之前还有许多工作要做。相反,我希望提供越来越稳定的新版本,直到人们感觉使用它们时有信心,在后 发布时可能还需要进行迁移。 祝编程愉快, 安德鲁 > 原文:https://ziglang.org/news/what-to-expect-from-release-month/ #...

日报

Zig 中有一个 Reader 类型,它提供了多种读取文件的方法,如 readAll、readInt。 在这里,我们将使用 streamUntilDelimiter 分割行。 ```zig const std = @import("std"); const fs = std.fs; const print = std.debug.print; pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){};...

日报

当我们要更改线程之间共享的数据时,必须使用 Mutex(互斥标志,Mutually exclusive)来同步线程,否则结果可能出乎意料。 ```zig const std = @import("std"); const Thread = std.Thread; const Mutex = Thread.Mutex; const SharedData = struct { mutex: Mutex, value: i32, pub fn updateValue(self: *SharedData, increment:...

日报

在 C 里面,fork/exec 是一套典型的创建新进程的方式,Zig 里面对此进行的一定封装,提供了 std.process.Child 结构来简化这一流程,下面看一示例: ```zig const std = @import("std"); const print = std.debug.print; const Child = std.process.Child; const ArrayList = std.ArrayList; pub fn main() !void { var...

日报

线程池解决了两个不同的问题:在执行大量异步任务时,由于减少了每个任务的调用开销,线程池通常能提高性能;在执行一系列任务时,线程池提供了一种约束和管理资源(包括线程)消耗的方法。 ```zig const std = @import("std"); const print = std.debug.print; pub fn main() !void { var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); const allocator = arena.allocator(); var pool: std.Thread.Pool = undefined;...

日报

今天来给大家介绍一个实用功能,如何遍历一个文件夹。 Dir 里提供了一个方便的 walk 方法,它可以直接实现这个目的: ```zig const std = @import("std"); const fs = std.fs; const print = std.debug.print; pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer if (gpa.deinit()...

日报