[swift-evolution] [Pitch] Retiring `where` from for-in loops
tseitz42 at icloud.com
Sat Jun 11 15:33:59 CDT 2016
> Am 11.06.2016 um 21:59 schrieb Xiaodi Wu <xiaodi.wu at gmail.com>:
>> On Sat, Jun 11, 2016 at 2:53 PM, Thorsten Seitz <tseitz42 at icloud.com> wrote:
>>> Am 10.06.2016 um 18:28 schrieb Xiaodi Wu via swift-evolution <swift-evolution at swift.org>:
>>>> On Fri, Jun 10, 2016 at 6:10 AM, Karl <razielim at gmail.com> wrote:
>>>>> * Swift is explicitly a C-family language. In most or all other C-family languages, for loop statements allow specification of conditions for exiting the loop but not for filtering. Therefore, Swift's use of `where` is unprecedented and needs to be learned anew by every user of Swift.
>>>> When was this decided? I distinctly remember some bloke under Craig Federighi’s hair saying that it was time to “move beyond” C and essentially ditch legacy conventions which no longer make sense.
>>> I think you misunderstood my argument here. I don't mean that we should yoke ourselves to C conventions, and we should absolutely ditch C convention when it doesn't make sense. The big-picture argument here is that `where` doesn't pass the bar of correcting a C convention that no longer makes sense.
>>> FWIW, on the topic of syntax choices, here is what Chris Lattner had to say on this list:
>>>> Kevin got it exactly right, but I’d expand that last bit a bit to:
>>>> “… picking the one that is most familiar to programmers in the extended C family is a good idea.["]
>>>> an extremely popular and widely used set of languages that have a lot of surface-level similarity. I
>>>> don’t claim to know the design rationale of all of these languages, but I surmise that this is not an
>>>> accident: programmers move around and work in different languages, and this allows a non-expert in the
>>>> language to understand what is going on. While there are things about C that are really unfortunate IMO
>>>> (e.g. the declarator/declaration specifier part of the grammar) there is a lot of goodness in the basic
>>>> operator set, focus on dot syntax, and more.
>>>> I do agree that there are some benefits to ditching braces and relying on indentation instead, but there are
>>>> also downsides. Deviating from the C family in this respect would have to provide *overwhelmingly* large
>>>> advantages for us to take such a plunge, and they simply don’t exist.
>>>> As I understand it, Swift is a new language with new conventions. It is desirable to align as many of those as possible with existing conventions so as to be easily learned, but if you limit Swift to other languages conventions you deny it any identity. Did Python ask anybody’s opinion before dropping curly-braces? Did people learn whatever Perl is supposed to be? Look at C’s hieroglyphic for loops!
>>> I don't think we disagree here.
>>>> Realistically, “for … in … while” is not going to cause incredible confusion. Removing it would cause a lot of frustration. You can’t on the one hand say our users are comfortable with the axioms of C’s hieroglyphic loops, and on the other hand say “for x in y while" is confusing.
>>>>> Again, as I said, once you've mastered something, by definition you find it not confusing. Why should we doom x% of new users to writing a loop incorrectly at least once when we don't have to?
>>>> Ah, but if you’re not “doomed” to failing once, how will you ever master anything? Nobody knew how to write a C for-loop until someone showed them (and even then…). Nobody is going to just open a REPL and start writing code, with zero prior understanding of what Swift syntax looks like.
>>> The thought here is along the lines of what Chris said, quoted above, and repeated here: "The extended C family of language [...] is an extremely popular and widely used set[;] programmers move around and work in different languages, and [aligning to expectations arising from other C family languages] allows a non-expert in the language to understand what is going on." By contrast, the `where` clause violates that expectation and I do not see "overwhelmingly large advantages" for doing so.
>> What about C#'s `where` then? As C# is a member of the C family languages `where` is not violating expectations!
> C# does not have a where keyword for its foreach loop, afaik.
`where` is an essential part of C#'s LINQ feature, see https://msdn.microsoft.com/de-de/library/bb397906.aspx for example.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution