Spec-Zone.ru › Scala 3.1

Класс scala.inline

Исходный код

@deprecatedInheritance("Планируется сделать финальным в будущем", "2.13.0")
class inline extends StaticAnnotation

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

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

При включённом встраивании, встраиватель всегда будет пытаться встроить методы или места вызова, помеченные @inline (при условии, что встраивание из определяющего класса разрешено, см. -opt-inline-from:help). Если встраивание невозможно, например, потому что метод не является финальным, будет выведено предупреждение оптимизатора. См. -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.1.1/scala/inline.html

Spec-Zone.ru

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