Открытая лекция «Всё, что вы хотели знать о рефлексии в Kotlin: что это, как часто её используют, почему она так долго работает и как её сделать быстрее»

Регистрация

29 октября в 18:00 МСК приглашаем на открытую лекцию Анастасии Бирилло «Всё, что вы хотели знать о рефлексии в Kotlin: что это, как часто её используют, почему она так долго работает и как её сделать быстрее». Лекция пройдёт в гибридном формате: очно в БЦ «Таймс» (Санкт-Петербург, ул.Кантемировская, д.2) и онлайн. Все подробности мы пришлём ближе к лекции всем зарегистрированным участникам.

Анастасия — программист-исследователь JetBrains Research в лаборатории ML4SE (Machine Learning Methods in Software Engineering), выпускница и преподавательница CS центра.

На этой лекции мы не будем рассматривать все возможности, которые предоставляет рефлексия в общем случае. Мы разберём довольно конкретную задачу «Как найти все классы, помеченные аннотацией и\или имеющие определённый супертип?» (и аналогичную для функций). Как бы вы решали такую задачу? Ведь если мы будем использовать стандартную рефлексию, то время старта приложения будет слишком долгим. Если захотим использовать Annotation processing, то ускорим процесс, но столкнёмся с некоторыми неудобствами и ограничениями в работе. Если вариантов больше не осталось, то приходите на лекцию послушать про новый подход — плагин для компилятора Kotlin, который позволяет перенести решение этой задачи в compile-time без существенных ограничений и решать ее в run-time за O(1). Кроме того, с помощью него можно решить данную задачу в общем виде и искать сущности по любому (почти) условию.
За время лекции мы познакомимся с понятием рефлексии в контексте данной задачи, рассмотрим как часто её решают на примере анализа 10K самых популярных Kotlin репозиториев и обсудим плюсы и минусы существующих решений. После чего разберёмся, что же такое плагины для Kotlin компилятора, почему именно они могут помочь решить данную задачу эффективно и разберём, как устроен плагин Reflekt, решающий данную задачу. Вместе мы погрузимся во внутренности работы компилятора, разберём все тонкости реализации плагина и не самые очевидные проблемы, возникающие при разработке плагинов, о которых нигде не пишут :)