
However, they are baked into the type system. Some languages do not allow uninitialized values, such as Rust.Īs I mentioned, Kotlin does allow null values. Null values are found in many programming languages under different names: and fails to dereference it because there's nothing behind it. If one calls a member of such a variable, the runtime locates the memory address of the variable. The basic idea behind null is that one can define an uninitialized variable. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler.

At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). It was the invention of the null reference in 1965. I guess that everybody in software development with more than a couple of years of experience has heard the following quote:

In this post, I'd like to expand on the problem of nullability and how it's solved in Kotlin and Java and add my comments to the Twitter thread.
