J2Cl - Лучше Поздно, Чем Никогда

На их похороны еще никто не опоздал.

Валентин Домиль На прошлой неделе команда Google наконец-то выложил исходный код фреймворка J2CL , о котором говорят с 2015 года.

Идея перевода Java в JavaScript далеко не нова, и все уже давно добились успехов с Google Web Toolkit, но сообщество ждало этот продукт как никакой другой — говорили о оно и произносило речи, но никто этого не видел.



J2CL - Лучше поздно, чем никогда

    ‌‌‍‍ С момента первого анонса прошло более 3 лет и кажется, что продукт потерял рынок, даже не родившись.

Сегодня у нас Скала.

js , Котлин.

js И JSweet , не говоря уже о том, что веб-разработку взял на себя TypeScript и для Java не осталось места.

За это время многие, даже самые преданные Javaисты, разуверились в «Java для Front-end» и обуздали тот или иной JavaScript-фреймворк.

Раз уж релиз все-таки состоялся, давайте посмотрим, что произошло и кому это может быть полезно.



Идея

По сути, эмуляция JVM в браузере — сложная задача.

Разработчики Google Web Toolkit уже давно решают эту проблему и добились определенных успехов: построили транслятор, разработали механизмы эмуляции стандартной библиотеки Java и предоставили инструменты для разработки приложений.

У такого подхода много преимуществ: статическая типизация, возможность повторного использования серверного кода в браузере, готовые инструменты в виде Java IDE. Теперь мы видим многие из подходов, изначально заложенных в GWT, в TypeScript, Web Pack и других инструментах фронтенд-разработки.

Старый Google Web Toolkit не нравился из-за его громоздкости и абстракции для построения пользовательского интерфейса.

Идея J2CL проще — позволить транслировать Java в JavaScript с наименьшими затратами, чтобы можно было легко вызывать Java из JavaScript и наоборот. И если бы еще в 2015 году действительно существовал качественный переводчик Java в JS без лишнего мусора, то неизвестно, как бы веб-разработка развивалась дальше.



Фон J2CL

В начале 2015 года команда Google GWT приняла трудное, но необходимое решение разработать новый продукт, который позволил бы использовать Java во фронтенд-разработке.

В основном это произошло из-за изменения тенденций в веб-разработке и появления новых внутренних клиентов, которые рассматривали Java для Интернета не как изолированную экосистему, а как неотъемлемую часть более крупного стека.

Это потребовало совершенно нового видения и создания с нуля инструментов, которые были бы тесно интегрированы с остальной частью экосистемы.

Достичь этих целей с помощью GWT было практически невозможно.

И хотя у GWT были инструменты для двустороннего взаимодействия с JavaScipt, фреймворк не смог избавиться от большого количества багажа в виде пользовательского интерфейса, библиотеки RPC и других прикладных API.

Что это за животное

Как разработчики говорят J2CL обеспечивает плавную интеграцию кода Java в приложения JavaScript. Это простой и легкий переводчик Java в JavaScript с упором на оптимизацию кода с использованием Компилятор замыканий .

  • Вы можете легко смешивать Java и JavaScript в одном проекте, получая лучшее от каждого языка.

  • Позволяет повторно использовать код между серверным решением, веб-приложением и платформой Android. Доступно большое количество библиотек Java, таких как Guava, Dagger и AutoValue.
  • Современный и удобный.

    Коллекция проектов построена на основе Базель , Поддерживается перезагрузка в реальном времени.

  • Проверено.

    Сообщается, что J2CL используется в проектах GSuite: GMail, Docs, Slides и Calendar.

По сути, J2CL преобразует исходный код Java в код JavaScript без использования байт-кода классов Java. Это значит, что, как и в случае с Google Web Toolkit, для компиляции проекта нужны исходники всех используемых библиотек.

Это также вызывает вопросы о поддержке функций языка Java в новых выпусках.

