функции в тех местах, где она (функция) используется (вместо обычного вызова).
Q: Что делает компилятор, когда видит inline функцию, помеченую аннотацией @InlineOnly?
A: Изменяет область видимости функции на private.
Q: Но сама функция остается в скомпилированном коде?
A: Да.
Q: А как мне ее оттуда выбросить?
A: Использовать специализированные утилиты для удаления мертвого кода (вроде ProGuard).
Bonus:
Q: Но в курсе Исакова сказала, что "If the library function is always inlined in Kotlin, there is no sense to store it in the resulting jar file".
A: Да, но это не значит, что компилятор делает эту оптимизацию, поскольку дальше мы видим: "That means you won't be able to call them prompt Java. They are only accessible and visible from Kotlin". Что значит примерно следующее: "Функция будет не видна для вызова из Java кода [и может быть удалена специализированными утилитами как dead code].". Думаю, в курсе следует таки проговорить этот момент явно чтобы не вводить людей в заблуждение.
Ну, всё как мы тут натеоретизировали. Это по большому счёту было единственное разумное объяснение
Очень странно про no sense to store. Справедливо для private и internal.
Обсуждают сегодня