@inlinableАтрибут @inlinable раскрывает реализацию функции через границы модулей, позволяя компилятору подставить тело функции непосредственно в место вызова вместо традиционного вызова функции.
Обычно при вызове функции из внешнего модуля компилятор видит только её публичный интерфейс, а не реализацию. Если пометить функцию как @inlinable, её тело встраивается в публичный интерфейс модуля, что позволяет применять оптимизации вроде:
@inlinable
public func square(_ x: Int) -> Int {
return x * x
}
Используй @inlinable когда:
@inlinable, изменение её реализации становится breaking change для предкомпилированных клиентов, требуя их перекомпиляции@inlinable, должны быть как минимум @usableFromInline или public@inlinable — это инструмент точечной оптимизации для авторов библиотек. Его не стоит применять везде — используй его только для маленьких, стабильных, часто вызываемых функций, где выигрыш в производительности явно перевешивает затраты на снижение гибкости и потенциальное влияние на перекомпиляцию.
Атрибут @inlinable позволяет компилятору встраивать реализацию функции в общественный интерфейс модуля, что дает компилятору возможность инлайнить тело функции в местах вызова через границы модулей.
Новый — ещё не проверен сообществом
Вы