@inthehands I'm a little leery of "it's fine, String? is another type, but not a subtype of String" since checking for None looks a lot like checking for nil. But I suppose in a typed language you can at least declare where it's not allowed to be nil, so there's that.
I wanted Rust to be like that, but having unsafe Rust all over limits the advantages pretty heavily (still runtime crashes, for instance.) So I'd need to work on a little-to-no-unsafe-Rust project to know.