Скомпилируйте Java в asm.js

asm.js в ближайшее время. Сейчас даже ходят слухи о том, что Chrome скоро полностью его поддержит.

Но до сих пор он использовался для компиляции исходного кода C/C++ в JavaScript, который работал бы с почти родной скоростью (зависит от того, как вы определяете около родной скорости...)

Я планировал использовать GWT, чтобы превратить мой Java-код в JavaScript, но теперь мне было интересно, существует ли в настоящее время существующий путь / процедура для компиляции простого исходного кода Java в ASM.JS, и что это будет?

Еще одна причина, почему можно этого захотеть: Java-to-ASM.js вполне может работать быстрее, чем Java-to-Dalvik на некоторых телефонах Android!

2 ответа

Решение

asm.js (в настоящее время) разработан как цель для языков, которые вручную управляют распределением и выпуском памяти - например, C/C++. В настоящее время он не может обрабатывать языки с семантикой сборки мусора, что может показаться глупым, учитывая, что это JavaScript, который является средой выполнения сборки мусора.

Если вы действительно хотите пойти по кругу, пропустите Java-код через j2c, а затем передайте тот вывод C++ через emscripten, который скомпилируется в asm.js.

Другой возможностью было бы передать код Java через компилятор LLVM с помощью VMKit и передать его через emscripten asm.js llvm backend...

С 2020 года вы, вероятно, захотите перенести на веб-сборку вместо asm.js. В настоящее время доступны следующие инструменты:

  • Байткодер
  • JWebAssembly (без сборки мусора с текущей реализацией WASM)
  • TeaVM (поддержка WASM экспериментальная)

Не только сборщик мусора, но и виртуальная машина Java написана на C / C++, asm.js комментирует возможность компиляции "целых виртуальных машин из C / C++ в JavaScript и реализации JIT, генерирующих JavaScript".

Прямо сейчас (июнь 2015 г.) эта возможность далека от реальной, поэтому придерживайтесь GWT (я бы не советовал), если вам так хочется.

Другие вопросы по тегам