
Kotlin изнутри: как работают inline-функции
Часто проводя технические собеседования, я пришел к выводу, что многие разработчики не понимают, в чем польза inline-функций, зачем нужен crossinline и как работает reified. Причина распространенных заблуждений насчет inline-функций отчасти заключается в неточном их описании, ранее опубликованном на сайте kotlinlang.org. Хочу развенчать эти заблуждения и наглядно показать, как работают inline-функции (встраиваемые) и в чем преимущество их использования.
Заблуждение 1-е: inline-функции экономят стек
Допустим, вы пытаетесь создать такую inline-функцию:
В этом случае компилятор выдаст предупреждение: “Expected performance impact from inlining is insignificant. Inlining works best for functions with parameters of functional types” (“Ожидаемое влияние встраивания на производительность незначительно. Встраивание лучше всего работает для функций с параметрами функциональных типов”). Это примерно означает, что JIT-компилятор сам прекрасно справляется с встраиванием кода и не нужно пытаться ему в этом помочь.
Inline-функции следует использовать только при передаче в функцию параметров функционального типа.
📌 Продолжение
@android_its
Часто проводя технические собеседования, я пришел к выводу, что многие разработчики не понимают, в чем польза inline-функций, зачем нужен crossinline и как работает reified. Причина распространенных заблуждений насчет inline-функций отчасти заключается в неточном их описании, ранее опубликованном на сайте kotlinlang.org. Хочу развенчать эти заблуждения и наглядно показать, как работают inline-функции (встраиваемые) и в чем преимущество их использования.
Заблуждение 1-е: inline-функции экономят стек
Допустим, вы пытаетесь создать такую inline-функцию:
private inline fun warningInlineFun(a: Int, b: Int): Int {
return a + b
}
В этом случае компилятор выдаст предупреждение: “Expected performance impact from inlining is insignificant. Inlining works best for functions with parameters of functional types” (“Ожидаемое влияние встраивания на производительность незначительно. Встраивание лучше всего работает для функций с параметрами функциональных типов”). Это примерно означает, что JIT-компилятор сам прекрасно справляется с встраиванием кода и не нужно пытаться ему в этом помочь.
Inline-функции следует использовать только при передаче в функцию параметров функционального типа.
📌 Продолжение
@android_its