Steve Dekorte questions some of the conventional wisdom of implementing dynamic languages on Java/C# platforms. Ironically the implementations of Java and C# are essentially based on approaches from the dynamic language community. They have static-ness added on top (e.g. statically-oriented object models and class loaders) and/or into the mix (e.g. statically-oriented instructions).
Maybe a more interesting question is why aren't Java and C# implementations more thoughtfully layered on top of especially efficient implementations of dynamic languages? This has been done before, e.g. implementations of C, Fortran, Ada, et al. on Symbolics and other Lisp Machines. That ordering makes more sense in terms of complexxity.
Current implementations could provide a foundation for such a thing, e.g. the implementation Gambit Scheme would be a particularly good candidate. One problem: the implementation, like most long-lived, highly-tuned software designs, is fairly obscure and familiar to few people.
Depending on Gambit Scheme is riskier than depending on GCC, the JVM, or dotnet. On the other hand the benefits of putting multiple languages on the implementation would likely lead to a larger community of knowledgable systems developers.