- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На графике показана разница во времени компиляции двух больших проектов в JetBrains, использующих Kotlin:
Kotlin 1.2: общий код для JVM и JavaScript - 3

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

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

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

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

Kotlin во всём мире

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

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

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

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

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

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

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

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

Для тех, кто только начинает использовать Kotlin, доступно всё больше книг (в том числе наша собственная “Kotlin in Action” [23], которая уже переведена на русский [24], японский [25], китайский [26] и португальский [27]), онлайн-курсов, самоучителей и других ресурсов [28].

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

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

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

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

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

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

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

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

Автор: yole

Источник [35]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/269443

Ссылки в тексте:

[1] IntelliJ IDEA 2017.3: https://www.jetbrains.com/idea/

[2] документации: http://kotlinlang.org/docs/reference/multiplatform.html

[3] kotlin.test: http://kotlinlang.org/api/latest/kotlin.test/index.html

[4] kotlinx.html: https://github.com/kotlin/kotlinx.html

[5] kotlinx.serialization: https://github.com/kotlin/kotlinx.serialization

[6] Компактный синтаксис: http://kotlinlang.org/docs/reference/whatsnew12.html#array-literals-in-annotations

[7] Более умные смарт-касты: http://kotlinlang.org/docs/reference/whatsnew12.html#smart-cast-improvements

[8] улучшение вывода типов: http://kotlinlang.org/docs/reference/whatsnew12.html#information-from-explicit-casts-is-used-for-type-inference

[9] набор функций: http://kotlinlang.org/docs/reference/whatsnew12.html#windowed-chunked-zipwithnext

[10] What's new in Kotlin 1.2: http://kotlinlang.org/docs/reference/whatsnew12.html

[11] KotlinConf: https://kotlinconf.com/

[12] сайте конференциии: https://kotlinconf.com/talks/

[13] официальные примеры: https://developer.android.com/samples/index.html?language=kotlin

[14] стайл-гайд: https://android.github.io/kotlin-guides/

[15] более 17% проектов в Android Studio: https://android-developers.googleblog.com/2017/11/update-on-kotlin-for-android.html

[16] Spring Framework 5.0: https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga

[17] фич по поддержке Kotlin: https://docs.spring.io/spring/docs/current/spring-framework-reference/languages.html#kotlin

[18] vert.x: http://vertx.io/

[19] поддерживает Kotlin: http://vertx.io/docs/vertx-core/kotlin/

[20] Gradle Kotlin DSL: https://github.com/gradle/kotlin-dsl

[21] одним из самых быстрорастущих и наименее нелюбимых языков: https://stackoverflow.blog/2017/10/31/disliked-programming-languages/

[22] карта: http://kotlinlang.org/community/talks.html

[23] “Kotlin in Action”: https://manning.com/books/kotlin-in-action

[24] русский: https://dmkpress.com/catalog/computer/programming/java/978-5-97060-497-7/

[25] японский: https://www.amazon.co.jp/Kotlin%E3%82%A4%E3%83%B3%E3%83%BB%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3-Dmitry-Jemerov/dp/4839961743/ref=sr_1_2?ie=UTF8&qid=1511539431&sr=8-2&keywords=kotlin

[26] китайский: https://www.amazon.com/Kotlin%E5%AE%9E%E6%88%98-Svetlana-Isakova-Dmitry-Jemerov/dp/B07568C58F/ref=sr_1_3?s=books&ie=UTF8&qid=1511539582&sr=1-3

[27] португальский: https://novatec.com.br/livros/kotlin-em-acao/

[28] других ресурсов: http://kotlinlang.org/community/

[29] разработке мультиплатформенных проектов при помощи Kotlin 1.2: https://info.jetbrains.com/Kotlin-Webinar-December2017.html

[30] Kotlin Reddit: https://www.reddit.com/r/Kotlin/

[31] try.kotlinlang.org: http://try.kotlinlang.org/

[32] страницы релиза на GitHub: https://github.com/JetBrains/kotlin/releases/tag/v1.2.0

[33] обратно совместимы (по модулю багов): http://kotlinlang.org/docs/reference/compatibility.html

[34] документации: http://kotlinlang.org/docs/reference/compatibility.html#binary-compatibility-warnings

[35] Источник: https://habrahabr.ru/post/343500/