Raymond Hettinger added the comment:

A few random thoughts that may or may not be helpful:

* We now have two seasoned developers and one new core developer that 
collectively are creating many non-trivial patches to core parts of Python at 
an unprecedented rate of change.  The patches are coming in much faster than 
they can reasonably be reviewed and carefully considered, especially by devs 
such as myself who have very limited time available.  IMO, taken as whole, 
these changes are destabilizing the language.  Python is so successful and 
widely adopted that we can't afford a "shit happens" attitude.  Perhaps that 
works in corners of the language, infrequently used modules, but it makes less 
sense when touching the critical paths that have had slow and careful evolution 
over 26 years.

* Besides the volume of patches, one other reason that reviews are hard to come 
by is that they apply new APIs that I don't fully understand yet.  There are 
perhaps two people on the planet who could currently give thoughtful, correct, 
and critical evaluation of all those patches.  Everyone else is just watching 
them all fly by and hoping that something good is happening.

* One other reason for the lack of review comments in the enthusiasm and fervor 
surrounding the patches.  I feel like there is a cost of questioning whether 
the patches should be done or how they are done, like I am burning little karma 
every time.  Sometimes it feels safest and most cordial to just say nothing and 
let you make hundreds of semi-reviewed changes to just about every critical 
part of the language.

* Historically, if there was creator or maintainer of the code who was still 
active, that person would always be consulted and have a final say on whether a 
change should be applied.  Now, we have code constantly being changed without 
consulting the original author (for example, the recent and catastrophic random 
initialization bug was due to application of a patch without consulting the 
author of _randommodule.c and the maintainer of random.py, or this change to 
sorted(), or the changes to decimal, etc).

* In general, Guido has been opposed to sweeping changes across the code base 
for only tiny benefits.  Of late, that rule seems to have been lost.

* The benefits of FASTCALL mainly apply to fine grained functions which only do 
a little work and tend to be called frequently in loops.  For functions such as 
sorted(), the calling overhead is dominated by the cost of actually doing the 
sort.  For sorted(), FASTCALL is truly irrelevant and likely wasn't worth the 
complexity, or the actual bug, or any of the time we've now put in it.  There 
was no actual problem being solved, just a desire to broadly apply new 
optimizations.

* Historically, we've relied on core developers showing restraint.  Not every 
idea that pops into their head is immediately turned into a patch accompanied 
by pressure to apply it.  Devs tended to restrict themselves to parts of the 
code they knew best through long and careful study rather sweeping through 
modules and altering other people's carefully crafted code.

* FWIW, I applaud your efforts to reduce call overhead -- that has long been a 
sore spot for the language.

* Guido has long opposed optimizations that increase risk of bugs, introduce 
complexity, or that affect long-term maintainability.   In some places, it 
looks like FASTCALL is increasing the complexity (replacing something simple 
and well-understood with a wordier, more intricate API that I don't yet fully 
understand and will affect my ability to maintain the surrounding code).

* It was no long ago that you fought tooth-and-nail against a single line patch 
optimization I submitted.  The code was clearly correct and had a simple 
disassembly to prove its benefit.  Your opposition was based on "it increases 
the complexity of the code, introduces a maintenance cost, and increases the 
risk of bugs".  In the end, your opposition killed the patch.  But now, the AC 
and FASTCALL patches don't seem to mind any of these considerations.

* AC is supposed to be a CPython-only concept.  But along the way APIs are 
being changed without discussion.  I don't mind that sorted() now exposes 
*iterable* as a keyword argument, but it was originally left out on purpose 
(Tim opined that code would look worse with iterable as a keyword argument).  
That decision was reversed unilaterally without consulting the author and 
without a test.  Also as AC is being applied, the variable names are being 
changed.  I never really liked the "mp" that used in dicts and prefer the use 
of "self" better, but it is a gratuitous change that unilaterally reverses the 
decisions of the authors and makes the code not match any of the surrounding 
code that uses the prior conventions.

* FWIW, the claim that the help is much better is specious.  AFAICT, there has 
never been the slightest problem with "sorted(iterable, key=None, 
reverse=False) --> new sorted list" which has been clear since the day it was 
released.   It is some of the new strings the are causing problems with users 
(my students frequently are tripped-up by the / notation for example; no one 
seems to be able to intuit what it means without it being explained first).

* FWIW, I'm trying to be constructive and contribute where I can, but frankly I 
can't keep up with the volume of churn.   Having seen bugs being introduced, it 
is not inappropriate to ask another dev to please be careful, especially when 
that dev has been prolific to an unprecedented degree and altering core parts 
of the language for function calls, to new opcodes, the memory allocators, etc. 
 Very few people on the planet are competent to review these changes, make 
reasonable assessments about whether the complexity and churn are worth it.  An 
fewer still have the time to keep up with the volume of changes.

* Please do continue your efforts to improve the language, but also please 
moderate the rate of change, mitigate the addition complexity, value stability 
over micro-optimizations, consult the authors and maintainers of code, take 
special care without code that hasn't been reviewed because that lacks a safety 
net, and remember that newer devs may be taking cues from you (do you want them 
making extensive changes to long existing stable code without consulting the 
authors and with weak LGTM reviews?)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29327>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to