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