FLUFL's Story Time
(A Python Retrospective and Beyond)
BayPiggies September 2018
Hosted by LinkedIn
Barry Warsaw
Python Foundation @ LinkedIn
Python 1.1
11 October 1994
- Truncate toward zero in float -> int conversion
- "entirely redone operator overloading"
- Asynchronous signal handling in main thread
- Double clicking to run pyc files on the Mac
- X11 extension module / tkinter
- URL parser
- curses
- delattr() & tuple() built-ins
- __getattr__(), __setattr__(), __delattr__() added
- Support ancient C and OS versions, 64 bit!
Guido van Rossum's Python World Tour
November 1-3, 1994
National Institute of Standards and Technology
(Some) Usual Suspects
(Some) Usual Suspects
(Some) Usual Suspects
(Some) Usual Suspects
(Some) Usual Suspects
(Some) Usual Suspects
Workshop Agenda
-
Requirements for a "Safe" Python interpreter
-
A standard GUI module interface definition for Python
-
The requirements for persistent objects in Python
-
A Python engineering graphs package
-
The standard Python WWW interface
-
Embedding Python in a WWW client
-
Technical information management using Python
-
Support for dynamic loading of foreign language modules in Python
-
Replacing make, rcs, and cvs with Python
-
An Electronic Data Interchange library for Python
-
Discussing the formation of a Python Consortium
Workshop Agenda
12. compiling Python to a more efficient form (hard -- but not impossible???)
14. static type checking (could help to the previous one)
15. the management of large collections of modules (too many Python scripts currently embed hard pathnames in their main file so they can find their subordinate modules)
16. improving the efficiency of Python (e.g. by using a different garbage collection scheme)
17. improving portability of Python code between Unix and non-Unix
platforms (your #2 is a special case of this)
Workshop Agenda
(from the fuzzy memory vaults)
- doc strings
- metaclasses
- Objective-C
Python 1.1.1
10 November 1994
- Bug fixes
Guido and CNRI
Python 1.2
13 April 1995
(2 days before Guido starts at CNRI)
- "__import__ hack"
- imp module
- "add hook for Don Beaudry" in build_class
- docstrings for modules, classes, functions
- __doc__; __name__; __self__
- tp_str, tp_doc
- support import A.B...Z
- "restricted mode"
- "THE GREAT RENAMING"
- "Use = instead of == for assignment"
- Class exceptions allowed
- Classes became pickle-able
Python 1.3
13 October 1995
- Keyword parameters
- Third argument to raise
- "Jim Fulton's abstract object interface"
- Tk 4.0
- Rewritten htmllib.py and rexec.py
- New modules ni.py and ihooks.py
-
"And lots more that you'll have to discover on your own"
Python 1.4
25 October 1996
-
new power operator, new slicing and indexing syntax
-
__names
-
Misc/NEWS
-
__file__
-
Added: site, errno, operator, cmath, Bastion, mimify
-
complex numbers
-
list()
-
"access is no longer a reserved word"
Python 1.5
3 January 1998
- assert statement, AssertionError
- import a.b.c (without ni, with __init__.py)
- New re module (Perl-style regexps)
- raw strings
- Class exceptions
- New dict methods: clear(), copy(), update(), get()
- $PYTHONHOME and better sys.path calculation
- multiple interpreters, access to GIL, etc.
- -O and __debug__ support
- Grand renaming is complete
- buffer protocol
- string interning
- Better metaclass support (instance base classes)
Python 1.5.1
14 April 1998 (?)
- No argument raise to re-raise
- mutex protected import
- Safer finalization
- python -t and -tt; tabnanny!
Python 1.5.2
13 April 1999
- First mention of JPython in Misc/NEWS
- IDLE, pynche, world, audiopy, ndiff
- __file__ is the .py file, not the .pyc/.pyo
- shamodule
- buffer()
- python -OO
- asyncore / asynchat
- os.path pretends to be a submodule
- NotImplementedError, EnvironmentError
- list.extend(), list.pop()
Python 1.6
5 September 2000
- Built-in exceptions are always classes (no more -X)
- Lots of sharing w/ Python 2.0
- Unicode support
- String methods
- SRE regular expression engine
- distutils added!
- func(*args, **kws) -- apply() no longer needed
- UnboundLocalError
- object.__contains__()
- UserString, mmap, filecmp, urllib2, zipfile, codecs, unicodedata, encodings,
- pygettext.py
Python 2.0
16 October 2000
Python 1.6.1
25 February 2001
Python 1.6 was the last of the versions developed at CNRI and the only version issued by CNRI with an open source license. Following the release of Python 1.6, and after Guido van Rossum left CNRI to work with [BeOpen], it became clear that the ability to use Python with software available under the GNU General Public License (GPL) was very desirable. CNRI and the Free Software Foundation (FSF) interacted to develop enabling wording changes to the Python license. Python 1.6.1 is essentially the same as Python 1.6, with a few minor bug fixes, and with a GPL-compatible license.
To infinity and beyond
- 2.1 - 17 April 2001
- 2.2 - 21 December 2001 (new style classes)
- 2.2.1 - import this, True, False, bool
- 2.3 - 29 July 2003
- 2.4 - 30 November 2004
- 2.5 - 16 September 2006
- 2.6 - 1 October 2008
- 3.0 - 3 December 2008
- 2.7 - 3 July 2010
Python today
- Python 2 - beautiful plumage but pinin' for the fjords
- Python 3.7 - latest and greatest
- BDFL retirement
- Python the language is 30 years old, stable, mature
- CPython is the most popular implementation
- 4th most popular language (TIOBE, January 2018)
So what's next?
...and beyond
- Core dev sprints
- Governance
- C API changes
- Performance
- Python 3.8
- Python 4 (?)
- Mentorship
Core dev sprint
- September 5-10, 2018 @ Microsoft
- 29 core devs came in, 31 left!
- Emily Morehouse & Lisa Roach
- Wide range of topics, from governance, to bug squashing, importlib_metadata, CI/bots/bpo/productivity, performance, speculative C API changes, __pypackages__, asyncio docxs rewrite, subinterpreters, PEP 572, XML/TLS, and MUCH more
Governance
- 8010 - BDFL
- 8011 - Council
- 8012 - Community
- 8013 - External Council
PEPs in the 801x series due by October 1st, vote by EO2018?
Discussions on python-committers
How do we conduct the vote and who is eligible?
C API changes
This is all speculative!
(Can we do this without breaking every extension?)
- Pave the way for Gilectomy, real GC
- Deprecate and eventually remove borrowed references
- Don't expose struct members (portable extensions b/w versions, debug builds)
- No more macros
- You can only do in C what you can do in Python
- Interpreter contexts as first argument
- Py_INCREF/Py_DECREF
Performance
- Decrease startup time (CLIs)
- Multicore & general runtime improvements
- Tagged pointers (ints, interned strings)
- GIL per subinterpreter
- Built-in Cython-like tool
- JIT
- Lazy loading, multipart pycs
- Optimize marshal
- Freeze into data segment (Facebook patch)
- "unexec"
Probably not much low-hanging fruit left in the current implementation
Python 3.8
- 3.8 in development now - time for the wacky ideas!
- But we have no BDFL :(
- Lots of good, important work still going on
- PEP 572 (assignment expressions)
- zipimport rewritten in Python
Python 4 (?)
- Totally speculative
- 3.10 will likely follow 3.9
- Definitely not as disruptive as Python 3
- If anything, it might break the C API (e.g. Gilectomy, GC)
Mentorship
- Core Mentorship Program
- core-mentorship@python.org
- Governed by Code of Conduct
- Group and individual (one-on-one mentorship)
- Two new women core devs given commit rights at Microsoft sprint
- Bring more diversity in many dimensions into core dev
- Keep Python development relevant and fun as long time core devs retire
- You don't have to know C
- You don't even have to hack directly on CPython repo
You too can be a core dev!
Barry Warsaw
barry@python.org
bwarsaw@linkedin.com
@pumpichank
github.com/warsaw
gitlab.com/warsaw
A Python Retrospective and Beyond
By Barry Warsaw
A Python Retrospective and Beyond
September 2018 BayPiggies
- 2,832