<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Mar 21, 2016 at 9:05 AM, ted van gaalen via swift-evolution <span dir="ltr"><<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>Hello Taras</div><div>Please take a look here:<br><a href="https://en.m.wikipedia.org/wiki/For_loop" target="_blank">https://en.m.wikipedia.org/wiki/For_loop</a></div><div><br></div><div>More than 30 ! programming languages since 1957 until now, have their implementation of the for-loop. If it was or is an inferior construct, it would have disappeared long ago. That alone proves that it is not inferior, but indeed very useful.</div><div><br></div></div></blockquote><div><br></div><div>FWIW, a number of recent programming languages don't support it anymore. Python, Ruby, and Rust all support the iterable form only, with a Range object to represent a sequence of numbers. It *is* disappearing, but it takes 10+ years for a new programming language to get serious adoption, so what's filtering its way down to mainstream programming is stuff that was invented 20 years ago and played with by early-adopters 10 years ago.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div>There is imho no longer any need to compare the for... variants any longer (but of course feel free to do so), because they both serve different purposes very well. Neither one or the other is inferior! I would protest with equal energy also when the for...in... was removed, because this would make iterating with collections cumbersome, e.g. I am now very happy that I can now iterate through an array, without specifying start, length and where we are.. </div><div><br></div><div>Concerning my intended proposal for a good alternative for the classicsl for-loop, I am currently in favor of very much something like this version, as it is implemented in Maple:</div><div> -----------start copy from wkpd page-----------------------------------</div><div><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"></p><blockquote type="cite"><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">Maple has two forms of for-loop, one for iterating of a range of values, and the other for iterating over the contents of a container. The value range form is as follows:</span></p><pre style="margin-top:0px;margin-bottom:0px;padding:1em;border:1px solid rgb(204,204,204);line-height:inherit;vertical-align:baseline;background-image:none"><font face="UICTFontTextStyleTallBody"><span style="white-space:normal;background-color:rgba(255,255,255,0)"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">for</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">i</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">from</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">f</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">by</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">b</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">to</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">t</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">while</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">w</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">do</b>
<i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"># loop body</i>
<b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">od</b>;
</span></font></pre><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">All parts except <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">do</b></code> and <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">od</b></code> are optional. The <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">for</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">i</i></code> part, if present, must come first. The remaining parts (<code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">from</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">f</i></code>, <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">by</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">b</i></code>, <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">to</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">t</i></code>, <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">while</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">w</i></code>) can appear in any order.</span></p><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">Iterating over a container is done using this form of loop:</span></p><pre style="margin-top:0px;margin-bottom:0px;padding:1em;border:1px solid rgb(204,204,204);line-height:inherit;vertical-align:baseline;background-image:none"><font face="UICTFontTextStyleTallBody"><span style="white-space:normal;background-color:rgba(255,255,255,0)"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">for</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">e</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">in</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">c</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">while</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">w</i> <b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">do</b>
<i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"># loop body</i>
<b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">od</b>;
</span></font></pre><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">The <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">in</b> <i style="margin:0px;padding:0px;border:0px;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">c</i></code> clause specifies the container, which may be a list, set, sum, product, unevaluated function, array, or an object implementing an iterator.</span></p><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">A for-loop may be terminated by <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">od</b></code>, <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">end</b></code>, or <code style="margin:0px;padding:0.2em 0.5em;border:1px solid rgb(204,204,204);font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none"><b style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;line-height:inherit;vertical-align:baseline;background-image:none">end do</b></code>.</span></p></blockquote><p style="margin:0.5em 0px 1em;padding:0px;border:0px;line-height:inherit;vertical-align:baseline;background-image:none"><span style="background-color:rgba(255,255,255,0)">------------------------------end copy-------------------------------------------</span></p>( in the above example replace "do" and "od" by { } )</div><div><span style="background-color:rgba(255,255,255,0)">Maple has two forms of for-loop, one for iterating of a range of values, </span></div><div><span style="background-color:rgba(255,255,255,0)">and the other for iterating over the contents of a container.</span></div><div>In Maple, which by the way is a very advanced programming language for mathematicians ( i am not), both variants are available and co-exist independently, which is exactly my point! So again, it is not replacing or even changing the for-in as it is now available in Swift, both versions should be available. (This would still be the case if the for ;; had not been removed in the first place)</div><div>To get back to the Maple for-loop implementation, in Swift I'd drop the "while" extension.</div><div>To summarize:</div><div><br></div><div>I would like to see in Swift:</div><div><br></div><div> for v from v1 to v2 by v3 {...}</div><div><br></div><div>for numerical values Int, Double, Float...</div><div>The "by" clause would be optional: when omitted, it should</div><div>default to 1 for integers and 1.0 for floating point values.</div><div> </div><div>The loop variable ("v" here) cannot be altered in the loop.</div><div>The loop can exited with the "break" statement.</div><div>Use "continue" to directly go to the next iteration( if any)</div><div>("break" and "continue" functional as it is now)</div><div><br></div><div><br></div><div>Examples:</div><div> for v from 0.5 to 30.0 by 0.3 </div><div> for v from 0 to 100 by 5</div><div> for v from 12.0 to -10.0 by -2</div><div><br></div><div>Imho, this is super clean and very readable, Why would anyone have objections against it? Also the compiler can optimize this construct very easely. </div><div>Yes, the classical for ;; had more options, but are they still needed? </div><div><br></div></div></blockquote><div><br></div><div>Curious, would you have any objections if 'by' were a method on ranges, which already exist in Swift?</div><div><br></div><div>for v in 0.5...<a href="http://30.0.by">30.0.by</a>(0.3)</div><div>for v in 0...<a href="http://100.by">100.by</a>(5)</div><div>for v in 12.0...-<a href="http://10.0.by">10.0.by</a>(-2)</div><div><br></div><div>The advantage of using range objects instead of special syntax is that then they're composable with all functions that operate on iterables. You can, for example get all primes from 0 to 100 with 0...100.filter(isPrime), or retrieve the last 5 with such elements with 0...100.filter(isPrime).suffix(5).</div><div><br></div><div>I also liked the idea Brent proposed up-thread of having stride() take a by: parameter that could be an arbitrary function of the last element. That's very similar to 'unfold' in Haskell, which turns out to be very useful for constructing arbitrary sequences in a memory-efficient way.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div>Note that we also have discussed the floating point number tolerance problem previously. </div><div>the for ... from ... to ... by ... could therefore for floating point numbers perhaps be enhanced like so:</div><div><br></div><div> for v from 0.0 to 10.0 by 0.1 tolerance 0.01 // tolerance optional clause</div><div><br></div><div>so that it reaches the end value 10.0 in this case</div><div><br></div><div>(I am not in favor to automatically set tolerance based upon magnitude)</div><div><br></div><div>To summarize:</div><div><br></div><div>1. the existing for ... in ... which is nearly perfect for collections can remain as is. No conflicts here. There is no need to drop one for the other, they are completely independent. </div><div><br></div><div>2. The new for ... from ... to ... by ... is simple,straightforward and easy to implement.</div><div><br></div><div>You've mentioned this:</div><div><blockquote type="cite"><div><font color="#000000"><span style="background-color:rgba(255,255,255,0)">for (i,j,k) in matrix.indices {...</span></font><span style="background-color:rgba(255,255,255,0)">}</span></div></blockquote></div><div>but here we are working with collection (descendants), are we?</div><div><br></div><div>I'd kindly recommend us all to travel much to other programming worlds, because there are so many (often forgotten) very interesting aspects and ideas that can be very useful to implement in new languages.</div><div><br></div><div>Kind Regards</div><div>TedvG</div><div><div class="h5"><div><div><div><div><div><div><div><font color="#000000"><span style="background-color:rgba(255,255,255,0)"></span></font></div></div></div></div></div></div></div><div><br>On 21 Mar 2016, at 14:30, Taras Zakharko <<a href="mailto:taras.zakharko@uzh.ch" target="_blank">taras.zakharko@uzh.ch</a>> wrote:<br><br></div><blockquote type="cite"><div>To be honest, I have difficulty understanding the premise of this discussion. I have always found the C-style for(;;) loop an awkward construct, because it is essentially just an alternative form of writing a general-purpose while loop. It is perfectly reasonable to restrict the for construct to, well, ‘for’ contexts: iterating through a sequence of items. If you need something more complex, either write your own iterator or use a general-purpose while loop. <div><br></div><div>As discussed previously, an optimising compiler generates the same machine code whether you are using an iterator abstraction or low-level coding. Besides, the for .. in .. construct potentially offers more potential for optimisation, because it makes the counter variable as well as the semantics of the entire loop more explicit (a for(;;) can contain arbitrary stuff). Talking about numerical algorithms: this is something I can’t understand at all. I have been working with numerical algorithms in Python and R for years, and I have never ever missed the C-style for loop. These languages offer convenient functions for generating iterable sequences, which are more readable and also represent the loop semantics much better then the for(;;;). Not to mention that the iterator pattern allows you to write simpler and more maintainable code. Imagine iterating through a sparse matrix or something. With a proper iterator pattern you just do:</div><div><br></div><div>for (i,j,k) in matrix.indices {</div><div><br></div><div>}</div><div><br></div><div>With a for(;;) loop you’l probably end up writing a nested construct of quite some complexity. </div><div> </div><div>Swift could certainly use some improvements to its iterators (for example something like Python generator expressions might be useful), but that is a different topic. </div><div><br></div><div>To sum it up:</div><div>- for(;;) is an awkward construct which is closer to a while loop than an actual sequence iterator pattern (that it should be)</div><div>- a proper iterator pattern is more convenient, more readable and offers the same performance</div><div>- numerical code does not need a for(;;) construct, in fact, using the proper iterator pattern makes writing numeric code easier, not more difficult, because you can abstract away some common processing/aggregating steps easily, and without any drawback</div><div>- we should think about how to improve the iterators offered by Swift standard library, not go back to an inferior construction</div><div><br></div><div>— Taras</div><div><div><div><br></div><div><div><br></div><div><br><div><blockquote type="cite"><div>On 21 Mar 2016, at 12:37, Greg Parker via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:</div><br><div><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br>On Mar 19, 2016, at 12:46 AM, Dmitri Gribenko via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:<br><br>Hi Ted,<br><br>Thank you for starting this thread. I agree that removing the C-style<br>for loop has degraded the readability and clarity of some of numerics<br>code.<br><br>In the feedback to SE-0007 many people have said that they can convert<br>their code to for-in loops, but I think this actually means that in<br>code that is typically written in Swift today, loops primarily operate<br>on sequences and collections. It means that numerics is a domain that<br>not many people work in. But it is a very important domain<br>nevertheless, and clarity for numerics code matters at least as much<br>as it does everywhere else.<br><br>I think one way to approach this discussion would be to present<br>multiple concrete code samples that contain C-style for loops and are<br>awkward to write without them. We can then try looking for patterns,<br>generalize and simplify, and discuss possible solutions.<br></blockquote><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Let me emphasize this more strongly. *Concrete*, *real-world* examples are quite likely the only way that you are going to get `for(;;)` back or get any sort of semantically-similar syntactically-different replacement.</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">There have been lots of suggestions. None of them are perfect. If we assume that there is in fact no perfect solution then the only way to proceed is to provide sufficient justification for some imperfect solution.</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">I'm still waiting for something like this: "We ported our code to Swift 3. Here are 5 reasonable-looking for(;;) loop shapes from 150 call sites, and here are their ugly-looking rewrites."</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">(Personally I think removing for(;;) without direct replacement was too aggressive. That view lost. Now its advocates will need to do more work to upend the status quo.)</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">--<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Greg Parker </span><a href="mailto:gparker@apple.com" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">gparker@apple.com</a><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important"><span> </span> Runtime Wrangler</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">_______________________________________________</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">swift-evolution mailing list</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="mailto:swift-evolution@swift.org" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">swift-evolution@swift.org</a><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br></div></div></div></div></div></blockquote></div></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div>