Spec-Zone.ru › Scala 3.2

Класс inline.inline

Исходный код

class inline extends StaticAnnotation

Аннотация для методов, которые оптимизатор должен встраивать.

Обратите внимание, что по умолчанию Scala оптимизатор отключён, и никакие вызовы не встраиваются. Смотрите -opt:help для информации о том, как включить оптимизатор и встраиватель.

Когда встраивание включено, встраиватель всегда пытается встроить методы или вызовы, помеченные @inline (при условии, что встраивание из определяющего класса разрешено, см. -opt-inline-from:help). Если встраивание невозможно, например, потому что метод не является final, будет выведено предупреждение оптимизатора. См. -opt-warnings:help для получения подробностей.

Примеры:

@inline   final def f1(x: Int) = x
@noinline final def f2(x: Int) = x
         final def f3(x: Int) = x

def t1 = f1(1)              // inlined if possible
def t2 = f2(1)              // not inlined
def t3 = f3(1)              // may be inlined (the inliner heuristics can select the callsite)
def t4 = f1(1): @noinline   // not inlined (override at callsite)
def t5 = f2(1): @inline     // inlined if possible (override at callsite)
def t6 = f3(1): @inline     // inlined if possible
def t7 = f3(1): @noinline   // not inlined
}

Примечание: скобки необходимы при аннотировании вызова внутри более крупного выражения.

def t1 = f1(1) + f1(1): @noinline   // equivalent to (f1(1) + f1(1)): @noinline
def t2 = f1(1) + (f1(1): @noinline) // the second call to f1 is not inlined
Предки
Тракт StaticAnnotation
Класс Annotation
Класс Object
Тракт Matchable
Класс Any

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/inline.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API