It doesn't guarantee destructors will run, that's true, but that's for things like Rc cycles. Take a look at the RFC for std::panic::recover- it definitely takes exception safety into account:
https://github.com/rust-lang/rfcs/blob/master/text/1236-stab...Also take a look at things like the design of the Drain iterator- the stdlib is definitely (intended to be) exception safe.