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

  1. Requirements for a "Safe" Python interpreter

  2. A standard GUI module interface definition for Python

  3. The requirements for persistent objects in Python

  4. A Python engineering graphs package

  5. The standard Python WWW interface

  6. Embedding Python in a WWW client

  7. Technical information management using Python

  8. Support for dynamic loading of foreign language modules in Python

  9. Replacing make, rcs, and cvs with Python

  10. An Electronic Data Interchange library for Python

  11. 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

Made with Slides.com