Для решения ваших три вопроса отдельно:
Что такое преимущество в том, и другие языки для виртуальной машины Java?
Здесь есть два фактора. (1) Зачем нужен язык, отличный от Java для JVM, и (2) почему другой язык запускается на JVM вместо другой среды выполнения?
- Другие языки могут удовлетворить другие потребности. Например, Java не имеет встроенной поддержки для closures, которая часто очень полезна.
- Язык, который работает на JVM, является байт-кодом, совместимым с любым другим языком, который работает на JVM, что означает, что код, написанный на одном языке, может взаимодействовать с библиотекой, написанной на другом языке.
Что требуется (с точки зрения высокого уровня), чтобы написать язык/компилятор для виртуальной машины Java?
JVM считывает файлы байт-кода (.class) для получения инструкций, которые необходимо выполнить. Таким образом, любой язык, который должен быть запущен на JVM, должен быть скомпилирован для байт-кода, придерживающегося Sun specification. Этот процесс похож на компиляцию на собственный код, за исключением того, что вместо компиляции инструкций, понимаемых ЦП, код компилируется в инструкции, которые интерпретируются JVM.
Как написать/скомпилировать/запустить код на языке (кроме Java) в JVM?
Очень точно так же вы пишете/компилируете/запускаете код на Java. Чтобы ваши ноги были мокрыми, я бы рекомендовал посмотреть на Scala, который безупречно работает на JVM.
Ответ на ваш последующие вопросы:
Как приложение написано, скажем, JPython, взаимодействовать с приложением Java?
Это зависит от выбора варианта преодоления языкового пробела. В вашем примере, Jython project имеет простые средства выполнения этого (see here):
from java.net import URL
u = URL('http://jython.org')
Кроме того, может что применение JPython использовать любого из JDK функций/объектов?
Да, см. Выше.
Что делать, если это был код Jaskell, будет ли факт, что это функциональный язык, не делает его несовместимым с JDK?
№ Скала (ссылка выше), например, реализует функциональные функции при сохранении совместимости с Java. Например:
object Timer {
def oncePerSecond(callback:() => unit) {
while (true) { callback(); Thread sleep 1000 }
}
def timeFlies() {
println("time flies like an arrow...")
}
def main(args: Array[String]) {
oncePerSecond(timeFlies)
}
}
JVM - это просто виртуальная машина. Для виртуальной машины вам нужно несколько языков по той же причине, что и вам, для реальной машины. –