▲ | kstenerud 4 days ago | ||||||||||||||||||||||
In C, sure. C is a dangerous language of its time. But these contracts don't make things better. Now you're removing control from the user. So now if an allocation fails, you crash. No way to recover from it. No getting an error signal back (NULL) so that you can say "OK, I need to clear up some memory and then try again". (Note that I'm not saying that inline error signaling such as NULL is good design - it's not). Nope. No error handling. No recovery. You crash. And ain't nothing you can do about it. That's just bad design on top of the existing bad design. Things that crash your app are bad. No need to add even more. | |||||||||||||||||||||||
▲ | hdjrudni 4 days ago | parent [-] | ||||||||||||||||||||||
I'm not convinced. If something is going to cause a crash, like a nullptr, I'd rather crash near where the error happened with a nice error message, than hitting some UB crash god knows where. Do I want my app to crash at all? No, of course not. If it's crashing, there's a serious bug. At least now I know where to look for it. Should we pass back up an error signal instead of crashing? Yes, if it all possible, do that instead. Sometimes it's not possible or not worth the hassle for something you're 99.99999% sure can't/won't happen. Or literally can't currently happen, but you're afraid someone on the project might do a bad refactor at some point 5 years down the road and you want to guard against some weird invariant. | |||||||||||||||||||||||
|