when it comes to C or C++, there's a lot of compiler optimization involved, and the compiler might decide to overthrow about any of the nice little ideas away, since it can determine much better which optimization to use at a specific place (such as inlining) and takes into account things as instruction pipelines etc. hardware architecture has become far too complex for people to program hardware directly. nowadays even simple compilers employ significant amounts of optimization. using funky tricks is less readable and harder for the compiler to optimize, because manual optimization reduces semantics. so even if you write C or C++, your choice is either to shoot yourself in the foot, or let the compiler do the optimization for it. That's what most of the 9,513,227 lines of code in the GCC are about.
i think, it is very important for software to be verifiable, robust, maintainable, flexible and reusable/extensible. the more expressive and concise a language is, the easier it is for developers to meet these criteria.
there's one last, yet important criterium for software: efficiency.
the important question is, how you meassure efficiency. i would measure it in pure speed and scalability. these two are not mutually exclusive, however using a language, that is tightly coupled with concepts of parallel/distributed computing and features language constructs design for that matter, it is much easier to develop such algorithms. of course the thing would run faster, if you'd do all the dispatching yourself, but that's error prone and time consuming.
you should also consider, that compiler optimization has linear effects. if your algorithms or you system design doesn't scale well, it won't solve the problem for you. if it does scale well, you can solve performance issues by throwing in more hardware, which is always cheaper than developement time.
in the end, the choice you make, is to reinvent the wheel to have the optimal wheel to go down the road you want to take, or take an existent wheel, and care more about choosing the right road, instead of the speed, at which you go.
if you write software, the only important decision to take in advance, is design ... then, you implement it, and once it is implemented, you will be able to determine the actual bottlenecks, and then optimize there ... usually, more than 90% of your code is run less 10% of the time ... optimization is only important for the remaining 10% ... to determine them, you need working software that you can profile ... and you need it quick, so you can reconsider your design, before writing something that is super optimized, but crap otherwise ...