На данный момент разработчики обещают поддержку всех синтаксических возможностей Java 11. J2CL не поддерживает виджеты GWT, GWT RPC и другие библиотеки GWT — только базовый механизм интеграции Java и JavaScript. JSИнтероп .

Те.

Это очень ограниченная версия GWT с совершенно новым транспилятором.

А, поскольку новинка уже не совместима с GWT, то она называется не GWT, а J2CL. В результате запланированный выпуск GWT 3 станет фреймворком поверх J2CL, где все библиотеки приложений будут отделены от системного уровня самого транслятора.

Описаны существующие ограничения совместимости Java. на GitHub .

По сути, они остаются такими же, как и в GWT — нет поддержки отражения, нет сетевого API Java. Но что-то другое — не эмулируется семантика массивов и списков, например, не проверяется индекс нахождение в границах массивов.

Разработчики фокусируются не на эмуляции поведения JVM, а на синтаксических особенностях языка, чтобы обеспечить минимальные накладные расходы и не генерировать тонны JavaScript для обеспечения полной совместимости.

Хотя J2CL готов к производству, его версия OSS еще далека от этого.

Например, есть проблемы с запуском проектов в Windows и разработчики не обещают стабильного API. Выбор Bazel в качестве системы сборки для внутреннего продукта Google легко объяснить, но он не несет никакой пользы для сообщества, и сейчас нет другого способа использовать J2CL, кроме как изучить систему сборки.

Пока остается только ждать, пока сообщество напишет плагины для Maven/Gradle.

Давай попробуем

Во-первых, чтобы попробовать J2CL сейчас, вам понадобится Mac OS или Linux. Во-вторых, вам необходимо установить Базель — несколько экзотическая система сборки от Google. Теперь можно хоть что-то собрать, например HelloWorld из официального репозитория.

  
   

> bazel build src/main/java/com/google/j2cl/samples/helloworld:helloworld

Если мы посмотрим на результат, то будем приятно удивлены:

> cat bazel-bin/src/main/java/com/google/j2cl/samples/helloworld/helloworld.js document.write('Hello from Java! and JS!');

Это, конечно, ничего не доказывает, но очень радует своим минимализмом после модулей GWT. Крупных примеров приложений пока нет, будем ждать их появления.



Зачем это нужно, если есть xxx.js

Ответ на вопрос, зачем это нужно, пока найти сложно.

На первый взгляд, у J2CL очень сильная идея — повторно использовать Java для внешнего интерфейса так же, как люди используют TypeScript. С другой стороны, похоже, что проект запаздывает. Новые проекты транспиляторов JS, такие как Kotlin.js и Scala.js, реализованы как плагины компилятора и не требуют повторного анализа исходного кода.

И в этом плане J2CL — это шаг назад, так как ему нужны исходные коды, которые он будет парсить.

Отдельный момент — сам язык Java. Зачем писать многословный Java, если можно написать и серверную, и клиентскую часть на лаконичном Kotlin? Хотя если сравнивать с другим подобным проектом - JSweet , то я больше доверяю J2CL. Инструментарий JSweet гораздо более дружелюбен и готов к использованию, но у JSweet небольшое сообщество, и он почти полностью написан одним человеком.



Вы хотите сказать, что код с открытым исходным кодом?

Конечно, радует тот факт, что проект имеет открытую лицензию Apache 2.0. К сожалению, Открытый исходный код совсем не значит открытый процесс разработки .

Большинство большое разочарование возник в сообществе в связи со сложившейся ситуацией, проект J2CL был анонсирован 3 года назад, но его исходный код никто не показывает, повлиять на его финальный API нельзя и нет возможности ускорить процесс разработки, потому что некуда для отправки патчей.

Будем надеяться, что ситуация улучшится и продукт станет жизнеспособным.

Обновлять: первое приложение J2CL, перенесенное из GWT2 — https://github.com/DominoKit/dominodo Теги: #JavaScript #java #Google Web Toolkit #gwt #j2cl

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.