Doppio — JVM, Компилятор и дизассемблер в JavaScript

http://badassjs.com/post/32812527381/doppio-a-java-virtual-machine-compiler-and
  • Перевод
На сегодняшний день мы не испытываем недостатка в прекрасных вещах, которые написаны на JavaScript. Да и реализации JVM в JavaScript мы уже видели. Теме не менее, Doppio представляет собой наиболее полную и активно развивающуюся JVM.



По большому счёту Doppio — это проект, который позволяет выполнять Java-код прямо в браузере без плагинов. Он включает в себя реализацию Java Virtual Machine (JVM), заключающуюся в браузерном компиляторе и дизассемблере байт-кода. Проект находится ещё в стадии разработке, нужно ещё хорошо поработать над производительностью, прежде чем его можно было бы использовать в разработке. Но уже сегодня поддерживается:

  • Все 200 opcode-ов
  • Точная эмуляция примитивных типов Java, включая 64-битные long
  • Generics
  • Большая часть Reflection API
  • Работа с файлами и стандартный ввод/вывод
  • Основные JDK-библиотеки, такие как String, Pattern и HashMap


Вроде как демо лучше всего работает в Chrome, но оно должно хорошо работать в любом браузере, который поддерживает локальное хранение и типизированные массивы.

Но почему Java?


Вы должно быть сейчас думаете: «Но зачем мне нужно писать на Java для браузера?» Но имея браузерную JVM, мы получаем намного больше чем просто Java, не забудьте что существует множество других языков, компилируемых в JVM-байткод, включая как уже существующие языки — Ruby (JRuby), Python (Jython) и JavaScript (Rhino), так и новые языки, такие как Scala, Clojure и многие другие.

С этой точки зрения JVM в браузере может использоваться для работы с множеством языков и существующих программ прямо в браузере без ручного перевода. Однако, прежде чем это будет возможно, предстоит много работы по оптимизации. Сейчас Doppio интерпретирует байткод на лету, но авторы напоминают, что они хотят перехода к более компилируемому подоходу. Также как и Emscripten компилирует LLVM-байткод в JavaScript, Doppio хочет делать аналогичное для JVM-кода — тогда бы это была очень мощная утилита.

Вы можете найти информацию о проекте Doppio тут, посмотреть задокументированные примеры или страничку на GitHub. Ну, и конечно же попробуйте демо.
Поделиться публикацией

Комментарии 23

    +12
    Мде, взрыв мозга. Учитывая что под JVM есть такой проект как Rhino

    image
      0
      Rhino это js в jvm, а тут jvm в js
        +7
        Очевидно Вы не обратили внимания на изображение к комменту.
          0
          изображение вижу, а что там?
            +16
            [KO-mode]Автор предлагает запустить код на js в машине jvm, которая будет выполнятся на js, в которой будет код js… и так до тех пор пока минивен не вылетит с моста.[/KO-mode]
              –2
              как я понял, в Doppio jvm написана на js, а Rhino это настроящая jvm в которой выполняется js, зачем из сравнивать?
                +9
                Посмотрите фильм «Начало», а то этот мем можно до бесконечности разжёвывать.
                  –1
                  если речь о вложенности, js>jvm>js(ой какой взрыв мозга) и тд… это понятно сразу без всяких фильмов.
                    +2
                    Все равно, посмотрите фильм. Не скажу что гениальный, но достаточно интересный за последнее время.
      +2
      Банеры на Scala, скоро! В каждом браузере!

      Похоже на перебор.
      Хотя кто знает, может быть через некоторое время в девайсы начнут вставлять аппаратный акселератор JavaScript и мир совсем изменится?..
        +1
        Что-то похожее уже было (из новостей 1997 года): «Молодая и удачливая компания Sun Microelectronics выпускает микропроцессор, предназначенный специально для работы с языком Java...»
        Тогда не прижилось.
          0
          Тогда и смарьфонов меньше было.
            0
            Насколько я знаю, в телефоны всегда ставились обычные процессоры (ARM или MIPS), а эти так и не получили заметного использования.
              0
              Позвольте переформулировать: когда-то в телефоны не ставили видео-процессоры. Когда-то их даже в компьютеры не ставили. Сегодня они есть в самом распоследнем смартфоне и планшете — это стало обыденностью.
              Если придумают чип, ускоряющий JavaScript, и его поддержит софт индустрия, то недалек тот день, когда он будет стоять также в каждом телефоне и планшете.
              Ведь хотим мы этого или нет, вектор развития интерактива в вебе смещается от Flash и Silverlight к HTML5, неотъемлемой частью которого является JS код.
              Ну и тут позволю себе напомнить о попытках производителей сделать целиком HTML5 операционную систему для мобильного устройства.
        +1
        Clojure и так компилируется в JS.
          +2
          А как на счет точной эмуляции 0-day уязвимостей в JVM?
            0
            Эх, JVM — единственный способ вырваться из cross domain origin ограничений (да, нужно конечно его подписать, после чего пользователь должен согласиться доверять, но всё же), увы в JS-версии такого никогда не будет :(
            0
            Но уже сегодня поддерживается:
            — Generics


            Хм, а пишут, что «compiler is for Java 4».

            Но вообще, конечно интересно, так как трансляция Java -> Javascript может быть проще, чем в обратную сторону (я смотрю на тебя, GWT)
              0
              Попробовал запустить Google Closure Compiler -> «Exception in thread „main“». А жаль. Надеюсь доделают, чтобы можно было использовать GCC без Java
                0
                Generics точно не поддерживаются:
                ***.java:19: Identifier expected.
                 ArrayList<ObjectOutputStream> clientOutputStreams;
                                 ^
                ***.java:33: '(' expected.
                    clientOutputStreams = new ArrayList<ObjectOutputStream>();
                                                                                       ^

                Хотя сама библиотека java.io.* загружается.
                  0
                  JS → (Java → JS)+ — это всё понятно. Вы скажите, Minecraft запустится?

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое