Description
openedon Aug 29, 2024
It has been proposed to remove the Eq
, Hash
, and Debug
implementations as part of 1.0 #3248. The reason for this is that for anything with padding or unions, it is not easy to ensure these are sound. An example is at #2816.
I think the problem with this isn't always that they are unsound, but that their usage leads to unsoundness. For example, #2700: they definitely shouldn't have relied on sigemptyset
to fully initialize the struct, but there isn't anything that looks incorrect at first glance.
At this time, a very rough search shows about 850 Cargo.toml
files that make use of this feature, compared to ~50k without it (https://github.com/search?q=lang%3Atoml+%2F%5Elibc%5Cs%2B%3D.*%22extra_traits%22%2F&type=code vs https://github.com/search?q=lang%3Atoml+%2F%5Elibc%5Cs%2B%3D%2F&type=code). This suggests there isn't a whole lot of ecosystem use that will experience breakage, but it also isn't negligible.
It seems Nix may be influenced by this more directly nix-rust/nix#2468.
Personally I think we could leave a Debug
implementation but just make non-primitive types nonexhaustive (e.g. sigset_t { .. }
). This would at least allow #[derive(Debug)]
on anything that wraps these types, and just make it always available rather than behind a feature.
There is a proposed PR up: #3692