Of course, that's idealistic, most languages don't have some Option type without a performance penalty, and pre-existing libraries exist. (Usually you should design around needing Option too.)
The right language design decision for these languages (managed languages like Java) might have been to make uninitialized references have a garbage value that reliably throws an exception when used (i.e. null) -- you can copy the reference and pass it around, but you can't compare it for equality and any attempt to inspect its value results in an exception.