2 ms·
> In C obviously a UID, a PID, a duration, an inode number, a file descriptor, a counter are all just integers. In Rust you could make all those distinct types
by Someone 3y ago
> In C obviously a UID, a PID, a duration, an inode number, a file descriptor, a counter are all just integers. In Rust you could make all those distinct types
For various kinds of IDs you can do that in C, too:
struct UID {
int value;
};
A C compiler can pass these in registers to functions (https://wintermade.it/blog/posts/value-struct.html https://wintermade.it/blog/posts/value-struct.html). So, performance impact should be zero.
It may be not as nice as other languages, but it isn’t bad, either. If you use C++, it can be made a bit nicer, and you could also have such structs that you can calculate with.
- elteto 3y agoYou can technically do this but then you have to write wrapper functions for all relevant syscalls or libc functions to unpack the structure and call the actual thing. Lots of work.
- viraptor 3y agoIt exists, but... throw in some macros or generic cache/storage which is untyped and you end up with a non-trivial version of this: struct GID gid = *(GID*) &some_uid; Which will compile without issues or warnings by default. No belts or braces in this area.