company_banner

Kotlin 1.3 с поддержкой корутин, бета-версией Kotlin/Native и не только

    На днях вышел Kotlin 1.3 с комплектом сопутствующих библиотек, инструментов сборки и учебных материалов.

    Мы делаем Kotlin как инструмент для разработки приложений любого масштаба на любых платформах. В Kotlin 1.3, благодаря корутинам, читать и писать неблокирующий асинхронный код стало легко и удобно. Масштабируемость стала гораздо доступнее. В новом релизе мы также выпустили бета-версию Kotlin/Native, позволяющую компилировать код Kotlin непосредственно в машинный код. Мультиплатформенные возможности Kotlin теперь работают на всех поддерживаемых платформах, что позволяет, например, использовать одну и ту же бизнес-логику в приложениях для Android и iOS. Общую логику можно также использовать для серверов и мобильных и веб-клиентов. Кроме того, появилась возможность писать легко переносимые мультиплатформенные библиотеки, которые возьмут на себя большинство повседневных задач.

    image

    В ближайшее время мы проведем серию вебинаров по основным возможностям версии 1.3, записывайтесь здесь.

    Сообщество и экосистема


    В этом году экосистема Kotlin росла беспрецедентными темпами. С января 2018 года код на Kotlin редактировали приблизительно 1,5 миллиона пользователей — по сравнению с прошлым годом их число более чем удвоилось. База знаний на StackOverflow и в нашем публичном Slack тоже растет впечатляющими темпами. И мы очень рады, что сообщество Kotlin такое отзывчивое и доброжелательное.

    Нам нравится, как растет и развивается экосистема, сложившаяся вокруг Kotlin. Kotlin дружит с Google Cloud Platform, Spring Framework и Gradle, не говоря уже об официальной поддержке на платформе Android. Сообщество open source создает превосходные библиотеки, такие как RxKotlin, mockito-kotlin, TornadoFX, Kodein и ΛRROW. Уже переходят на Kotlin или планируют миграцию такие проекты, как Square's Okio и LibreOffice. Приглашаем всех присоединяться к экосистеме Kotlin со своими идеями и проектами.

    В Kotlin 1.3 внесли свой вклад не только сотрудники JetBrains, но и многие другие люди, которые создавали пулл-реквесты, баг-репорты и поддерживали с нами всяческую обратную связь. Мы очень ценим вашу помощь в развитии Kotlin!

    Корутины официально стабильны


    Корутины — это современный способ написания неблокирующего асинхронного кода, который легко понимать и удобно дорабатывать. Этот мощный инструмент можно использовать в самых разных целях — от перекладывания вычислительной нагрузки на фоновые исполнители (worker) до реализации сложных сетевых протоколов. Библиотека kotlinx.coroutines, версия 1.0 которой вошла в этот релиз, представляет собой прочный фундамент для управления асинхронными задачами в любом масштабе, включая их составление, отмену, обработку исключений и случаи, связанные с пользовательским интерфейсом.

    Начните уже сегодня на kotl.in/coroutines!

    Kotlin/Native Beta


    Kotlin/Native использует LLVM для компиляции исходных кодов на Kotlin в самостоятельные двоичные файлы (виртуальная машина не нужна) для разнообразных операционных платформ и процессорных архитектур, включая iOS, Linux, Windows, Mac и даже WebAssembly и встраиваемые системы, такие как STM32. Kotlin/Native поддерживает полностью автоматическое управление памятью, обеспечивает взаимодействие с C и Objective-C (и Swift) и позволяет работать с API платформ, такими как Core Foundation или POSIX, и любыми нативными библиотеками, которые могут понадобиться разработчику.

    Среда выполнения Kotlin/Native поощряет использование неизменяемых данных и запрещает любые попытки передачи незащищенного изменяемого состояния между потоками. На самом деле с точки зрения Kotlin/Native потоков не существует, они абстрагированы в качестве низкоуровневого аспекта реализации и заменены исполнителями (worker) — это безопасный и удобный способ реализации параллелизма.

    Познакомиться с Kotlin/Native можно по адресу kotl.in/native.

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


    Перед Kotlin в явном виде поставлена задача работать на всех платформах, однако мы рассматриваем ее как предпосылку к более важной цели — использованию одного и того же кода на разных платформах. Поддержка JVM, Android, JavaScript и Native позволяет Kotlin работать с любыми компонентами современных приложений. А это дает бесценную возможность переиспользования кода и имеющихся наработок — ведь куда лучше сосредоточиться на решении действительно сложных задач, а не на реализации того же самого кода по два раза и больше. Хотя мультиплатформенные возможности в Kotlin остаются экспериментальными, версия 1.3 — это большой шаг вперед.

    Вместе с Kotlin 1.3 поставляется комплект мультиплатформенных библиотек для всех повседневных задач, например: HTTP, сериализация и управление корутинами. Использование подобных библиотек — самый простой способ писать мультиплатформенный код. Кроме того, вы можете создавать и собственные мультиплатформенные библиотеки, абстрагирующие особенности определенных платформ в едином API.

    Начните переиспользовать код на разных платформах уже сегодня: kotl.in/multiplatform.

    Инструменты для Kotlin/Native и Multiplatform


    В Kotlin 1.3 доступны инструменты разработки Kotlin/Native и мультиплатформенных проектов в средах разработки IntelliJ IDEA Community Edition, IntelliJ IDEA Ultimate и Android Studio. Во всех трех IDE можно использовать всю функциональность редактирования кода — подсветку ошибок, комплишен, навигацию и рефакторинг. В будущем мы займемся реализацией более сложных возможностей и интеграцией с коммерческими инструментами.

    Ktor 1.0 Beta


    Ktor — наш фреймворк для взаимосвязанных приложений, реализующий весь стек HTTP с полной асинхронностью на основе корутин, — уже в бета-версии и доступен по адресу ktor.io.

    Другие улучшения


    Кроме всего вышеупомянутого в этом релизе появился целый ряд других возможностей и улучшений:


    Полное описание всех нововведений можно прочитать здесь (на английском языке). Также вы можете ознакомиться с журналом изменений и с руководством по совместимости.

    KotlinConf


    Мы опубликовали все видео с конференции KotlinConf 2018, на которой обсуждались главные темы Kotlin 1.3. Посмотрите вступительный кейноут, чтобы подробнее разобраться во всем самом новом и важном:


    Записи всех семинаров с KotlinConf 2018 доступны на JetBrains TV.

    Изучение Kotlin


    Мы очень стараемся сделать изучение Kotlin легким и приятным. Для этого существует много ресурсов, среди которых мы хотели бы выделить следующие:


    Для программистов всех уровней отличным отправным пунктом послужат вебинары по Kotlin 1.3.

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


    Как и всегда, вы можете попробовать Kotlin онлайн по адресу play.kotl.in.

    • Maven, Gradle и npm: используйте номер версии 1.3.0 для компилятора и стандартной библиотеки. Документация здесь.
    • IntelliJ IDEA: Kotlin 1.3 будет включен в версию 2018.3, а в более ранних выпусках достаточно установить или обновить плагин Kotlin до версии 1.3.
    • Android Studio: установить или удалить плагин можно с помощью Plugin Manager.
    • Eclipse: плагин можно установить через Marketplace.
    • Компилятор для командой строки можно загрузить на странице выпуска в Github.

    Let’s Kotlin!

    Ваша команда JetBrains
    The Drive to Develop

    JetBrains

    376,00

    Делаем эффективные инструменты для разработчиков

    Поделиться публикацией

    Похожие публикации

    Комментарии 28
      0
      Империя наносит ответный удар? Так кто же фаворит Flutter или Kotlin/Native?
        +1
        Как всегда империя победит… Патаму что у нее легионы
          0
          У Kotlin/Native нет SDK как у Flutter, пока не очень понятно, зачем он нужен под Android.
            0
            Kotlin/Native нужен для iOS. А вообще у Kotlin (мультиплатформенного) идеология немного другая. Основная суть заключается в том, что большая часть логики выносится в общие модули и в платформенных остаются только привязки к специфичным вещам и в том числе и привязки к UI.
            Вот вопрос насколько много общей логики можно вынести и как ее потом просто будет привязывать к UI пока остается открытый.
          0
          Я правильно понимаю, что при компиляции Kotlin в native нельзя будет использовать библиотеки, написанные на других JVM-языках? Или там какая-то магия присутствует?

          И да, интересно бы увидеть какие-нибудь курсы или книги не для бывших джавистов, но и не с полного нуля, а для свитчеров с других языков, например, с C++ или с C#.
            0
            В Kotlin/Native нет jvm от слова вообще. Вы не то что не можете использовать библиотеки на других JVM языках, а даже не все библиотеки на Kotlin вам доступны — только те, чьи авторы позаботились о multiplatform в целом и native в частности.
              +1
              И нет никакого аналога .Net Standart, чтоб любой совместимый язык взял, скомпилил библиотеку и запускай хоть на винде, хоть на линуксе, хоть на ios, хоть на Tizen?
                +1
                С++
                  0
                  Спасибо, пожалуй продолжу использовать нормальный чуть более человечный язык C#
                +1
                Получается, что вся эта история с kotlin/native нужна только для того, чтобы разработчик мог переключиться на нативные приложения, зная синтаксис kotlin jre?
                Я полагал, что там придумали способ юзать всю мощь существующих библиотек, а, получается, что условные Jackon'ы надо пилить с нуля :(
                  0
                  Это надо чтоб Oracle Java/Native запилила, а тады JVM на свалку истории придется отправить.Haskell и Go без всяких виртуальных машин живут в нативе и GC в коробке.
                  Scala тоже Native проект имеет и да, мягкотелые тоже смотрют как Net приложения в native запускать.
                  И все имеют интероп к язку Си.Да, язык Cи будет вечным!!!
                    0
                    мягкотелые тоже смотрют как Net приложения в native запускать.
                    не просто смотрят. UWP приложения по умолчанию в Native собираются
                0
                В Kotlin/Native нет JVM, поэтому нельзя использовать библиотеки для JVM.

                В Kotlin/Native используется LLVM. Там можно пользоваться библиотеками на C (но не С++). Насколько я понял, у Kotlin/Native есть некий инструмент, который из заголовков C библиотеки создает нечто вроде SDK для Kotlin/Native и после этого из котлина можно работать с этой библиотекой примерно как из Kotlin/JVM можно работать с Java. На Mac/iOS из Kotlin/Native можно также работать и со Swift (у них семантика очень похожа, поэтому они хорошо совместимы), причем сборщик мусора Kotlin умеет удалять и циклические ссылки, в отличие от ARC.

                Так что Kotlin/Native достаточно хорошо взаимодействует с родными для каждой платформы библиотеками.
                  0
                  Становится немного непонятно, как интеграция с C-библиотеками вяжется со сборкой мусора. Например, если мы передаем в какую-то библиотечную функцию указатель на структуру или массив из Kotlin, и она сохраняет его где-то у себя во внутренностях, то сборщик мусора это никак не сможет отследить. Что в итоге может привести к use-after-free или наоборот к утечке памяти.
                    –1
                    Посмотри тут. Насколько я понимаю, стыковка Kotlin/Native и C примерно как Java и JNI. Каждая библиотека должна сама управлять временем жизни своих объектов и не допускать висящих ссылок (как в этом помогает инфраструктура Kotlin/Native, я не знаю).
                0
                Добрый день.

                А можете, пожалуйста, подсказать, когда Kotlin js (ориентировочно, конечно же) перестанет быть экспериментом?
                +5

                Хотелось бы увидеть более подробное описание того, как kotlin native сделано "внутри".


                • Объекты создаются в куче или на стеке? Если второе, то что будет с общепринятой в jvm языках практикой, когда внутри функции создаётся объект и возвращается ссылка на него? Можно ли управлять, в какой памяти, где создаётся объект? Можно ли определить свои аллокаторы?
                • В jvm есть сборщик мусора, и обычно код пишется так, что в нём граф взаимосвязей между объектами может содержать циклы. Как реализовано удаление объектов в native? Там есть свой сборщик мусора?
                • Какой оверхед по размеру создаваемой библиотеки по сравнению с чистым си?
                • Как конечное время жизни указателей, пришедших из си, сочетается с кодом в котлине? Например, если есть неизменяемый объект, содержащий указатель, который в один прекрасный момент станет невалидным?
                  0
                  The current implementation includes an automated reference counter with a cycle collector to collect cyclical garbage.
                    +1
                    На Питерском C++ meeetup создатель Kotlin/Native рассказывал, как там все сделано. Не факт, что получишь ответы на все вопросы, но в чем-то разберешься.
                    0
                    В каких-то видеинтервью с разработчиками языка я слышал, что у Kotlin есть какие-то особые планы и на разработку игр. Скажите, в этом направлении еще ведутся работы и исследования, или решили пока не идти?
                      +1
                      Перспективной видится интеграция Godot с Kotlin/Native, но мы только в самом начале пути. И кстати, очень будем рады помощи комьюнити в этом направлении.
                        0
                        спасибо, ушел думать )
                      0
                      Контракты выглядят забавно, чем-то напоминают системы верификации для императивных языков.
                        –1
                        Но кажется, что не стоит ими сильно тюнить язык. Пример из открытых вопросов с `filter`, который меняет тип результата выглядит сейчас как кастыль в системе типов.
                        +1
                        Hello Word — объем исполняемого файла порядка 450 Кб(Linux-x64).
                        Cишный код подцепил из статической библиотеки без проблем.
                        К С++ классам надо wrappers на C писать — что нудно.
                        Ну и компиляция долговатa потому что котлин компилер под JVM (gcc просто летает).
                          –1
                          > gcc просто летает

                          Но проекты пишут на java, С#, JS.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое