我有一个包含大量内部模块的cabal包(other-modules
字段)。我相信我会从内嵌大部分功能中受益。
我是否必须通过他们所有插入pragma或GHC和Cabal是否足够智能自己进行内联?如果是,那么这个内联将如何执行?否则我必须通过插入一个pragma,我应该选择哪一个:INLINE
或INLINABLE
(或者甚至是合成的inline
function) - 以及出于什么原因?
答案 0 :(得分:1)
GHC将在高水平的优化方面做得非常好。
如果在检查Core和分析后,确定某些函数没有内联,则可以使用INLINABLE或INLINE来增加内联发生的可能性。
INLINE编译指示的主要作用是声明函数的“成本”非常低。正常的展开机器将非常热衷于内联。
虽然INLINE说"请内联我",INLINABLE说"随意内联我;使用你自己的判断"
INLINABLE通常是更好的选择,因为您不知道所有通话网站的外观。
但是,如果您对自己进行了分析并且对性能不满意,那么这样做才有意义,并且可以证明通过内联提高了性能。