Порівняно з іншими ВМ, JVM насправді не особливо універсальний . Він безпосередньо підтримує статично набраний OO. Для всього іншого ви повинні бачити, які деталі ви можете використовувати, і як ви можете будувати все інше, що потрібна вашій мові.
Наприклад, поки Java 7 не представила invokedynamic
байт-код, було дуже важко реалізувати динамічно набрану мову OO на JVM - вам довелося використовувати складні обхідні шляхи, які були поганими для продуктивності та призводили до жахливо роздутих слідів стека.
І все-таки на динамічному JVM було впроваджено купу динамічних мов (Groovy, Jython, JRuby).
Не тому, що JVM настільки універсальний, а тому, що він настільки поширений, і тому, що він має дуже зрілі, добре підтримувані та високоефективні реалізації.
І, можливо, навіть важливіше, оскільки там існує величезна кількість Java-коду, яка робить майже все, і якщо ваша мова працює на JVM, ви можете легко запропонувати засоби для інтеграції з цим кодом. В основному, ваша мова працює на JVM - це версія 21 століття, яка пропонує сумісність з C.