Вопросы и ответы по KSP
Почему 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 в Slack Kotlin (получить приглашение), если вы хотите обсудить какие-либо идеи. Также приветствуются сообщения с запросами на функции или запросами на исправление ошибок на GitHub.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ksp-faq.html