Компания Sun Microsystems работает над технологией, которая позволит упростить использование различных языков в виртуальной машине Java Virtual Machine. Новый проект, получивший название Da Vinci Machine, в Sun называют «многоязычным возрождением архитектуры Java Virtual Machine». Этот проект предполагает создание прототипных расширений JVM, позволяющих работать с другими динамическими языками помимо Java, а также поддержку ряда архитектурных аспектов разработки программ.
Как пояснил Чарлз Нуттер, ведущий разработчик JRuby (версия Ruby для работы с JVM), в новой виртуальной машине помимо Java были реализованы многие другие языки, в том числе Ruby, и теперь компания работает над обеспечением большей совместимости JVM с другими языками.
«Почти каждый динамический язык, существующий не менее пяти лет, имеет ту или иную реализацию в JVM», — подчеркнул он.
JVM позволяет использующим ее программам работать на любой платформе, которая поддерживает JVM; она обеспечивает независимость аппаратного обеспечения от операционной системы. В частности, она дает такие преимущества, как гибкость загрузки кода и возможность сборки мусора в оперативном режиме. Объекты при этом убираются автоматически, а не вручную.
Da Vinci Machine создается для решения проблем, возникающих, например, из-за несоответствия между шаблонами проектирования исходного языка и возможностями JVM. Поскольку JVM предназначалась для Java, а при использовании Java одним шаблонам проектирования отдается предпочтение перед другими, то программистам приходится как-то обходить подобные несоответствия.
«В частности, JVM изначально создавалась для Java, а другие языки имеют возможности, которые Java не предоставляет. Нам необходимо найти способ поддерживать такие возможности», — пояснил Нуттер.
В частности, при использовании новых языков в JVM возникают определенные трудности, в том числе ограничения, касающиеся последовательности вызовов и манипуляций со стеком передачи управления, ограниченное наследование и проблемы масштабирования при генерации классов.
Нуттер отметил, что Java как язык со статическим определением типов отличается от языков скриптов, подобных Ruby, которые поддерживают динамическое определение типов. В силу этого Java дает JVM больше сведений о том, как будет выполняться код.
По мнению Нуттера, необходимо найти способы, позволяющие JVM делать корректные вызовы при использовании таких языков. В JRuby эта проблема решается с помощью фрагмента кода, выполняющего анализ целевых операций.
Предполагается, что возможности Da Vinci Machine будут добавлены в новую версию JDK (Java SE Development Kit) 7, базирующуюся на Java Platform, Standard Edition 7. Точная дата выпуска JDK 7 в Sun пока не установлена. Также точно неизвестно, какие из возможностей Da Vinci могут быть на деле реализовано в JDK 7.
Da Vinci представляет собой экспериментальный вариант JVM, как отметил Нуттер. Он подчеркнул, что создание ответвления в данном случае не повлечет за собой никаких негативных последствий, связанных с разветвлением базовой платформы.
Некоторые Java-разработчики с энтузиазмом относятся к идее Da Vinci Machine. Так, Алекс Миллер, директор по технологиям компании Terracotta, специализирующейся на технологиях кластеризации Java, одобряет проект Da Vinci Machine.
«Сейчас многие пишут на динамических языках и используют их с JVM, но многое здесь остается сложным», — заметил Миллер.
Многие динамические языки отличаются от Java тем, что они используют функции, а не объекты. По словам Миллера, приходится изрядно потрудиться для того, чтобы заставить их работать в JVM.
В то же время, модернизация ждет и проект JRuby. По словам Нуттера, версия 1.1, которая появится в течение февраля, включает в себя полный компилятор со значительно более высокой производительностью.