> Go's concurrency model still exists within a single process with a shared heap, which is very different to Erlang's model.
I've already mentioned Go doesn't have per-process heaps, and I consider this a step backwards from shared-nothing message passing.
I don't understand how can you argue that facilitating the threads-and-locks model leads to "simple code that is obviously correct". Writing correct multithreaded code is widely recognized to be difficult.
> The very notion of null references being inherently bad is highly contentious.
If by this you mean people keep[1] pointing[2] out[3] the problems with nulls, and other people keep ignoring them, then I fully agree. Otherwise, please direct me to a discussion offering a pro-null argument.
For code to be correct in the presence of null references, the programmer must remember to check every nullable value of uncertain status, without support from the compiler.
Alternatively, in a language with option types, only values explicitly marked as optional must be checked, and forgotten checks are pointed out by the compiler. Less code, more safety.
Tell me again, how does allowing null references lead to "simple code that is obviously correct"?
> If you don't have null pointers or [do have] generics, then you need a more complex type system.
Certainly. More complexity for the language implementers; less complexity for the language users.
1. http://qconlondon.com/london-2009/presentation/Null+Referenc...
2. http://www.dcs.warwick.ac.uk/~hugh/TTM/TTM-TheAskewWall-prin...
3. http://www.ccs.neu.edu/racket/pubs/dissertation-cobbe.pdf