Мы рады представить вам Kotlin 1.1, новую версию языка программирования Kotlin.
Наша цель — сделать выразительный статически типизированный язык, на котором можно эффективно писать все компоненты современного приложения. Сегодняшний релиз делает два важных шага в этом направлении.
Во-первых, поддержка JavaScript перестала быть экспериментальной. Доступны все возможности языка, значительная часть стандартной библиотеки и, конечно, возможность взаимодействовать с кодом на JavaScript. Теперь клиентскую часть приложения тоже можно мигрировать на Kotlin, причем нет необходимости отказываться от привычных библиотек и фреймворков, таких как React.
Во-вторых, появилась поддержка корутин, которые представляют собой легковесный аналог потоков, что позволяет хорошо масштабировать приложения, поддерживая большую нагрузку на одной машине. Кроме того, корутины сильно упрощают написание асинхронного кода, что важно для “отзывчивости” UI на всех платформах.
Подробнее об этих изменениях мы расскажем ниже. Среди других новшеств хочется отметить type aliases, bound callable references, destructuring in lambdas. Полный список интересных изменений можно найти на нашей страничке What's new (обратите внимание на запускаемые примеры!).
Корутины (Сопрограммы)
Корутины в Kotlin позволяют писать асинхронный код так же просто, как обычный — синхронный.
Асинхронного кода становится все больше, а писать его зачастую довольно сложно. Чтобы облегчить эту работу, мы добавили в Kotlin поддержку корутин на уровне языка с помощью всего одного примитива — suspending functions. Исполнение такихфункций может быть приостановлено без блокировки какого-либо потока и возобновлено позже. Причем контроль над логикой приостановки и возобновления исполнения полностью принадлежит автору библиотеки, что позволяет использовать корутины как легковесную замену потоков. Теперь вместо дорогой блокировки потока можно использовать почти бесплатную приостановку корутины.
В синтаксис языка добавилось очень мало (один модификатор), но библиотекам предоставляется огромный простор для деятельности. Например, в проекте kotlinx.coroutines мы уже реализовали поддержку Rx, CompletableFuture, NIO, JavaFx и Swing. Подобные библиотеки можно (и планируется) написать для Android и JavaScript. Даже конструкции, которые являются встроенными в других языках программирования, в Kotlin можно реализовать в библиотеке: например, generators/yield из Python, channels/select из Go или async/await из C#:
// runs the code in the background thread pool
fun asyncOverlay() = async(CommonPool) {
// start two async operations
val original = asyncLoadImage("original")
val overlay = asyncLoadImage("overlay")
// and then apply overlay to both results
applyOverlay(original.await(), overlay.await())
}
// launches new coroutine in UI context
launch(UI) {
// wait for async overlay to complete
val image = asyncOverlay().await()
// and then show it in UI
showImage(image)
}
Подробности в документации
Важное замечание. Несмотря на все преимущества, которые дают корутины, их дизайн еще сравнительно молод. Поэтому требуется интенсивная проверка его на практике, чтобы появилась уверенность, что мы все сделали правильно. Поэтому в 1.1 корутины выходят под “экспериментальным” флажком. Мы предполагаем, что языковые конструкции вряд ли изменятся, однако в Kotlin 1.2 возможны изменения в API, связанном с корутинами.
Поддержка JavaScript
Как мы говорили выше, все возможности Kotlin теперь одинаково доступны как для JVM/Android, так и для JavaScript (кроме reflection, но мы работаем над этим). Это позволяет разрабатывать веб-приложение целиком на Kotlin, что мы успешно и делаем в некоторых продуктах внутри JetBrains. Мы планируем опубликовать соответствующую документацию и инструкции в ближайшее время.
В Kotlin для JavaScript поддерживаются динамические типы для взаимодействия с кодом на JavaScript. Для типизированного доступа к популярным библиотекам можно использовать ts2kt converter с заголовками из DefinitelyTyped.
Подробности в документации
Инструментарий
Мы стараемся выпускать новую функциональность, не касающуюся синтаксиса языка, в промежуточных релизах. Вот самое яркое, что появилось со времен Kotlin 1.0:
- Плагины для всех основных IDE: IntelliJ IDEA, Android Studio, Eclipse и NetBeans
- Инкрементальная компиляция в IntelliJ IDEA и Gradle
- Плагины к компилятору для лучшей интеграции с Spring, JPA и Mockito (расширяемые классы по умолчанию и автоматическая генерация пустых конструкторов)
- kapt — инструмент для обработки аннотаций
- Проверки кода, специфичные для Android-проектов
- И конечно в IDE добавилось много-много новых диагностик, проверок, квикфиксов, рефакторингов и улучшений в автодополнении
Но мы не останавливаемся и уже сейчас готовим улучшения в инструментарии для версий 1.1.х.
Первый год Kotlin: сообщество и распространение
Если коротко, то мы растем! Более 160 тысяч программистов использовали Kotlin за прошедший год. Число строк на Kotlin в опенсорсных проектах на Github выросло с 2.4 до 10 миллионов. В slack-канале Kotlin на момент релиза 1.0 было 1’400 человек — теперь 5'900. Каждую неделю по всему миру появляются новые митапы и юзер-группы, организованные активными членами сообщества. Публикуется всё больше новых книг и онлайн-курсов.
Kotlin примерно одинаково популярен среди server-side и Android разработчиков. В Spring Framework 5.0 появилась поддержка Kotlin, равно как и в vert.x 3.4. Gradle и TeamCity используют DSL на базе Kotlin для программирования сценариев сборки. Cписок всех основных Kotlin проектов и библиотек можно посмотреть на kotlin.link.
Большое количество всемирно известных компаний стали использовать Kotlin в продуктовом коде: Amazon Web Services, Pinterest, Coursera, Netflix, Uber, Square, Trello, Basecamp и многие-многие другие. Corda — распределенная система документооборота разработанная консорциумом известных банков (таких как Goldman Sachs, Wells Fargo, J.P. Morgan, Deutsche Bank, UBS, HSBC, BNP Paribas, Société Générale), с самого начала разрабатывалась на Kotlin. Kotlin используют и в российских компаниях — например, Avito, Рокетбанк и Aviasales.
Мы бесконечно благодарны всем нашим пользователям, контрибьюторам и активным сторонникам во всех уголках мира. Ваша поддержка очень важна для нас!
Соберите свой Kotlin 1.1 Event
Релиз — хороший повод встретиться с другими пользователями Kotlin. Мы подготовили набор материалов, который поможет вам организовать такую встречу в своем городе: 23 марта мы будем транслировать живую встречу с представителями команды Kotlin, плюс вы можете получить сувениры и набор для Future Features Survey. Больше информации и форма регистрации здесь.
Что дальше
Для того, чтобы сделать Kotlin по-настоящему универсальным full-stack языком, мы продолжаем работать над языковой и инструментальной поддержкой компиляции общего кода сразу для нескольких платформ. Это позволит писать модули, код которых используется как на стороне клиента, так и на стороне сервера. Также мы продолжаем улучшать инструментарий и поддержку сторонних библиотек на JavaScript. Инкрементальная компиляция для JavaScript уже на подходе, мы ее выпустим в одной из версий 1.1.х.
Поддержка Java 9 появится к выходу официальной версии этой платформы (этим летом).
Мы ожидаем увидеть много отзывов о корутинах и будем по мере их поступления работать над улучшением дизайна, производительности и библиотек.
Но, в общем и целом, наш следующий релиз будет в первую очередь сфокусирован на качестве инструментария для уже существующих возможностей языка, повышении производительности, расширении инфраструктуры и починке багов. Kotlin постепенно переходит в разряд ключевых технологий для большого числа проектов, и мы реагируем соответственно нашему росту.
P.S. Распространение Kotlin на все основные платформы является для нас стратегическим направлением. Мы уже можем запускаться на серверах, десктопах, Android-устройствах и в браузерах. В обозримом будущем мы планируем охватить и “мир без виртуальных машин” и поддержать такие платформы как, например, iOS и встраиваемые системы. Сейчас в JetBrains над этим трудится прекрасная команда Kotlin Native, и мы надеемся показать что-то интересное в относительно скором времени.
Как попробовать
Как и всегда, можно попробовать Kotlin онлайн прямо в браузере: try.kotlinlang.org.
Maven/Gradle: Используйте 1.1.0 в качестве номера версии компилятора и стандартной библиотеки.
IntelliJ IDEA: в 2017.1 уже встроена поддержка Kotlin 1.1, в более ранних версии нужно просто обновить плагин до версии 1.1.
Android Studio: Установите или обновите плагин с помощью Plugin Manager.
Eclipse: новый плагин доступен в Marketplace.
Сommand-line компилятор можно взять с релизной странички на Github
Совместимость. В Kotlin 1.1 язык и стандартная библиотека полностью обратно совместимы (по модулю багов): т.е. если что-то было собрано и запускалось под 1.0, оно продолжит работать в 1.1. Чтобы облегчить постепенную миграцию для больших команд, мы предусмотрели специальный ключ компилятора, который отключает все новые языковые возможности в 1.1. В этом документе мы подробно описали все тонкости миграции.
Автор: JetBrains