<div dir="ltr">Okay. That makes more sense. I was wondering where you would even have dynamic dispatch to a normal function.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 26, 2016 at 10:46 PM, Jordan Rose <span dir="ltr">&lt;<a href="mailto:jordan_rose@apple.com" target="_blank">jordan_rose@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class=""><br><div><blockquote type="cite"><div>On Jan 26, 2016, at 19:45 , Jordan Rose &lt;<a href="mailto:jordan_rose@apple.com" target="_blank">jordan_rose@apple.com</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div>On Jan 26, 2016, at 18:49 , David Turnbull via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div dir="ltr">Functions in a module go through dynamic dispatch. Operators are functions. So multiplying two complex numbers won&#39;t get inlined. The stdlib uses internal tricks so what appears as a module you import is available to be specialized and inlined.<div><br></div><div>To see this in action, try the CubeWorld demo from here: <a href="https://github.com/AE9RB/SwiftGL" style="font-size:13px" target="_blank">https://github.com/AE9RB/SwiftGL</a></div><div>Then change it so the math libraries aren&#39;t modules (move the files, delete the import statements). On my system, CPU drops from 60% to 6%. It&#39;s also the difference between 150 cubes and 1200 cubes at 60 fps. Make sure you turn on WMO.</div><div><br></div><div>I&#39;m told it won&#39;t always be this way. But it is today.</div></div></div></blockquote><br></div><div>Yep. We&#39;re planning to improve this but right now it&#39;s true: inlining and generic specialization does not happen across framework boundaries.</div></div></div></blockquote><br></div></span><div>Only the generics are really &quot;dynamic dispatch&quot;, though. Non-generic code is just &quot;function calls that aren&#39;t inlined&quot;.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Jordan</div><br></font></span></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Trent Nadeau</div>
</div>