<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div> <div id="bloop_sign_1497300576678223104" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">—</div><div><font face="Helvetica" size="1">very short reply expected - <a href="http://vsre.info">vsre.info</a></font></div><div style="font-family:helvetica,arial;font-size:13px">Jérémie Girault<br></div></div> <br><p class="airmail_on">On 12 juin 2017 at 22:34:45, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com">xiaodi.wu@gmail.com</a>) wrote:</p> <div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><span><div><div></div><div><div dir="ltr">On Mon, Jun 12, 2017 at 3:16 PM, Jérémie Girault<span class="Apple-converted-space"> </span><span dir="ltr">&lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank">jeremie.girault@gmail.com</a>&gt;</span><span class="Apple-converted-space"> </span>wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">I invite you to read the proposal rules again with a fresh mindset and benevolence spirit.</div><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">It’s my first one and may not be very clear but the rules are straightforward.</div><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><br></div><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">Especially try to forget that Void is a tuple or anything. </div><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">Void is Nothing in the programmer’s mind. An instance of Void shouldn’t even exist.</div></div></blockquote><div><br></div><div>Sorry, that&#39;s not correct. Void is what&#39;s called Unit in other languages. It exists. That is why functions with &quot;no return value&quot; return Void. OTOH, Never does not exist. This discussion was had in great detail during the naming debate over Never.</div></div></div></div></div></div></span></blockquote></div><p>Let’s put facts in front of correctness assertions. Is Void = Unit in C or c++ ? can you create instances of void in java ? you have Void for generics. <a href="https://en.wikipedia.org/wiki/Unit_type">https://en.wikipedia.org/wiki/Unit_type</a></p><p>And if you look at assembly, sending void or returning void actually means &quot;nothing to push on the stack / nothing to pop”. Seems like having this stripping on signatures at compile-time could be great !</p><p>Actually, in my opinion we could discuss naming when we agree that the mechanism works, using this name is just a way to not impact the developer with code changes.</p><p>So either we agree on the fact that the mechanism works and we can move on to naming, or we get back on the topic : do you see a flaw in the proposal rules ? It elegantly transforms signature arity and provides the programmer a natural syntax to express it’s code.</p><div><div><div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><span><div><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br class="Apple-interchange-newline"> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">The proposed meaning of Void is to be a “lack” of arguments. It means that each “Void” argument reduces the arity of the function by one, at its exact position. Especially look at the canonical signature definition, and the proposed rules of reduction.</div></div></blockquote><div><br></div><div>I don&#39;t understand why you propose to name this new idea &quot;Void&quot;. You&#39;re proposing something that&#39;s not even a lack of an argument, but an anti-argument, like anti-matter! I&#39;m not sure I understand why this is necessary. It seems to be a very strange workaround for one specific issue arising from disallowing implicit tuple splatting.</div></div></div></div></div></div></span></blockquote></div><div><br class="Apple-interchange-newline"></div></div><p>Look at other languages, when you put Void in functions in C or java, do you need to add a value ? Ease of use is important. </p><p>You imply that I disagree with splatting were I don’t, let’s not make it personal. This proposal is even compatible with tuple splatting !</p><p>The proposal rules seem to work and provides great user value. Let’s try to consider this !</p><div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><span><div><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br class="Apple-interchange-newline"> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"></div><div id="m_8977006030127021603bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">That proposal, if implemented, would effectively allow `Callback&lt;Void&gt;` to be called without arguments in the context of swift4.</div><span class=""><br></span><div id="m_8977006030127021603bloop_sign_1497298215942644224" class="m_8977006030127021603bloop_sign"><div style="font-family:helvetica,arial;font-size:13px"><span class="">—</span></div><div><span class=""><font face="Helvetica" size="1">very short reply expected -<span class="Apple-converted-space"> </span><a href="http://vsre.info" target="_blank">vsre.info</a></font></span></div><div style="font-family:helvetica,arial;font-size:13px"><span class="">Jérémie Girault<br></span></div></div><span class=""><br></span><div><div class="h5"><p class="m_8977006030127021603airmail_on">On 12 juin 2017 at 22:06:54, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>) wrote:</p><blockquote type="cite" class="m_8977006030127021603clean_bq"><div><div><div dir="ltr"><span>On Mon, Jun 12, 2017 at 2:56 PM, Jérémie Girault<span class="Apple-converted-space"> </span><span dir="ltr">&lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank">jeremie.girault@gmail.com</a>&gt;</span><span class="Apple-converted-space"> </span>wrote:<br></span><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">@Xiaodi Wu</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">Disagree, and we would need the original designer here to help us, but my understanding of the original meaning of tuples-as-arguments is that when I define:</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`func foo(_ arg0: Any, _ arg1: Any) {}`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">I can afterwards “apply” a tuple to a function named `foo` and therefore execute the function on this tuple.</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">Calling a function syntax was equivalent to put a tuple next to a function name:</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`foo(42, “hello&quot;)` the left-hand is `foo`, the right-hand is `(42, “hello&quot;)` is the tuple.</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><br></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">The same way if I have</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`func foo()`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`foo()` means calling `foo` with argument `()` and there we have our original `Void`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><br></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">That meaning changed recently due to multiple SE implementations actually.</div></div></blockquote><div><br></div><div>Tuples-as-arguments never shipped in any version of Swift, and the ability to &quot;apply&quot; a tuple like that was removed by SE-0029--the original goal was to implement this change in time for Swift 2.2.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">The parenthesis around the call don&#39;t have a tuple meaning anymore. Therefore it breaks a lot of code relying on this feature of the language, which was quite elegant, but could not handle advanced functions features.</div></div></blockquote><div><br></div><div>Yes, this is an intentional and approved part of SE-0029. The drawbacks were enumerated in that proposal and were deemed acceptable.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">@john: Void can happen easily in parameters due to generics, the easiest example that breaks with swift4 is</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`typealias Callback&lt;T&gt; = (T) -&gt; Void`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">here</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">`Callback&lt;Void&gt;` which is perfectly reasonable introduces Void in the argument list and forces the caller to introduces an empty partenthesis set when invoking:</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">```</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">let foo: Callback&lt;Void&gt; = { }</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">foo(())</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">```</div></div></blockquote><div><br></div><div>`Callback&lt;T&gt; = (T) -&gt; Void` refers to a callback that takes exactly one argument. Since argument lists are not tuples, it is not possible to invoke such a callback with zero arguments, or for that matter with two, three, four, or five arguments.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px">That’s were the proposal shines in my opinion: adapting the meaning of Void to the current context of swift4 gives back the language the elegant syntax it had while preserving the type system</div></div></blockquote><div><br></div><div>I&#39;m not sure what you mean by this. No change in `Void` can cause a function of type (T) -&gt; Void to accept zero arguments: it requires one argument of type T.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477bloop_sign_1497296119954916864" class="m_8977006030127021603m_-2321952076676033477bloop_sign"><div style="font-family:helvetica,arial;font-size:13px"><span><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:small">On 12 juin 2017 at 20:04:18, Xiaodi Wu (</span><a href="mailto:xiaodi.wu@gmail.com" target="_blank" style="font-family:arial,sans-serif">xiaodi.wu@gmail.com</a><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:small">) wrote:</span><br></span></div></div><div><div class="m_8977006030127021603h5"><blockquote type="cite" class="m_8977006030127021603m_-2321952076676033477clean_bq"><div><div><div><span>On Mon, Jun 12, 2017 at 12:44 Jérémie Girault &lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank">jeremie.girault@gmail.com</a>&gt; wrote:<br></span><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><p><span>Void was the empty tuple because arguments were tuples.</span></p></div></div></blockquote><div><span><br></span></div><div><span>As John explained, that is _not_ correct. Void was not motivated by anything to do with argument lists.</span></div><div><span><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><p><span>So no arguments meant empty tuple.</span></p><p><span>If we consider the empty tuple to be an argument, then the type for the type of empty tuple should be `Unit`</span></p></div></div></blockquote><div><span><br></span></div><div><span>It has been suggested to rename Void to Unit. I do believe it’s on the commonly rejected ideas list (and if it’s not, it ought to be).</span></div><div><span><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><p><span>Void, however, seem naturally fitted for the absence of argument.</span></p><p><span>Should `func foo(Void)` be different from `func foo()`?</span></p></div></div></blockquote><div><span><br></span></div><div><span>SE-0110 determined that the two should in fact be different.</span></div><div><span><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><p><span>I don’t think so. But different from `func foo(Unit)` ? Yes !</span></p></div></div></blockquote><div><span><br></span></div><div><span>It sounds like your quarrel is with the name of the typealias. I don’t see how that solves any issues with the loss of tuple splatting. Functions will still return (), and you foo(()) is not foo().</span></div><div><span><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><p><span>My point here is that we probably won’t have splatting for swift4.</span></p><p><span><br></span></p></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><span>But if we consider the type system as a guide, we can consider 3 simple set of rules and restore almost 100% source compatibility while keeping the improvement of SE-0110</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><span>- Rules for swift3 tuples-arguments of cardinality zero (Void) in swift 4 (this proposition)</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><span>- Rules for swift3 tuples-arguments of cardinality one in swift 4 (proposition to be done)</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgb(0,0,0);margin:0px"><span>- Rules for swift3 tuples-arguments of cardinality &gt; 1 in swift 4 (proposition to be done)</span></div></div><div style="word-wrap:break-word"><span><br></span><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_sign_1497288880940260864" class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_sign"><div style="font-family:helvetica,arial;font-size:13px"><span>—</span></div><div><span><font face="Helvetica" size="1">very short reply expected -<span class="Apple-converted-space"> </span><a href="http://vsre.info" target="_blank">vsre.info</a></font></span></div><div style="font-family:helvetica,arial;font-size:13px"><span>Jérémie Girault<br></span></div></div><span><br></span></div><div style="word-wrap:break-word"><p class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769airmail_on"><span>On 12 juin 2017 at 19:25:31, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>) wrote:</span></p><div><blockquote type="cite" class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><div><div><div><span><span>Unfortunately, I think this proposal appears to be mistaken as to this key premise: Void was never (IIUC) meant to model the absence of arguments; it is a type with one possible value.</span></span></div></div></div></blockquote></div><div><div><blockquote type="cite" class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><div><div><div><span><br><br>If I recall, a number of conversations have been raised about Void being a typealias of (), and the definitive response has been that this falls into the ship-has-sailed category of out-of-scope changes.<br><br>More generally, the recent spate of complaints about regressions to a particular coding style have to do with loss of implicit tuple splatting, the cure for which is a proper implementation of tuple splatting, not poking holes into settled parts of the type system.</span></div></div></div></blockquote></div><div><blockquote type="cite" class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769clean_bq" style="font-family:Helvetica,Arial;font-size:13px;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"><div><div><div><span><br class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769Apple-interchange-newline"><br></span></div><div><span><br></span><div class="gmail_quote"><div><span>On Mon, Jun 12, 2017 at 12:15 John McCall via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><span><br></span><div><blockquote type="cite"><div><span>On Jun 12, 2017, at 4:48 AM, Jérémie Girault via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</span></div><span><br class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274Apple-interchange-newline"></span><div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span>Hi here,</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span><br></span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span>As I tested swift4 in xcode9b1 I noticed a lot of regressions about tuples usage.</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span><br></span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span>After documenting myself about the changes which happened, I thought that they could be improved. Instead of fighting these propositions (which make sense), I wanted create a few proposal which would improve these recent changes with a few simple rules.</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span><br></span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span>My propositions are based on the recent decisions and in the continuation of SE-0110. The first one is about Void.</span></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;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;margin:0px"><span>Void is historically defined as the type of the empty tuple. The reason of this is that arguments were initially considered as tuple.</span></div></div></blockquote><span><br></span></div></div><div style="word-wrap:break-word"><div><span>The dominant consideration here was always return types, not parameters.  I&#39;m not sure there was ever much point in writing Void in a parameter list, but whatever reasons there were surely vanished with SE-0066.</span></div><div><span><br></span></div><div><span>Note that &#39;void&#39; in C was originally exclusively a return type.  ANSI gave it a new purpose it with void*, but the meaning is totally unrelated.</span></div></div><div style="word-wrap:break-word"><div><span><br></span></div><div><span>John.</span></div></div><span>______________________________<wbr>_________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br></span></blockquote></div></div></div></div></blockquote></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div></blockquote></div><br></div></div></div></div></blockquote></div></div></div></blockquote></div><br></div></div></div></div></span></blockquote><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"></div></body></html>