Avatar
omochimetaru 6/14/2021 8:19 AM
インライン化するかどうかの判断に影響を与えるのは @_inline(always), @_inline(never) などがありますね。
8:20 AM
そのメソッドがインライン化されるかどうかとは別の話として、
8:20 AM
そのメソッドを呼び出している別のメソッドとまとめてインライン化できるかどうか、というのが変わってきますね
8:21 AM
public struct S1 { @inlineable public func f2() { f3() } private func f3() { compute() } } (edited)
8:24 AM
例えばこうなってたとき、 f2を呼び出す外部モジュールにおいては、f2の中のf3はインライン展開されなかった気がします。
8:24 AM
で、f2の中のf3のインライン展開も怪しい気がします。↑の話があるので。
8:25 AM
@usableFromInline というのがあって
8:25 AM
public struct S2 { @inlineable public func f2() { f3() } @usableFromInline private func f3() { compute() } }
8:26 AM
こうすると、 f2の中にf3はインライン展開されるし、 f2をインライン展開する外部のモジュールにおいて、f3もインライン展開される、って事だったと思います。
8:26 AM
このへんかなりややこしくてちょっと自信ないですけど。
8:26 AM
public + inlineable は、 ↑の @usableFromInline と同じ状態になるので
8:26 AM
差が出ているならそういうことかもしれません。