<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=""><div><blockquote type="cite" class=""><div class="">On Mar 27, 2017, at 1:55 PM, Helge Heß via swift-server-dev &lt;<a href="mailto:swift-server-dev@swift.org" class="">swift-server-dev@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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Primarily this lacks an implementation of a CoW backed value type which could avoid thread safe RC and hence be significantly faster.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote></div><div class=""><br class=""></div><div class="">I've got a PR for one of those, as well as for non-`inout` argument passing: &lt;<a href="https://github.com/tanner0101/request-types/pull/2" class="">https://github.com/tanner0101/request-types/pull/2</a>&gt;</div><div class=""><br class=""></div><div class="">Is the use of `inout` here purely a performance hack, or is it semantically significant? That is, are you *supposed* to write into the request in ways that middlewares above you will see? If so, I question whether that's a good idea—it seems to me that communication back up the stack should be through the response, not the request.</div><div class=""><br class=""></div><div class="">If not, though, it's worth noting that the ownership manifesto includes a `shared` argument-passing semantic where the callee does not take ownership of (i.e. copy/retain) the argument, but also cannot mutate it. In other words, a `shared` argument has the semantics of a normal argument, but the performance characteristics of an `inout` argument. And I suspect that this would not have trouble with escaping closures; they would just capture with non-`shared` semantics, incurring a copy/retain but otherwise working just fine.</div><div class=""><br class=""></div><div class="">If we are going to get that, and it has the semantics we're going to want, we might be better off not doing `inout` right now, and instead adding `shared` to these APIs once it's an option.</div><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><div class=""><div style="font-size: 12px; " class="">--&nbsp;</div><div style="font-size: 12px; " class="">Brent Royal-Gordon</div><div style="font-size: 12px; " class="">Architechies</div></div></span>

</div>
<br class=""></body></html>