News for hackers. Stuff that matters.
Re:My Experience of building Bytebeat player in Zig by im3w1l on Friday November 07, 2025 @03:24PM (#45850646)
My thought when reading this, as someone who has never used zig, wouldn't it be easier with a global (thread local) variable? If you don't care you don't touch it. If you you do care you change it and restore it when you are done with whatever you were doing.
Re:My Experience of building Bytebeat player in Zig by dundarious on Friday November 07, 2025 @04:11PM (#45851157)
That would get you almost none of the benefits of arenas and other types of allocators. Recommend https://www.rfleury.com/p/untangling-lifetimes-the-arena-all...
Re:My Experience of building Bytebeat player in Zig by im3w1l on Friday November 07, 2025 @05:11PM (#45851770)
I know what arenas are but I don't see how passing something explictly vs implicitly matters except for which style people prefer?
Re:My Experience of building Bytebeat player in Zig by dundarious on Saturday November 08, 2025 @11:09PM (#45862829)
For one, you don't want exactly one arena or allocator for all tasks.
Re:My Experience of building Bytebeat player in Zig by im3w1l on Sunday November 09, 2025 @12:35AM (#45863195)
Well you couldn't you just use a different one in that case? The variable would just be like a suggestion.
Re:My Experience of building Bytebeat player in Zig by dundarious on Sunday November 09, 2025 @01:14AM (#45863369)
Most programmers don't prefer thread local mutable state over a single pointer argument. Especially for general purpose code (i.e., not specific to a single purpose/project). With the mutable state version, you have to clearly define which state you're using and when (which named allocator/arena variable), and if you're mutating it in place and then restoring it, there can be some pretty obvious issues.

Given this thread is completely off the rails from anything specific to allocators or arenas, and even Zig, I will now exit.

Re:My Experience of building Bytebeat player in Zig by chrisco255 on Friday November 07, 2025 @06:35PM (#45852605)
You can use regular buffers for many things, but a lot of core Zig std functions require an allocator (satisfying std.mem.Allocator interface) as an argument. This means the developer retains control of how memory is managed. It's also advantageous for testing, as you can pass in specialized allocator for detecting memory leaks during testing but use the more efficient allocator for release mode. You can wrap regular buffer into a FixedBufferAllocator which just uses stack values. ArenaAllocator is just a container that wraps an underlying allocator but it will free everything when you call defer arena.deinit(), which is useful for short-lived things like http requests.
Re:My Experience of building Bytebeat player in Zig by defen on Friday November 07, 2025 @06:50PM (#45852693)
Doing that seems like it's just manually replicating a call stack (with potential for error); I don't see what the benefit is. Making functions independent of global state - and allocation is a huge source of implicit dependency on global state - is generally considered good programming practice.