3 ms·
It's Zig's equivalent of the newtype idiom: https://doc.rust-lang.org/rust-by-example/generics/new_types.html https://doc.rust-lang.org/rust-by-example/generics
by defen 2y ago
It's Zig's equivalent of the newtype idiom: https://doc.rust-lang.org/rust-by-example/generics/new_types.html https://doc.rust-lang.org/rust-by-example/generics/new_types... for integers.
The underscores mean that it's a non-exhaustive enum. An exhaustive enum is where you list all the names of the possible enum values, and other values are illegal. A non-exhaustive enum means any value in the underlying storage is allowed. So at root this code is creating a bunch of new integer types which are all backed by u32 but which can't be directly assigned or compared to each other. That means you can't accidentally pass a SectionIndex into a function expecting an ObjectFunctionImportIndex, which would be impossible to do if those functions just took raw u32's.
- mtlynch 2y agoAh, thanks! I tried converting that example to Zig: https://tars.run/t3eInpPFAgc https://tars.run/t3eInpPFAgc Is that the idea? You can do the same thing wrapping integers with structs, but enum makes it slightly more concise?
- ImprobableTruth 2y agoYes, that's how it works. I think in Zig for new types you'd use enums for ints and packed structs for more complex types.