| > But if I understand correctly, out-of-the-box, Zig's `union` doesn't get a tag type, right? That's what I meant by Rust's `enum` being safer: you can use it safely in Zig, but you have to actually request safety, because that's not the default behavior. Sure. I think that's more an effect of the choice of keyword defaults here. A straight union is very uncommon and is typically solely for C interoperability. > And the "more powerful" is about the fact that a Rust enum can actually carry data, while it doesn't seem to be the case with Zig. A tagged union can store data as in Rust. See the examples in the documentation [1]. Admittedly Rust's pattern matching is nicer to work with here. To summarise the concepts: - `enum` is a straight enumeration with no payload. The backing tag type can be specified (e.g. enum(u2)). - `union` is an unchecked sum type, similar to a c union without a tag field. - `union(TagType)` is a sum type with a tag field, analagous to a Rust enum . A `union(enum)` is simply shorthand to infer the underlying TagType. > So, it sounds like deallocations are not checked by default, right? If referring to if objects are guaranteed to be deallocated when out of scope then no, this isn't checked. There are a few active issues regarding some improvements to resource management but it probably won't result in any automatic RAII-like functionality. This is a manual step using defer right now. [1] https://ziglang.org/documentation/master/#union |
Fair enough. That's why Rust also has a `union` keyword, which is always `unsafe`.
> A tagged union can store data as in Rust. See the examples in the documentation [1]. Admittedly Rust's pattern matching is nicer to work with here.
Ah, right, it could be any struct instead of being a bool or integer. I missed that.
> If referring to if objects are guaranteed to be deallocated when out of scope then no, this isn't checked.
I was wondering about that and double-deallocations.
> There are a few active issues regarding some improvements to resource management but it probably won't result in any automatic RAII-like functionality.
Out of curiosity, what kind of improvements?