<div dir="ltr"><div>I think it&#39;s important to make the distinction between performance and semantics, but just to address this...<br></div><div><br></div><div>&gt;Unless you are talking about just the HTTP message head (which is not much more than a specialised dictionary), it doesn’t make any sense to me to pass them around as values.<br class="gmail_msg">&gt;<br class="gmail_msg">&gt;The body&#39;s of the HTTP messages can be gigabytes big and won’t usually be stored in-memory at all or at least as-is. Processing state on the body stream needs to be passed around as a reference.<div><br></div></div><div>The model we chose for Zewo is to have the request store both the head and the body. I understand that you are worried about copying around requests with large bodies. To that, I want to remind you that Swift&#39;s preferred way to address this is through Copy-on-Write, which is taken advantage of automatically when using arrays. </div><div><br></div><div>The other point you raise is that the body may be a stream, at which point it is impossible to copy around. What we did here for Zewo is <a href="https://github.com/Zewo/Zewo/blob/master/Modules/HTTP/Sources/HTTP/Message/Body.swift#L1">make the body an enum</a>. So, if you want to return a file stream, you just do that. Copying the message around will keep a reference to the same stream, but since its immutable this isn&#39;t an issue.</div><div><br></div><div>I urge you to reconsider your stance. Just because something can be very large doesn&#39;t immediately mean it should be a reference type.</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 23, 2016 at 2:45 PM Helge Heß via swift-server-dev &lt;<a href="mailto:swift-server-dev@swift.org">swift-server-dev@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 23 Nov 2016, at 22:19, Dan Appel via swift-server-dev &lt;<a href="mailto:swift-server-dev@swift.org" class="gmail_msg" target="_blank">swift-server-dev@swift.org</a>&gt; wrote:<br class="gmail_msg">
&gt;&gt; 1. Do we want to use concrete types or protocols for Request/Response?<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; When working on Open Swift, this was a hot topic since we believed that it would be unsafe to have a protocol that would allow both value and reference types.<br class="gmail_msg">
...<br class="gmail_msg">
&gt;&gt; 2. If we use concrete types, do we want value or reference semantics?<br class="gmail_msg">
<br class="gmail_msg">
Kinda what you said before this decision is unrelated to protocol vs concrete type. I suppose protocols may make some sense, so that they can be backed by different mechanisms (say libcurl or http_parser, etc).<br class="gmail_msg">
<br class="gmail_msg">
E.g. quite often you don’t really need to decode all fields of an HTTP header but just specific fields of it, or you need the fields just once. In such cases it may not be necessary to proactively waste space on a hash-map and actual strings for such and instead just keep the buffer containing the data and do things on demand (aka don’t parse/load stuff you don’t use).<br class="gmail_msg">
All I’m saying is that there may be different implementations for different uses cases.<br class="gmail_msg">
<br class="gmail_msg">
BTW: It was also mentioned that it may be highly desirable to use Foundation’s NSHTTPURLRequest/NSHTTPResponse.<br class="gmail_msg">
<br class="gmail_msg">
&gt; To me, it makes sense to pass them around as values<br class="gmail_msg">
<br class="gmail_msg">
Unless you are talking about just the HTTP message head (which is not much more than a specialised dictionary), it doesn’t make any sense to me to pass them around as values.<br class="gmail_msg">
<br class="gmail_msg">
The body&#39;s of the HTTP messages can be gigabytes big and won’t usually be stored in-memory at all or at least as-is. Processing state on the body stream needs to be passed around as a reference.<br class="gmail_msg">
<br class="gmail_msg">
hh<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
swift-server-dev mailing list<br class="gmail_msg">
<a href="mailto:swift-server-dev@swift.org" class="gmail_msg" target="_blank">swift-server-dev@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-server-dev" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-server-dev</a><br class="gmail_msg">
</blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><div><div>Dan Appel<br></div></div></div></div>