In my experience, at least for static languages, inline annotations are very useful in the hands of a skilled programmer; the compiler's inline heuristics are always static guesses at dynamic properties and as a result they fall down from time to time. (The JVM may be able to do better here though—it has the ability to inline functions at runtime via a recompile if they discover that they're being called a lot.)