I’d argue that the reason this is so bad in other languages is because of horrible default implementations. Look at tostring in java, getting a somewhat printable object would be easy if the default implementation would use reflection or sth to print the object, but instead it prints hash gibberish no one cares about.
What if youre working with library types? The problem is not not you compare a bunch of fields but that the implementation on those members is most likely bad.