Kotlin 1.2: общий код для JVM и JavaScript

Вчера компания JetBrains выпустила релиз Kotlin 1.2. Новая версия — большой шаг на пути к тому, чтобы сделать Kotlin наиболее удобным инструментом для разработки всех компонентов современного приложения.


В версии Kotlin 1.1 мы официально выпустили поддержку JavaScript — возможность транслировать код на Kotlin в JS и выполнять его в браузере. В этой версии мы добавляем к этому возможность переиспользования кода между JVM и JavaScript. Теперь вы можете использовать одну и ту же реализацию бизнес-логики во всех компонентах вашего приложения — бэкэнде, фронтэнде в браузере и мобильном приложении под Android. Мы также работаем над библиотеками, которые в этом помогают — в частности, над кросс-платформенной библиотекой для сериализации.


ein_2hnxuq9vjvrlgeqqzwfutey.png


Kotlin 1.2 доступен из коробки в IntelliJ IDEA 2017.3, которая также выходит на этой неделе. Если вы используете Android Studio или более старую версию IntelliJ IDEA, вы можете обновиться при помощи диалога Tools | Kotlin | Configure Kotlin Plugin Updates.


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


Мультиплатформенные проекты


Мультиплатформенные проекты позволяют вам собрать все компоненты вашего приложения — бэкэнд, фронтэнд и Android-приложение — из общей базы кода. Такой проект состоит из общих модулей, которые содержат не зависящий от платформы код, а также платформенно-зависимых модулей, которые содержат код для конкретной платформы (JVM или JS) и могут использовать библиотеки этой платформы. Для того, чтобы вызывать платформенно-зависимый код из общего модуля, вы можете указывать ожидаемые (expect) декларации — декларации, для которых все платформенно-зависимые модули должны предоставить фактические (actual) реализации.


_aszqybus0xeuzgnrgpgo3sehuk.png


Более подробную информацию об использовании мультиплатформенных проектов можно найти в документации.


Как уже упоминалось, мы также работаем над библиотеками, которые помогают переносить код в общие модули:


  • kotlin.test, которая входит в поставку Kotlin 1.2, позволяет вам запускать одни и те же тестовые классы под JVM и JS;
  • kotlinx.html поддерживает изоморфный рендеринг — использование одного и того же кода для генерации HTML на бэкэнде и в браузере;
  • kotlinx.serialization позволяет вам легко передавать объекты Kotlin между разными слоями вашего приложения, используя JSON или Protobuf в качестве форматов сериализации.


Обратите внимание, что поддержка мультиплатформенных проектов выпущена в экспериментальном статусе. Это означает, что писать такие проекты можно уже сейчас, но в будущем у нас может возникнуть необходимость изменить её дизайн (если это случится, мы предоставим инструменты для миграции существующего кода).


Производительность компиляции


В ходе работы над версией 1.2 мы вложили много усилий в то, чтобы сделать компиляцию быстрее. Мы уже достигли ускорения около 25% по сравнению с версией 1.1, и мы видим большой потенциал для дальнейших оптимизаций, которые мы планируем выпускать в обновлениях 1.2.x.


На графике показана разница во времени компиляции двух больших проектов в JetBrains, использующих Kotlin:
mnmeuikxuosxzvazaopqiabqzsk.png


Другие улучшения языка и библиотеки


Новая версия также включает менее существенные улучшения в языке и стандартной библиотеке:


  • Компактный синтаксис для передачи нескольких аргументов в аннотацию (литералы для массивов);
  • Поддержка модификатора lateinit для свойств верхнего уровня и локальных переменных, а также проверки того, было ли lateinit-свойство инициализировано;
  • Более умные смарт-касты и улучшение вывода типов в некоторых случаях;
  • Совместимость стандартной библиотеки с ограничениями на разбиение пакетов между jar-файлами, введёнными в Java 9;
  • Новый пакет kotlin.math в стандартной библиотеке;
  • Новые функции в стандартной библиотеке для работы с последовательностями и коллекциями, в том числе набор функций для разбиения коллекции или последовательности на (возможно перекрывающиеся) группы фиксированного размера.


