7 ms·
I _think_ the complaint is the following: if x == nil { x.doSomethingCrazy(); // Runtime error? } else { ... } "Boolean blindness" (bah) is that either t
by blinks 14y ago
I _think_ the complaint is the following:
if x == nil {
x.doSomethingCrazy(); // Runtime error?
} else {
...
}
"Boolean blindness" (bah) is that either the type system should catch this at compile time (because we know x is nil), or the language should make it impossible to phrase (pattern matching to pull the information out, such as with the Maybe type).
Go has many type system oddities (reflection instead of generics, for instance), but the things they _have_ done (auto-implementation of interfaces, for example) are pretty cool.
- Peaker 14y agoI find it unforgivable for a language in 2012 to repeat decades old design mistakes, and for no apparent benefit. What's worse is that it appears this was all done out of ignorance, not conscious choice.
- CasualSuperman 14y agoYou think Rob Pike and Ken Thompson made what you consider a mistake out of ignorance? Just because you don't like it doesn't make it a mistake.
- Peaker 14y agoWhat benefit does it have? What purpose does it serve? As far as I know, these guys have a reputation in industry moreso than in academic circles. It seems entirely believable that they have taken no interest in language design outside of industry, where the state of the art lags a few decades behind that of academia.
- CasualSuperman 14y agoThe benefit is not having to code it. The most bug-free components are the ones that aren't there. Also, it's only v1. I don't think anybody's said that they're opposed to putting it in, so give it time. Maybe file a feature request.
- Peaker 14y agoI think if they add sum types and pattern matching or otherwise make this feature possible, it will completely change the way people write Go code and it would become a very different language. Consider all the error-checks in Go -- these are all incorrect from a boolean-blindness perspective, and that would be a lot of code to rewrite if they add proper constructs to Go. Thus, I really believe it is just a mistake -- one that is only possible to make out of ignorance.
- CasualSuperman 14y agoBecause Go is concurrent and has mutable types, race conditions could cause the assumptions gleaned from the booleans to be false in the very next statement. Boolean blindness is a result of the language.
- Peaker 14y agoNo, that's false -- consider the Maybe case. If you carry around the content of the Maybe, it will still remain valid even after the Maybe itself is overwritten. Races are of course still possible but they don't relate to boolean blindness.
- CasualSuperman 14y agoSo you want to copy the data every time there's an if? Some other part of the program could have a pointer to it otherwise.