Search code examples
language-agnosticnulllanguage-design

Are there languages without "null"?


There are many people who think that the concept of the special value null (as it is used in lanuages like C, Java, C#, Perl, Javascript, SQL etc.) is a bad idea. There are several questions about this on SO and P.SE, such as Best explanation for languages without null and Are null references really a bad thing? .

However, I could not find any language that does without them. All the languages I'm familiar with have null, or something similar (e.g. "undefined" in Perl).

I realize that proably every language needs some way to express "absence of a value". However, instead of having "null" or "undefined", this can also be made explicit by using something like Maybe (Haskell) or Optional (Guava). The principal difference to having "null" or "undefined" is that an object can only have "no value" if it has a specific type (Maybe, Optional...). In contrast, "null"/"undefined" is typically a valid value possible for every type.

Are there any languages that do not have nullor a similar concept in this sense?


Solution

  • Here's an incomplete list of languages that are null-safe in the sense that they don't have any non-nonnullable types:

    • Dart (2021): Has optional types with ? syntax.
    • C# 8 (2019): Has opt-in "nullable reference types".
    • Kotlin (2015): Has optional types with ? syntax.
    • Pony (2015). Uses union type where one of the types is None.
    • Swift (2014): Has optional types with ? syntax.
    • Crystal (2014): Does have nil, but prevents all null pointer exceptions at compile-time.
    • Hack (2014): Has optional types with ? syntax.
    • TypeScript (2012): Has union types that can have undefined or null as a variant.
    • Elm (2012): Has union type Maybe.
    • Ceylon (2011): Has optional types with ? syntax.
    • Rust (2010): Has optional type Option.
    • Fantom (2005): Has optional types with ? syntax.
    • F# (2005): Has union type Option.
    • Nice (2003): Has optional types with ? syntax.
    • Netlogo (1999) has no type null
    • OCaml (1996): Has union type option.
    • Haskell (1990): Has union type Maybe.
    • Standard ML (1990): Has union type option.
    • Tcl (1988)
    • Erlang (1986)
    • Prolog (1972): A logical variable stands for "anything at all". There is no concept of "null" or "undefined".

    Feel free to complement the list. The years represent the first public release.