To me, the most interesting part of this whole Go2 discussion is the amount of brainpower being expended on keeping the language on its current path of pragmatic minimalism and not careen off into type system land akin to contemporaries like Rust, C#, Scala and Swift, while at the same evolving and modernizing it. It's not easy.<p>Not that complex and rich type systems are a bad thing, but there's something to be said for Go's austerity. Having been a Delphi/ObjectPascal programmer for many years back in the 1990s, Go feels very familiar to me, with good approaches to many challenges. I do think Go's designers made some crucial errors that should have been obvious at the time, and that we are paying for them now. In attempting its special flavour of minimalism, they arguably didn't bother to learn enough from past language experiments. Of particular note, Modula-3 has a very pragmatic approach to generics [1], which later inspired similar approaches in Delphi/ObjectPascal/FreePascal. (I'm not saying Modula-3's design is right for Go, though.) If you want to look at extreme engineering pragmatism (as opposed to type-theoretical elegance you find on Idris, Agfa etc.), look at Ada, or even plain Pascal. Both have range types and enums and other things which grant the language first-class mechanisms for tightening a program's semantics, but they do so in the syntax and compiler, not through advanced type system shenanigans. (Oberon, which influenced Go in many ways, actually did away with enums in the name of simplification. Minimalism can go too far, too.) Ada, arguably the most engineering-oriented language ever conceived, also has tagged unions, although I don't think they were ever used for error returns, since Ada has exceptions.<p>I'm not at all worried that Go adopting generics will lead to type system madness, especially given how conservative the designs have been so far. I think the amount of discussion and lively idea brainstorming in the community right now is a very healthy sign. More than some other language communities, there have been times when it's seemed -- right or wrong, it's hard not to get this impression from the vantage point of an ordinary developer -- that the Go team has historically been somewhat distant, preferring to unleash finished implementations on the world instead of evolving their designs in collaboration with the community (<i>cough</i> vgo vs. Dep), and I think this is an opportunity to open up the process a bit. I don't know about anyone else, but I'm certainly very much enjoying all these articles being put out.<p>[1] <a href="https://www.cs.purdue.edu/homes/hosking/m3/reference/generics.html" rel="nofollow">https://www.cs.purdue.edu/homes/hosking/m3/reference/generic...</a>