Представлен [3] новый проект BicaVM [4], в рамках которого создана реализация Java VM (JVM), написанная на JavaScript и способная выполняться в любом современном браузере.
Мотивом создания проекта послужило желание интегрировать в браузер виртуальную машину, в которой мог бы выполняться универсальный байткод. Суть идеи в том, что вместо поддержки какого определённого языка программирования в браузер предлагается добавить абстрактную виртуальную машину, которая позволяла бы организовать выполнение кода на различных языках программирования, не ограниченных одним JavaScript. В качестве достоинств такого подхода называется автоматическая изоляция кода и возможность сохранения среза состояния JVM на сервере, что позволит обеспечить независимую от браузера персистентность. Другим плюсом является обеспечение выполнения Java-программ на платформах, изначально не поддерживающих Java, например, BicaVM успешно выполняется на iPad/iPhone.
В отличие от инструментов GWT [5] (Google Web Toolkit) и Java2Script [6] (Eclipse-плагин), которые транслируют исходные тексты на языке Java в JavaScript, или j2js [7] и Orto [8] (копия на GitHub [9], которые преобразуют Java-байткод в JavaScript, проект BicaVM занимается непосредственно выполнением байткода JVM. По заявлению разработчиков ещё совсем недавно написание интерпретатора байткода на языке JavaScript трудно было себе представить, но бурное развитие JavaScript-движков в направлении увеличения производительности, сделали казавшееся невозможным явью. Несмотря на то, что BicaVM в настоящее время выполняет байткод значительно медленнее нативного JVM, разработчики не видят преград, чтобы довести скорость работы до терпимой, реализовав поддержку оптимизации на этапе инициализации и JIT-компиляции в JavaScript.
В настоящее время разработка носит главным образом концептуальный характер, но с некоторыми ограничениями уже может выполнять Java-код. В частности, поддерживается интерпретация примерно 60% байткода JVM и подготовлен интерфейс JNI для трансляции вызова Java-функций в JavaScript. Для обеспечения запуска полноценных Java-проектов предстоит ещё проделать много работы, например, подготовить полноценное runtime-окружение и провести дополнительные оптимизации производительности.
Ссылки:
[1] http://htfl.ru/cat-news-java
[2] http://htfl.ru/cat-news-novosti
[3] /out.php?link=http://www.surf-the-edge.com/2011/11/15/bicavm-jvm-in-javascript-why/
[4] /out.php?link=https://github.com/nurv/BicaVM
[5] /out.php?link=http://code.google.com/webtoolkit/
[6] /out.php?link=http://j2s.sourceforge.net/
[7] /out.php?link=http://www.j2js.com/
[8] /out.php?link=http://ejohn.org/blog/running-java-in-javascript/
[9] /out.php?link=https://github.com/robterrell/orto