<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 5, 2017, at 1:17 PM, Michael Ilseman via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Another benefit of the always-emit-into-client-and-omit-from-libary-binary is cross-call consistency. A function foo could change in a way such that *all* calls using either the new or old version is fine, but some interleaving of calls to new and old versions is invalid. Having to reason about and test interleaving is very difficult. This further extends to groups of functions that want to maintain a cross-function-group call consistency (e.g. multiple methods on a struct).</span></div></blockquote></div><br class=""><div class="">This is not true though, because any calls to the inlinable function from inside its defining module will always use the ‘latest’ definition.</div><div class=""><br class=""></div><div class="">Or imagine if you link multiple frameworks that all inline different versions of an inlinable function. I don’t think there’s a way to make the guarantee you described.</div><div class=""><br class=""></div><div class="">Slava</div></body></html>