Kotlin 1.2: общий код для JVM и JavaScript
Вчера компания JetBrains выпустила релиз Kotlin 1.2. Новая версия — большой шаг на пути к тому, чтобы сделать Kotlin наиболее удобным инструментом для разработки всех компонентов современного приложения.
В версии Kotlin 1.1 мы официально выпустили поддержку JavaScript — возможность транслировать код на Kotlin в JS и выполнять его в браузере. В этой версии мы добавляем к этому возможность переиспользования кода между JVM и JavaScript. Теперь вы можете использовать одну и ту же реализацию бизнес-логики во всех компонентах вашего приложения — бэкэнде, фронтэнде в браузере и мобильном приложении под Android. Мы также работаем над библиотеками, которые в этом помогают — в частности, над кросс-платформенной библиотекой для сериализации.
Kotlin 1.2 доступен из коробки в IntelliJ IDEA 2017.3, которая также выходит на этой неделе. Если вы используете Android Studio или более старую версию IntelliJ IDEA, вы можете обновиться при помощи диалога Tools | Kotlin | Configure Kotlin Plugin Updates.
В этот релиз внесли большой вклад наши внешние контрибьюторы, и мы хотели бы поблагодарить всех, кто отправлял нам фидбэк и баг-репорты, а особенно — тех, кто присылал нам пулл-реквесты.
Мультиплатформенные проекты
Мультиплатформенные проекты позволяют вам собрать все компоненты вашего приложения — бэкэнд, фронтэнд и Android-приложение — из общей базы кода. Такой проект состоит из общих модулей, которые содержат не зависящий от платформы код, а также платформенно-зависимых модулей, которые содержат код для конкретной платформы (JVM или JS) и могут использовать библиотеки этой платформы. Для того, чтобы вызывать платформенно-зависимый код из общего модуля, вы можете указывать ожидаемые (expect) декларации — декларации, для которых все платформенно-зависимые модули должны предоставить фактические (actual) реализации.
Более подробную информацию об использовании мультиплатформенных проектов можно найти в документации.
Как уже упоминалось, мы также работаем над библиотеками, которые помогают переносить код в общие модули:
- 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:
Другие улучшения языка и библиотеки
Новая версия также включает менее существенные улучшения в языке и стандартной библиотеке:
- Компактный синтаксис для передачи нескольких аргументов в аннотацию (литералы для массивов);
- Поддержка модификатора
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.
На стороне сервера состоялся релиз 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 является одновременно одним из самых быстрорастущих и наименее нелюбимых языков.
Рост сообществ вокруг Kotlin также производит впечатление. По всему миру существует более 100 групп пользователей Kotlin, а докладов про Kotlin столько, что мы с трудом справляемся их все отслеживать —, но для тех, про которые мы знаем, карта даёт хорошее представление о том, насколько распространено использование Kotlin.
Для тех, кто только начинает использовать 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!