Should I use unsafe?
It's not uncommon to hear some variant of the following position—I won't use any library that has anunsafe
block in it. The reasoning behind this position is that unsafe
, well, advertises that the crate is potentially unsafe and might crash your otherwise carefully crafted program. That's true—kind of. As we've seen in this book, it's entirely possible to put together a project using unsafe
that is totally safe at runtime. We've also seen that it's entirely possible to put together a project without unsafe
blocks that flame out at runtime. The existence or absence of unsafe
blocks shouldn't reduce the original programmer's responsibilities for due diligence—writing tests, probing the implementation with fuzzing tools, and so on. Moreover, the existence or absence of unsafe
blocks does not relieve the user of a crate from that same responsibility. Any software, at some level, should be considered suspect unless otherwise demonstrated to be safe.
Go ahead and use the unsafe...