Часто задаваемые вопросы о KSP
Почему KSP?
У KSP есть несколько преимуществ перед kapt:
Он работает быстрее.
API удобнее для пользователей Kotlin.
Он поддерживает обработку в несколько раундов для сгенерированных исходников Kotlin.
Он разрабатывается с учетом совместимости с мультиплатформенными проектами.
Почему KSP работает быстрее kapt?
Для генерации заглушек Java kapt должен анализировать и разрешать все ссылки на типы, тогда как 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, в том числе предварительных выпусков (Beta или RC).
Есть ли для библиотек другие требования к версиям, помимо Kotlin?
Ниже перечислены требования к библиотекам и инфраструктуре:
Android Gradle Plugin 7.1.3+
Gradle 6.8.3+
Каковы дальнейшие планы развития KSP?
Запланированы следующие задачи:
Поддержка нового компилятора Kotlin
Улучшение поддержки мультиплатформенных проектов. Например, запуск KSP для подмножества целевых платформ и совместное использование вычислений между целевыми платформами.
Повышение производительности. Предстоит выполнить множество оптимизаций!
Продолжение исправления ошибок.
Если вы хотите обсудить какие-либо идеи, свяжитесь с нами в канале #ksp в Kotlin Slack (получить приглашение). Также приветствуются сообщения об ошибках и запросы новых функций на GitHub, а также пул-реквесты!
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ksp-faq.html