Более полную информацию об изменениях в языке и стандарной библиотеке можно найти в документе What’s new in Kotlin 1.2.


Kotlin во всём мире


Со времени релиза Kotlin 1.1 в марте этого года распространение его использования по всему миру сильно расширилось. Кульминацией стала KotlinConf, наша первая конференция, которую мы провели в Сан-Франциско 2–3 ноября, и на которую приехало около 1200 наших пользователей. Вы можете посмотреть записи всех докладов на сайте конференциии.


Kotlin также стал официально поддерживаемым языком для разработки под Android. Kotlin-плагин входит в комплект поставки Android Studio начиная с версии 3.0, а на сайте Android можно найти официальные примеры и стайл-гайд. Уже сейчас Kotlin используют более 17% проектов в Android Studio, в том числе многие приложения как самых ярких стартапов, так и компаний из списка Fortune 500.


ww2nannze81wudoc88vrbi4rcew.jpeg


На стороне сервера состоялся релиз Spring Framework 5.0 с большим количеством фич по поддержке Kotlin, а vert.x официально поддерживает Kotlin начиная с релиза 3.4.0. Кроме того, поддержка билд-скриптов на Kotlin уже входит в комплект поставки Gradle, и проект Gradle Kotlin DSL уже близок к релизу 1.0.


Количество строк кода в open-source репозиториях на GitHub превысило 25 миллионов. А на Stack Overflow Kotlin является одновременно одним из самых быстрорастущих и наименее нелюбимых языков.


3zwykpa1lztjjb8b7xe247sk6hy.png


Рост сообществ вокруг Kotlin также производит впечатление. По всему миру существует более 100 групп пользователей Kotlin, а докладов про Kotlin столько, что мы с трудом справляемся их все отслеживать —, но для тех, про которые мы знаем, карта даёт хорошее представление о том, насколько распространено использование Kotlin.


xg3sx9jrsuc7fymm048gya0x2jc.png


Для тех, кто только начинает использовать Kotlin, доступно всё больше книг (в том числе наша собственная «Kotlin in Action», которая уже переведена на русский, японский, китайский и португальский), онлайн-курсов, самоучителей и других ресурсов.


Пообщаться с командой: вебинар и Ask Me Anything на реддите


Чтобы рассказать вам больше о новом релизе, мы проведём вебинар о разработке мультиплатформенных проектов при помощи Kotlin 1.2 7 декабря, в 8 вечера по Москве. Не забудьте зарегистироваться; количество участников ограничено!


Кроме того, наша команда проведёт AMA (Ask Me Anything, открытое интервью) на Kotlin Reddit 5 декабря. Мы начнём в 2 часа дня по Москве и будем отвечать на ваши вопросы в течение суток.


Как обновиться


Как всегда, попробовать Kotlin можно прямо в браузере, на сайте try.kotlinlang.org


  • В Maven, Gradle и npm: Укажите номер версии 1.2.0 для компилятора и стандартной библиотеки
  • В IntelliJ IDEA: Версия 2017.3 уже включает новый плагин; в более старых версиях обновите плагин до версии 1.2
  • В Android Studio: Установите плагин из диалога Settings | Plugins или обновитесь через Tools | Kotlin | Configure Kotlin Plugin Updates
  • Компилятор командной строки можно скачать со страницы релиза на GitHub.


Совместимость: В Kotlin 1.2 язык и стандартная библиотека обратно совместимы (по модулю багов): код, который компилировался и работал в версиях 1.0 и 1.1, будет также работать в версии 1.2. Для того, чтобы большие команды могли переходить на новую версию постепенно, мы добавили опцию компилятора, которая отключает возможность использования новых фич языка и библиотеки. Информацию о возможных трудностях можно найти в документации.


Хорошего вам Kotlin!

© Habrahabr.ru