<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Jun 22, 2016 at 9:12 PM Chris Lattner &lt;<a href="mailto:clattner@apple.com">clattner@apple.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Swift community,<br>
<br>
The review of &quot;SE-0105: Removing Where Clauses from For-In Loops&quot; begins now and runs through June 29. The proposal is available here:<br>
<br>
        <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0105-remove-where-from-forin-loops.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0105-remove-where-from-forin-loops.md</a><br>
<br>
Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-evolution mailing list at<br>
<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>
or, if you would like to keep your feedback private, directly to the review manager.<br>
<br>
What goes into a review?<br>
<br>
The goal of the review process is to improve the proposal under review through constructive criticism and contribute to the direction of Swift. When writing your review, here are some questions you might want to answer in your review:<br>
<br>
        * What is your evaluation of the proposal?<br></blockquote><div><br></div><div>-1000. This is one of the features of Swift that I feel is incredibly elegant and unique, providing a way to do basic filtering and iteration without having to worry about lazy filtering or control flow statements.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5"> </span><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        * Is the problem being addressed significant enough to warrant a change to Swift?<br></blockquote><div><br></div><div>No—in fact, there is no problem. The &quot;where&quot; notation is perfectly grounded in mathematics and set theory and its meaning is clear.  &quot;for x in y where z&quot; reads almost exactly like the set notation &quot;{x <span style="color:rgb(37,37,37);font-size:14px;line-height:22.4px">∈ y | z}&quot; does aloud.</span></div><div><br></div><div>The fact that some users may be confused by this terminology is not a reason to remove it from the language. Some users will be confused by many concepts in programming languages. If that means this is considered an &quot;advanced&quot; feature, so be it. We should be able to have a language that has both basic features and advanced features, and when a new developer comes across a feature they don&#39;t understand, they learn it, and then they know it. This is not an insurmountable problem.<br></div><div><br></div><div>IIRC, this proposal was a follow-up to the removal of &quot;where&quot; in &quot;if&quot; statements, but the two uses of the term are unrelated. In &quot;if&quot; statements, &quot;where&quot; was used to separate let-bindings from other parts of the conditional—it was not a filter over a collection and did not correspond to existing mathematical terms of art. That&#39;s not the case here, and it feels like surface-level consistency for consistency&#39;s sake.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        * Does this proposal fit well with the feel and direction of Swift?<br></blockquote><div><br></div><div>No. The alternatives are worse, IMO:</div><div><br></div><div>* Putting if/guard and continue at the front of the loop is more clutter and expresses the concept in terms of control flow instead of sequence filtration, when the latter is closer to expressing the semantics of what the loop is doing. I would argue that it increases the mental load because now I have to parse an &quot;if&quot; or a &quot;guard&quot;, the condition, and the &quot;continue&quot; to make sure that it&#39;s doing exactly what it&#39;s doing (and the fact that &quot;guard&quot; could be used here means there is implicit negation that I have to parse on top of that), whereas &quot;where foo&quot; is right there and immediately unambiguous.</div><div><br></div><div>* Using .filter() many times requires that .lazy also be used in order to be performant. In many cases, writing the naïve .filter() line will return a new copied collection and users are likely to accidentally write code that is slower than it should be.</div><div><br></div><div>The fact that it only elevates one particular control flow construct (&quot;if x else continue&quot;) doesn&#39;t seem relevant. It&#39;s a common case and the language should simplify common cases when possible. As a matter of fact, I would also be supportive of the &quot;for x in y while z&quot; that some other people have offered for the same reason. While it&#39;s less based on set theory than &quot;where&quot;, it optimizes another common case.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        * If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        * How much effort did you put into your review? A glance, a quick reading, or an in-depth study?<br></blockquote><div><br></div><div>Read the proposal and followed the earlier discussion threads.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
More information about the Swift evolution process is available at<br>
<br>
        <a href="https://github.com/apple/swift-evolution/blob/master/process.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/process.md</a><br>
<br>
Thank you,<br>
<br>
-Chris Lattner<br>
Review Manager<br>
<br>
<br>
_______________________________________________<br>
swift-evolution-announce mailing list<br>
<a href="mailto:swift-evolution-announce@swift.org" target="_blank">swift-evolution-announce@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution-announce" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution-announce</a><br>
</blockquote></div></div>