ЧАВО
Почему KSP?
KSP имеет несколько преимуществ перед kapt:
Он быстрее.
API более удобен для пользователей Kotlin.
Он поддерживает обработку нескольких раундов сгенерированных Kotlin-источников.
Он разрабатывается с учетом совместимости с несколькими платформами.
Почему KSP быстрее, чем kapt?
kapt должен анализировать и разрешать каждую ссылку на тип для генерации Java-заглушек, тогда как KSP разрешает ссылки по мере необходимости. Передача в javac также занимает время.
Кроме того, модель инкрементальной обработки KSP имеет более мелкую гранулярность, чем просто изоляция и агрегация. Она находит больше возможностей для избежания повторной обработки всего. Также, поскольку KSP отслеживает разрешения символов динамически, изменение файла с меньшей вероятностью повлияет на другие файлы, а это значит, что набор файлов для повторной обработки будет меньше. Это невозможно для kapt, потому что он делегирует обработку javac.
KSP специфичен для Kotlin?
KSP может обрабатывать и Java-источники. API унифицирован, то есть при анализе Java-класса и Kotlin-класса в KSP вы получаете единую структуру данных.
Как обновить KSP?
KSP имеет API и реализацию. API редко изменяется и обратно совместим: могут быть новые интерфейсы, но старые интерфейсы никогда не изменяются. Реализация связана с определенной версией компилятора. С новым релизом поддерживаемая версия компилятора может измениться.
Процессоры зависят только от API и поэтому не связаны с версиями компилятора. Однако пользователям процессоров необходимо повышать версию KSP при повышении версии компилятора в своем проекте. В противном случае произойдет следующая ошибка:
ksp-a.b.c is too old for kotlin-x.y.z. Please upgrade ksp or downgrade kotlin-gradle-plugin
Например, какой-то процессор выпущен и протестирован с KSP 1.0.1, который строго зависит от Kotlin 1.6.0. Чтобы он работал с Kotlin 1.6.20, единственное, что вам нужно сделать, это повысить KSP до версии (например, KSP 1.1.0), которая построена для Kotlin 1.6.20.
Можно ли использовать более новую реализацию KSP с более старым компилятором Kotlin?
Если версия языка одинаковая, компилятор Kotlin должен быть обратно совместимым. Повышение версии компилятора Kotlin должно быть тривиальным в большинстве случаев. Если вам нужна более новая реализация KSP, пожалуйста, соответствующим образом обновите компилятор Kotlin.
Как часто вы обновляете KSP?
KSP стремится максимально точно следовать Семантическому Версионированию. С версией KSP major.minor.patch,
majorзарезервировано для несовместимых изменений API. Нет предварительно определенного графика для этого.minorзарезервировано для новых функций. Это будет обновляться примерно раз в квартал.patchзарезервировано для исправления ошибок и новых версий Kotlin. Оно обновляется примерно раз в месяц.
Обычно соответствующий релиз KSP доступен в течение нескольких дней после выпуска новой версии Kotlin, включая предварительные версии (Бета или RC).
Помимо Kotlin, существуют ли другие требования к версиям библиотек?
Вот список требований к библиотекам/инфраструктурам:
Android Gradle Plugin 4.1.0+
Gradle 6.5+
Какие планы на будущее KSP?
Были запланированы следующие пункты:
Поддержка новых компиляторов Kotlin
Улучшение поддержки многоплатформенности. Например, запуск KSP на подмножестве целевых платформ/обмен вычислениями между целевыми платформами.
Улучшение производительности. Есть много оптимизаций!
Продолжать исправлять ошибки.
Пожалуйста, не стесняйтесь обращаться к нам в #ksp канале в Kotlin Slack (получить приглашение), если вы хотите обсудить какие-либо идеи. Также приветствуются отправка GitHub-задач/предложений по функциям или запросов на вытягивание.
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ksp-faq.html