I guess it's time to share

@jantje: the official source is of course gcc. With regard to performance issues there is nothing like X always good, Y always bad. The only rule that stays is: look and see. That is you have to measure.

With regard to the OO overhead: IMHO the overhead is negligible on most "real" computers because of the improved abstraction. But then most of the time you want to use languages that are even further away from the hardware because you want the increased abstraction. But on the Arduino with its tight constraints the overhead is there and the impact is clear. If you do not believe it just implement whatever you want and then replace all Arduino out of the box OO constructs with their equivalents from avr-libc and compare the generated assembler code.

The most notorious example here is the string class.