<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 Jun 13, 2017, at 1:45 AM, Gwendal Roué 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=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">"Discussing" with Xiaodi is a special experience, isn't it?<div class=""><br class=""></div><div class="">He will bite and misrepresent you and your ideas until you get tired and your idea has been exhausted to death and diluted in dozens of useless messages. Don't feed him.</div></div></div></blockquote><div><br class=""></div>This is uncharitable and inappropriate.</div><div><br class=""></div><div>John.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Gwendal</div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 12 juin 2017 à 23:10, Jérémie Girault via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><div id="bloop_sign_1497300576678223104" class="bloop_sign" 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; -webkit-text-stroke-width: 0px;"><div style="font-family: helvetica, arial; font-size: 13px;" class=""><br class="Apple-interchange-newline">—</div><div class=""><font face="Helvetica" size="1" class="">very short reply expected -<span class="Apple-converted-space">&nbsp;</span><a href="http://vsre.info/" class="">vsre.info</a></font></div><div style="font-family: helvetica, arial; font-size: 13px;" class="">Jérémie Girault<br class=""></div></div><br 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; -webkit-text-stroke-width: 0px;" class=""><p class="airmail_on" 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; -webkit-text-stroke-width: 0px;">On 12 juin 2017 at 22:34:45, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com" class="">xiaodi.wu@gmail.com</a>) wrote:</p><div 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; -webkit-text-stroke-width: 0px;" class=""><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 class=""><div class=""><div class=""></div><div class=""><div dir="ltr" class="">On Mon, Jun 12, 2017 at 3:16 PM, Jérémie Girault<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank" class="">jeremie.girault@gmail.com</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""><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;" class=""><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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; margin: 0px;" class="">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; margin: 0px;" class=""><br class=""></div><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">Especially try to forget that Void is a tuple or anything.&nbsp;</div><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">Void is Nothing in the programmer’s mind. An instance of Void shouldn’t even exist.</div></div></blockquote><div class=""><br class=""></div><div class="">Sorry, that's not correct. Void is what's called Unit in other languages. It exists. That is why functions with "no return value" 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 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; -webkit-text-stroke-width: 0px;" class="">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.<span class="Apple-converted-space">&nbsp;</span><a href="https://en.wikipedia.org/wiki/Unit_type" class="">https://en.wikipedia.org/wiki/Unit_type</a></p><p 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; -webkit-text-stroke-width: 0px;" class="">And if you look at assembly, sending void or returning void actually means "nothing to push on the stack / nothing to pop”. Seems like having this stripping on signatures at compile-time could be great !</p><p 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; -webkit-text-stroke-width: 0px;" class="">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 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; -webkit-text-stroke-width: 0px;" class="">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 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; -webkit-text-stroke-width: 0px;" class=""><div class=""><div class=""><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 class=""><div class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class="Apple-interchange-newline">&nbsp;</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;" class=""><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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 class=""><br class=""></div><div class="">I don't understand why you propose to name this new idea "Void". You're proposing something that's not even a lack of an argument, but an anti-argument, like anti-matter! I'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 class=""><br class="Apple-interchange-newline"></div></div><p class="">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.&nbsp;</p><p class="">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 class="">The proposal rules seem to work and provides great user value. Let’s try to consider this !</p><div class=""><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 class=""><div class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class="Apple-interchange-newline">&nbsp;</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;" class=""><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""></div><div id="m_8977006030127021603bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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 class=""></span><div id="m_8977006030127021603bloop_sign_1497298215942644224" class="m_8977006030127021603bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class=""><span class="">—</span></div><div class=""><span class=""><font face="Helvetica" size="1" class="">very short reply expected -<span class="Apple-converted-space">&nbsp;</span><a href="http://vsre.info/" target="_blank" class="">vsre.info</a></font></span></div><div style="font-family: helvetica, arial; font-size: 13px;" class=""><span class="">Jérémie Girault<br class=""></span></div></div><span class=""><br class=""></span><div class=""><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" class="">xiaodi.wu@gmail.com</a>) wrote:</p><blockquote type="cite" class="m_8977006030127021603clean_bq"><div class=""><div class=""><div dir="ltr" class=""><span class="">On Mon, Jun 12, 2017 at 2:56 PM, Jérémie Girault<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank" class="">jeremie.girault@gmail.com</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">@Xiaodi Wu</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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; margin: 0px;" class="">`func foo(_ arg0: Any, _ arg1: Any) {}`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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; margin: 0px;" class="">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; margin: 0px;" class="">`foo(42, “hello")` the left-hand is `foo`, the right-hand is `(42, “hello")` is the tuple.</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><br class=""></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">The same way if I have</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">`func foo()`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">`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; margin: 0px;" class=""><br class=""></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">That meaning changed recently due to multiple SE implementations actually.</div></div></blockquote><div class=""><br class=""></div><div class="">Tuples-as-arguments never shipped in any version of Swift, and the ability to "apply" 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 class="">&nbsp;</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;" class=""><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">The parenthesis around the call don'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 class=""><br class=""></div><div class="">Yes, this is an intentional and approved part of SE-0029. The drawbacks were enumerated in that proposal and were deemed acceptable.</div><div class="">&nbsp;</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;" class=""><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">@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; margin: 0px;" class="">`typealias Callback&lt;T&gt; = (T) -&gt; Void`</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">here</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">`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; margin: 0px;" class="">```</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">let foo: Callback&lt;Void&gt; = { }</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">foo(())</div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">```</div></div></blockquote><div class=""><br class=""></div><div class="">`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 class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""></div><div id="m_8977006030127021603m_-2321952076676033477bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class="">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 class=""><br class=""></div><div class="">I'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 class=""><br class=""></div><div class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477bloop_sign_1497296119954916864" class="m_8977006030127021603m_-2321952076676033477bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class=""><span class=""><span style="color: rgb(80, 0, 80); font-family: arial, sans-serif; font-size: small;" class="">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;" class="">xiaodi.wu@gmail.com</a><span style="color: rgb(80, 0, 80); font-family: arial, sans-serif; font-size: small;" class="">) wrote:</span><br class=""></span></div></div><div class=""><div class="m_8977006030127021603h5"><blockquote type="cite" class="m_8977006030127021603m_-2321952076676033477clean_bq"><div class=""><div class=""><div class=""><span class="">On Mon, Jun 12, 2017 at 12:44 Jérémie Girault &lt;<a href="mailto:jeremie.girault@gmail.com" target="_blank" class="">jeremie.girault@gmail.com</a>&gt; wrote:<br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><p class=""><span class="">Void was the empty tuple because arguments were tuples.</span></p></div></div></blockquote><div class=""><span class=""><br class=""></span></div><div class=""><span class="">As John explained, that is _not_ correct. Void was not motivated by anything to do with argument lists.</span></div><div class=""><span class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><p class=""><span class="">So no arguments meant empty tuple.</span></p><p class=""><span class="">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 class=""><span class=""><br class=""></span></div><div class=""><span class="">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 class=""><span class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><p class=""><span class="">Void, however, seem naturally fitted for the absence of argument.</span></p><p class=""><span class="">Should `func foo(Void)` be different from `func foo()`?</span></p></div></div></blockquote><div class=""><span class=""><br class=""></span></div><div class=""><span class="">SE-0110 determined that the two should in fact be different.</span></div><div class=""><span class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><p class=""><span class="">I don’t think so. But different from `func foo(Unit)` ? Yes !</span></p></div></div></blockquote><div class=""><span class=""><br class=""></span></div><div class=""><span class="">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 class=""><span class=""><br class=""></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;" class=""><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><p class=""><span class="">My point here is that we probably won’t have splatting for swift4.</span></p><p class=""><span class=""><br class=""></span></p></div><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><span class="">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; margin: 0px;" class=""><span class="">- 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; margin: 0px;" class=""><span class="">- 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; margin: 0px;" class=""><span class="">- 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;" class=""><span class=""><br class=""></span><div id="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_sign_1497288880940260864" class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class=""><span class="">—</span></div><div class=""><span class=""><font face="Helvetica" size="1" class="">very short reply expected -<span class="Apple-converted-space">&nbsp;</span><a href="http://vsre.info/" target="_blank" class="">vsre.info</a></font></span></div><div style="font-family: helvetica, arial; font-size: 13px;" class=""><span class="">Jérémie Girault<br class=""></span></div></div><span class=""><br class=""></span></div><div style="word-wrap: break-word;" class=""><p class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769airmail_on"><span class="">On 12 juin 2017 at 19:25:31, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com" target="_blank" class="">xiaodi.wu@gmail.com</a>) wrote:</span></p><div class=""><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 class=""><div class=""><div class=""><span class=""><span class="">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 class=""><div class=""><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 class=""><div class=""><div class=""><span class=""><br class=""><br class="">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 class=""><br class="">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 class=""><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 class=""><div class=""><div class=""><span class=""><br class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769Apple-interchange-newline"><br class=""></span></div><div class=""><span class=""><br class=""></span><div class="gmail_quote"><div class=""><span class="">On Mon, Jun 12, 2017 at 12:15 John McCall via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""></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;" class=""><span class=""><br class=""></span><div class=""><blockquote type="cite" class=""><div class=""><span class="">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" class="">swift-evolution@swift.org</a>&gt; wrote:</span></div><span class=""><br class="m_8977006030127021603m_-2321952076676033477m_5965133149641952769m_7884169765734884326m_-2000047954192297274Apple-interchange-newline"></span><div class=""><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;" class=""><span class="">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;" class=""><span class=""><br class=""></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;" class=""><span class="">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;" class=""><span class=""><br class=""></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;" class=""><span class="">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;" class=""><span class=""><br class=""></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;" class=""><span class="">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;" class=""><span class="">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 class=""><br class=""></span></div></div><div style="word-wrap: break-word;" class=""><div class=""><span class="">The dominant consideration here was always return types, not parameters.&nbsp; I'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 class=""><span class=""><br class=""></span></div><div class=""><span class="">Note that 'void' in C was originally exclusively a return type.&nbsp; ANSI gave it a new purpose it with void*, but the meaning is totally unrelated.</span></div></div><div style="word-wrap: break-word;" class=""><div class=""><span class=""><br class=""></span></div><div class=""><span class="">John.</span></div></div><span class="">______________________________<wbr class="">_________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class=""></span></blockquote></div></div></div></div></blockquote></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div></blockquote></div><br class=""></div></div></div></div></blockquote></div></div></div></blockquote></div><br class=""></div></div></div></div></span></blockquote><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"></div><span 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br 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; -webkit-text-stroke-width: 0px;" class=""><span 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br 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; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica, Arial; font-size: 13px; 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-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br 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; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica, Arial; font-size: 13px; 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-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>