They are OS threads (so yes heavy).
But I think if you manage to use-after-free or other memory error in safe Rust it’s a compiler bug. Or you used unsafe
and have a soundness issue in the code you did.
Note : as I understand it, unsafe is a way to tell the compiler you can check its safety guarantees yourself. But you may fail and get back other languages inexistent guarantees.
First time I hear about checked exceptions. How do you use them ? Are you forced to handle them explicitly ? Is the handling checked at compile time ?