My understanding is that `null` was a necessary construct in order to abstract programming languages out of assembly.<sup>1</sup> Programmers needed the ability to indicate that a pointer or register value was `not a valid value` and `null` became the common term for that meaning. Reinforcing the point that `null` is just a convention to represent a concept, the actual value for `null` used to be able to / can vary based upon programming language and platform. If you were designing a new language and wanted to avoid `null` but use `maybe` instead, then I would encourage a more descriptive term such as `not a valid value` or `navv` to indicate the intent. But the _name_ of that non-value is a separate concept from whether you should _allow_ non-values to even exist in your language. Before you can decide on either of those two points, you need to define what the meaning of `maybe` would mean for your system. You may find it's just a rename of `null`'s meaning of `not a valid value` or you may find it has a different semantic for your language. Likewise, the decision on whether to check access against `null` access or reference is another design decision of your language. To provide a bit of history, `C` had an implicit assumption that programmers understood what they were attempting to do when manipulating memory. As it was a superior abstraction to assembly and the imperative languages that preceded it, I would venture that the thought of safe-guarding the programmer from an incorrect reference hadn't come across their mind. I believe that some compilers or their additional tooling can provide a measure of checking against invalid pointer access. So others have noted this potential issue and taken measures to protect against it. Whether or not you should allow it depends upon what you want your language to accomplish and what degree of responsibility you want to push to users of your language. It also depends upon your ability to craft a compiler to restrict that type of behavior. So to answer your questions: 1. "What kind of arguments…" - Well, it depends upon what you want the language to do. If you want to simulate bare-metal access then you may want to allow it. 2. "is it just historical baggage?" Perhaps, perhaps not. `null` certainly had / has meaning for a number of languages and helps drive the expression of those languages. Historical precedent may have affected more recent languages and their allowing of `null` but it's a bit much to wave your hands and declare the concept useless historical baggage. --- <sup>1</sup> [See this Wikipedia article](http://en.wikipedia.org/wiki/Null_pointer#Null_pointer) although credit is given for to Hoare for null values and object-oriented languages. I believe the imperative languages progressed along a different family tree than Algol did.