No one ever claimed that a programming language, no matter how rigorous, can eliminate all bugs. All a language can do is to reduce their rate of occurrence.
The Ariane fiasco was not a failure of Ada per se but rather a failure of people using Ada. They attempted to re-use software written for one rocket for another without proper testing. No language can prevent that sort of error. We can argue forever about the usefulness of language-enforced restriction of access to private data and methods. I have no doubt whatsoever that it is very useful at least for the extreme cases of very large, safety-critical systems. If you don't think access to private data needs to be restricted for control of strategic nuclear arsenals, for example, I think you're crazy, but that's just my opinion. The only reasonable question in my mind is where the line should be drawn between systems that should have enforced restrictions and those that can rely on coding standards and voluntary cooperation among programmers. A while back, I read something about the final integration of the flight software on the Boeing 777, which was written mainly in Ada. The claim was made that this integration took only three days, whereas normally it would be expected to take more like three months with a less rigorous language such as C++. The reason for the simplified integration is that Ada enforces interfaces and prevents access to private data and methods. Apparently such enforcement can improve the efficiency of software production -- and that's not just in "theory." -- http://mail.python.org/mailman/listinfo/python-list