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

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

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

Правильно ли я понимаю что основная разница в том что в случае crossInline у нас нет гарантии что лямбда заинлайнится (компилятор сам решит), а в случае noInline есть гарантия что лямбда точно не будет инлайниться?
  • Вопрос задан
  • 32 просмотра
Подписаться 1 Сложный Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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