Although they don't directly address the question you asked, you might find the Stepanov benchmark somewhat interesting. It deals only with a single language (C++) and programming with differing levels of abstraction within that language. I'd guess the higher levels of abstraction fit more closely with your idea of "practically expressive".
It defines levels from 0 to 12, starting from essentially C-like code using hand-written loops operating on pointers, and progressing to pre-written algorithms operating on iterators, etc.)
At one time, it was common to see penalties on the order of 2:1 (sometimes even more) for the higher levels of abstraction, even though it was carefully designed so a compiler should have been capable of producing the same output for all cases.
With most modern compilers, that's exactly what you get. You need to increase the number of iterations to get meaningful results (e.g., changing ::iterations
from 25000 to 500000). With that change, and a modern compiler with optimization enabled, you can pretty much count on a ratio of 1.0 for every level of abstraction it defines. Depending a bit on some luck, you might even see the higher abstraction levels executing minutely faster than the lower ones (I've seen it, though I'm pretty sure it wasn't meaningful).
While this doesn't directly address the question of one language versus another, it does hint at the idea that expressiveness doesn't have to carry a penalty. At the same time, it's probably worth adding that even the most abstract code in this benchmark is fairly verbose compared to, say, Perl.