KMP перешёл в stable. Что это значит?

2024-02-21 14:18:37 Время чтения 7 мин 693

Привет, это Максим Павлов из KTS. Мы создаём IT-продукты для бизнеса.

1 ноября состоялся релиз Kotlin 1.9.20, beta компилятора k2. Но для нас интереснее глобальное изменение статуса KMP. Мы используем эту технологию в мобильной разработке и написали про неё несколько статей. В статье подробнее рассмотрим, что изменилось в технологии с переходом в релиз.

Что изменилось с переходом в релиз?

  1. Технология стабильна
  2. Соблюдение совместимости
  3. Экосистема
  4. База материалов по KMP
  5. Ускорение скорости сборки
  6. Развитие библиотек
  7. Улучшение интеропа по Swift
  8. Compose multiplatform
  9. Вывод

Технология стабильна

На самом деле, она была стабильна и на уровне беты. За почти 2 года работы мы не сталкивались с проблемами, которые заблокировали бы дальнейшее использование технологии. Статус беты означает:

  1. вы можете использовать эту технологию, и JB сделает все возможное, чтобы минимизировать проблемы с миграцией
  2. технология практически завершена, но не на 100%, поэтому возможны изменения — включая основанные на обратной связи от пользователей

Соблюдение совместимости

Основная часть KMP включает в себя компилятор, библиотеки и другие компоненты, в ней покрываются основные юзкейсы переиспользования кода. Эта часть является стабильной в версии Kotlin 1.9.20.

Но KMP имеет некоторые более сложные функции, такие как классы expect/actual. Они завершены не полностью и помечены как нестабильные. При их использовании Kotlin предупредит, что они могут измениться в будущих версиях.

Всё это означает, что основная часть KMP стабильна и безопасна для использования, но некоторые более сложные функции могут быть изменены в будущем, и вам нужно быть внимательными, если решите их использовать.

Экосистема

С релизом ввели новый визард и упростили конфигурацию.

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

Для выявления и решения распространённых ошибок добавили примерно 50 диагностических сообщений в Kotlin Gradle plugin.

Теперь ошибки сборки будут отображаться более понятно и удобно в среде разработки Xcode.

В течение ближайших недель JB обещают новости о новых улучшениях тулинга.

wizard
Kotlin 1.9.0 and earlier (a standard setup)
Kotlin 1.9.20

База материалов по KMP

JB сам дорабатывает документацию. В ноябре они проведут, где расскажут про технологию и рассмотрят разные сценарии использования KMP. 

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

Список компаний, которые уже используют KMP:

  1. Baidu
  2. Qiwi
  3. Yandex
  4. Авито
  5. Netflix
  6. Тинькофф
  7. Okko
  8. VK
  9. X5

Всё это популяризирует KMP и увеличивает базу материалов.

Ускорение скорости сборки

Для повышения скорости сборки внесли несколько улучшений:

  1. Поддержка кэширования конфигурации Gradle для ускорения сборки
  2. Новый аллокатор памяти в Kotlin/Native помогает улучшить производительность управления памятью Kotlin/Native в рантайме
  3. Инкрементальная компиляция klib для более быстрой компиляции Kotlin/Native
  4. Управление кэшем компиляции перенесли в из gradle plugin в компилятор, что позволит дополнительно улучшить время компиляции и гибкость управления этим кэшем

Развитие библиотек

JB представил статистику, по которой с 2021 года библиотек KMP постоянно растёт:

Вы можете найти популярные библиотеки по многим направлениям в репозитории KMP-Awesome.

Google переводит библиотеки на Kotlin. Команда Android в Google поддерживает пользователей KMP, предоставляя мультиплатформенные версии библиотек Jetpack. Уже готовы совместимые с KMP библиотеки Collections, DataStore, Annotations и Paging.

Улучшение интеропа со Swift

Уже есть инструменты, позволяющие улучшить интероп со Swift, чтобы ios-разработчикам удобнее было использовать KMP в проектах, например SKIE.

JB планируют продолжать улучшать интероп и добавить поддержку SwiftPM.

Compose multiplatform

Плюс KMP в возможности выбора того, что шарить: бизнес-логика частично или полностью, или даже UI с Compose Multiplatform. Развитие Compose Multiplatform для iOS даст возможность шарить ещё больше кода. По нашему опыту, сейчас мы экономим 20-25% с использованием KMP.

Compose Multiplatform для Android и десктопной версии стабилен. Поддержка iOS в настоящее время находится в стадии альфа-версии, а поддержка веба (Wasm) является экспериментальной.

В релизах часто улучшается iOS-поддержка, например в релизе 1.5.10 обещают улучшение производительности рендеринга и TextField для iOS, улучшенную совместимость с UIKit, увеличение скорости компиляции для iOS с Kotlin 1.9.20. iOS-бета Compose Multiplatrofm планируется в 2024.

При этом уже есть кейсы использования Compose Multiplatform для приложений:

  1. Концепт зарубежного банковского приложения— статья на Medium.Уровень усилий, необходимых в различных сценариях, с использованием KMP (KMM) и без
  2. Кейс на канале Kotlin by JetBrains о приложении для оптимизации доставки товара на последнем этап пути, когда груз или посылка должны быть доставлены непосредственно до конечного получателя — last mile delivery

Вывод

Стейбл-версию в KMP можно смело использовать в проде. Даже при том, что технологией можно было пользоваться и раньше, сейчас добавилась гарантия совместимости.

JetBrains активно развивает популярность KMP. Можно предположить, что развитие экосистемы и сообщества сильно поможет распространению.

В продолжение развития ждём Compose Multiplatfotrm iOS, который должен сильно улучшить поддержку iOS и ускорить разработку приложений, где нужно шарить UI между платформами.

Теги: KMP