С WebAssembly, есть ли способ взять .jar и теперь запустить его в браузере? - PullRequest
2 голосов
/ 17 февраля 2020

Мое понимание WebAssembly немного сложновато, но я видел такие проекты, как TeaVM и JWebAssembly , которые, кажется, передают Java байт-код в Webassembly. Мой вопрос: можно ли использовать какой-либо из этих инструментов для перевода всего апплета .jar во что-то, что может быть выполнено в браузере?

1 Ответ

1 голос
/ 21 февраля 2020

На данный момент нет прямой конвертации. Однако вы можете использовать JWebAssembly для реорганизации кода Applet / Java с некоторыми усилиями и ограничениями и генерировать код WebAssembly. Следовательно, вам необходимо провести рефакторинг кода вашего апплета (с языковыми ограничениями, указанными в документации проекта статус проекта и java ограничения ) и переписать GUI через DOM API из проекта API JWebAssembly.

Как JWebAssembly (wiki / FAQ) говорит:

В: Могу ли я компилировать приложения JWebAssembly Swing, AWT или Applet? A: Нет, вам нужно написать GUI через DOM API из проекта JWebAssembly API. Теоретически любой может написать библиотеку, которая реализует поддержку Swing и / или AWT. Однако, но это не рекомендуется.

Преобразование JWebAssembly похоже на преобразование 1: 1. Сгенерированный код WebAssembly по размеру аналогичен исходным файлам .class.

В этом случае TeaVM представляет собой не просто прямое преобразование, а среду разработки, специально разработанную для Javascript и с экспериментальной поддержкой в ​​настоящее время. для веб-сборки (Wasm). Он пытается восстановить исходную структуру методов, имеет оптимизатор, который удаляет мертвый код, преобразует виртуальные вызовы в вызовы stati c и т. Д. c.

As TeaVM (Github). говорит:

Поддержка WebAssembly находится в экспериментальном состоянии. Возможно, отсутствуют основные функции, доступные в JavaScript бэкэнде. Документации еще нет, и вы должны многое сделать вручную (например, встроить сгенерированный файл wasm на свою страницу, импортировать JavaScript объекты и т. Д. c). Посмотрите на образцы / тестовый модуль. Сначала вы должны изучить файл pom. xml, чтобы узнать, как создать файл wasm из Java. Затем вы можете изучить index-teavm. html и index-teavm. js, чтобы узнать, как встроить WebAssembly в вашу веб-страницу.

И, как говорится на официальном сайте:

TeaVM - это прежде всего инструмент веб-разработки. Это не для того, чтобы взять вашу большую существующую кодовую базу в Java или Kotlin и создать JavaScript. К сожалению, Java не был разработан для эффективной работы в браузере. Существуют Java API, которые невозможно реализовать без генерации неэффективных JavaScript. Вот некоторые из этих API: рефлексия, ресурсы, загрузчики классов и JNI. TeaVM ограничивает использование этих API. Как правило, вам придется вручную переписать свой код, чтобы он соответствовал ограничениям TeaVM.

Вы можете проверить этот пример проекта, источники java (например, WasmBenchmarkStarter. java) и pom . xml чтобы увидеть, как выглядит код ( образец ).

Другой похожий проект: bytecoder

С уважением

...