-optimise
まず、Scalacは(または-Yinline
私が思うに)コンパイルするときにのみインライン化を試みることを覚えておく必要があります。
次の単純なケースを考えてみましょう。
class Meep {
@inline def f(x: Int) = x + 19
}
object Main extends App {
new Meep().f(23)
}
それをでコンパイルすると-optimise
、Scalacは警告を出します:there were 1 inliner warnings; re-run with -Yinline-warnings for details
。さて、文法のくすくす笑いを除けば、これは私に多くを与えませんでした。
それでは、で再コンパイルしましょう-Yinline-warnings
。今私は得る:At the end of the day, could not inline @inline-marked method f
。ええと、それもあまり役に立ちませんでしたが、プライベートコンパイラフラグを使用することで得られるものだと思います。:)ちなみに、インライン警告のいくつかは少し便利です-のように:(Could not inline required method f because bytecode unavailable.
これはREPLで発生します)
コンパイラのヘルプはとして説明-Yinline-warnings
しているEmit inlining warnings. (Normally surpressed due to high volume)
ので、ケースバイケースで使用する必要があると思います。
f
とにかく、上記のスニペットの定義をに変更する@inline final def f(x: Int) = x + 19
と、インライン警告が消え、メソッドが適切にインライン化されます。
それが少し役に立ったことを願っています。