> Yes. Dynamic binding and loading is ugly and clunky
Really ? You mean: universally ugly and clunky ?
I've spent 10 years in programming Objective-C. I wrote myself an Objective-C compiler at a time none existed (not really a compiler, a parser that generates C and a runtime lib). In the company I used to work for, it helped a great lot more than it has hurt. It also made possible very sophisticated debugging and testing environments, thanks to the dynamic bindings of Objective-C. I don't find that ugly and clunky, not even in the language syntax details.
My point is that dynamic bindings and introspection are immensely powerful tools. They enable generic programming in a clean way as long as you know what you're doing. You may reach similar results with strict typing language, or code generators (thanks visual c), sure. I don't think it's that easy though.
You may hate it for the reasons you mention (Prone to errors because too much things pass the compiler task), which are perfectly valid. But writing it's inherently "ugly and clunky" seems really missing the point here. "Dangerous" is a better word maybe ?
In the other hand, I've seen many C++ programmers lost in their code that no one but the compiler could barely understand a few month after writing. I'm absolutely not saying c++ is inherently bad and/or difficult; it's just about the people who use it and the rules your team adopt to make it coherent and intelligible.