[Python-ideas] What is Python-ideas for? [meta] [Inspired by: Simpler syntax for basic iterations]

Ryan Gonzalez rymg19 at gmail.com
Wed Oct 14 16:14:33 CEST 2015


On October 14, 2015 12:28:07 AM CDT, "Stephen J. Turnbull" <stephen at xemacs.org> wrote:
>Ryan Gonzalez writes:
>
>Avoid top-posting.  It helps prevent posting merely to be
>contrary.<wink />  Reordering....
>
> > Mark Lawrence writes:
>
> >> Stop pointlessly discussing something that simply is not going to
> >> happen.
>
> > Like multi-line lambdas, multi-line with statements, null
> > coalescing operators, and all the other topics that come up every
> > other week?
>
>There is a clear qualitative difference here.  Mark is right about the
>"repeat n:" proposal, and your comparison is specious.
>
>				*****
>
>The rest of my post is an attempt to present my understanding of some
>aspects of Pythonic design thinking as relevant to discussions on
>Python-Ideas.  As a running example, I try to argue why this thread
>should have ended with at most two posts in it.  (Some might say it
>shouldn't have started because of PEP 284, but figuring out relevance
>of several hundred PEPs is a task more suited to scripture scholars
>than language designers.)
>


...

That was supposed to be a joke. :O

>Guido admits the benefits of all of the features Ryan mentions, and
>entertains *new* proposals of syntax to invoke them.  That's not
>because he's a nice guy handing out warm fuzzies to would-be
>contributors.  We currently don't have a good way to do them, where
>"good" involves both "concise" and "esthetically pleasing, especially
>to Guido".  He really would like to serve the constituencies for those
>features (and might even warm up to them himself, given suitable
>syntax).
>
>Guido also values the educational use of Python, and when introducing
>new features he works hard to find syntax (including choice of
>keyword) that is "intuitive" to both new users of Python and new
>programmers.  If anybody "gets" CP4E, Guido does.  Of course there are
>different ways to get there, but arguing that lack of "repeat n:" is
>somehow contrary to CP4E is disrespectful.  It's a different path to
>that end.
>
>*This proposal* to introduce a special syntax for pure repetition,
>however, obviously falls afoul of several principles *of Pythonic
>language design*.  On the contrary, the arguments *for* the proposal
>are "non-Pythonic", which doesn't make them unimportant, much less
>invalid.  It does, however, make them low-value on *this* list, which
>is for proposed improvements to the Python language.  We're not here
>to discuss language improvements in general.[1]  Here's my list:
>
>1.  The bar for new keywords is *very* high.  I don't think the
>    educational purpose would be well-served by twisting "for" into a
>    knot with "for 4:"; that just doesn't correspond to valid English
>    usage.  "while 4:" is a little closer (IMO YMMV), but already has
>    a meaning so it's out anyway due to backward compatibility.  I
>    think this proposal needs a new keyword, and "repeat" is excellent
>    for the purpose.  That's already a deal-killer for such a
>    specialized construct.
>
>2.  We already have a good way to write "repeat 4:".  The proposed
>    syntax is just syntactic sugar, and even in its educational
>    context, it's not much sweeter than (proper) use of the existing
>    syntax.  Watch one user's lips move as she draws a square:
>
>        First I draw the top, then I go down the right, then I draw
>        across the bottom, and then I connect the left up to the top.
>
>    Now compare:
>
>        repeat 4:
>            forward(10)
>            right(90)
>
>    versus:
>
>        for side in ('across top',
>                     'down right',
>                     'across bottom',
>                     'up left'):
>            forward(10)
>            right(90)
>
>    Which expresses her intent better?  Is it really educational to
>    have *this* user to think of a square as an abstract regular
>    polygon that happens to have 4 sides?  True, it's easy to cargo-
>    cult the "repeat 4:" idiom the next time she needs a square, but
>    in learning to use "repeat n:", has she learned anything about
>    implementing her own procedures?  (This is a variation on the
>    individuality issue that Terry expressed with "kangaroo".)
>
>    Note: this is a plausible example user, and I am asking whether
>    *she* is served by the new syntax.  I don't maintain that she is
>    *the* typical user.  I do think that educators should consider her
>    needs as well as the question of how common her type is.  While
>    there probably is educational benefit to this change, it's far
>    from clear to me what it is, or whether in fact the student's 
>    benefit is anywhere near as large as that to teachers who want to
>    present one "simple" programming construct and move on quickly to
>    another one.
>
>3.  The "repeat 4" idiom clearly involves counting (otherwise the
>    program doesn't know when to stop), but it completely conceals
>    the process.  That violates "explicit is better than implicit",
>    and furthermore makes the idiom very specialized, dramatically
>    reducing the benefits it can have.
>
>    It seems to me that the "for ... in" construct gets the balance
>    just right.  It exposes both counting as an isomorphism between
>    concrete sets (above, repetitions of a subprocedure corresponding
>    to named sides of a square), and abstractly using numbers merely
>    to count (via "range(n)").  (Of course "range()" also provides a
>    flexible way to denote various concrete sets of numbers.)
>
>4.  True, when you really do have an algorithm that simply cares about
>    the number and repeats the same suite independently of the
>    iteration count, exposing an iteration count variable is arguably
>    a wart.  But it's very small compared to the power of the "for
>    ... in" idiom.  Proposing to address that wart runs into "Special
>    cases aren't special enough to break the rules."
>
>Now, all of these principles ("Read my lips: no new keywords!" and the
>three from the Zen) are pragmatic guidelines, not absolutes.  Not even
>"no keywords".  And they're Pythonic principles: they don't always
>generalize to other languages.[2]  But when a proposal infringes so
>many Pythonic principles so flagrantly (IMHO, each is sufficient
>reason to deny the proposal by itself, though YMMV), it is indeed a
>non-starter on this list.
>
>Regards,
>
>
>Footnotes: 
>[1]  Note that several core Python developers have unsubscribed or
>muted this list completely, partly because of these off-target
>threads.
>
>[2]  I have to admit that I'm thoroughly drunk on the Kool-Aid
>though, and tend to apply them to other languages, which inevitably
>fall short.

-- 
Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity.


More information about the Python-ideas mailing list