Ответ
Обычная функция компилируется в отдельный блок кода, и вызов такой функции приводит к переходу в этот блок. Inline-функция встраивается (подставляется) прямо в место вызова во время компиляции, что устраняет накладные расходы на вызов функции.
Преимущества inline:
- Уменьшает overhead вызова (особенно полезно для маленьких часто вызываемых функций)
- Позволяет использовать параметры с reified generics
Недостатки inline:
- Увеличивает размер бинарного кода (тело функции копируется в каждое место вызова)
- Не поддерживает некоторые возможности (например, non-local returns из лямбд)
Пример:
inline fun measureTime(block: () -> Unit) {
val start = System.currentTimeMillis()
block()
println("Time: ${System.currentTimeMillis() - start}ms")
}