Задать вопрос
@abovefortune

Какая разница между noinline и crossInline лямбдами?

Пытаюсь понять разницу между crossInline и noinline лямбдами. Оба ключевых слова запрещают non-local return.
Смотрю байткод. NoInline не встраивает лямбду, а создает инстанс анонимного класса который реализует Function0. СrossInline же делает почти тоже самое только в байткоде создается public final class. Он также реализует Function0 и наследует класс Lambda. В случае с crossInline создается анонимный экземпляр этого класса.
Т.е разницы в оптимизации нет (от анонимных классов мы не уходим в обоих случаях), а есть тонкая разница внутри байткода.

Правильно ли я понимаю что основная разница в том что в случае crossInline у нас нет гарантии что лямбда заинлайнится (компилятор сам решит), а в случае noInline есть гарантия что лямбда точно не будет инлайниться?
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Сложный 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Android-разработчик
    12 месяцев
    Далее
  • Нетология
    Android-разработчик с нуля
    14 месяцев
    Далее
  • OTUS
    Kotlin Backend Developer. Professional
    5 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы