I understand that embedded environments are constrained. But, nowadays, this is more for an economical reason than for a technical reason. More memory means that each unit costs more and when you want to sell millions of units, this is indeed something to take in consideration.
But this position is acceptable only where security is not a strong requirement. I know that software in Airbus planes is written in Ada and I strongly hope that checks are still there. I know that Ada is used in Ariane rockets too and I’m pretty sure that checks are activated: the first Ariane 5 destroyed itself following some arithmetic overflow. There are lot of examples where software has killed. Of course, checks generated by the compiler are not the panacea but there are important as the first line of defense. And indeed, it is possible to get a good confidence that some parts of code are bug free. But this is only possible for small programs. And if using arrays of fixed sized prevents some bugs, that doesn’t insure that indexes are always valid. It is still possible to access a fixed array out of bounds. I have seen too much so-called bug free software crashes to be very confident in code which doesn’t contain some elementary protections (index checks at least, which a compiler can do with a single comparison).