Of course, you can potentially lose some performance by not being able to manipulate pointers in some unexpected, clever way. Run-time type checking also results in performance loss. For a completely debugged application, I consider run-time type checking redundant. The notable exception is when the program is specifically written to operate on unknown data. In this case, the program needs the run-time type information to process different classes of data or interface to unknown objects.
Garbage collection comes at the expense of performance, too.
The garbage collection process has to kick in every once in a while to recycle unused chunks of memory. And this takes CPU time. Setting aside the performance issues, let's look at methodology. Clearly, the market drives the evolution of software and development tools. Some companies deploy more and more e-commerce and business applications while developer resources remain scarce.