History of Python¶
Guido van Rossum started to write Python in December 1989.
History of Python releases¶
See also Status of Python branches.
- Python 3.9: October 2020
- Python 3.8: October 2019
- Python 3.7: June 2018
- Python 3.6: December 2016
- Python 3.5: September 2015
- Python 3.4: March 2014
- Python 3.3: September 2012
- Python 3.2: February 2011
- Python 2.7: July 2010
- Python 3.1: June 2009
- Python 3.0: December 2008
- Python 2.6: October 2008
- Python 2.5: September 2006
- Python 2.4: March 2005
- Python 2.3: July 2003
- Python 2.2: December 2001
- Python 2.1: April 2001
- Python 2.0: October 2000
- Python 1.5: April 1999
- Python 0.9.1: February 20, 1991 (date commonly used at the birth of the Python project)
History of the Python language (syntax)¶
- Python 3.8:
x := 1
assignment expression (PEP 572) and/
in function for positional-only parameters (PEP 570) - Python 3.7:
async
andawait
become keywords - Python 3.6: f-strings (PEP 498 “Literal String Interpolation”)
- Python 3.5:
- Add
async
andawait
(not really keywords yet) - The
@
operator (PEP 465 “A dedicated infix operator for matrix multiplication”) - PEP 448 “Additional Unpacking Generalization”
- Add
- (Python 3.4: no change)
- Python 3.3:
yield from
: PEP 380 “Syntax for Delegating to a Subgenerator”u'unicode'
syntax is back: PEP 414 “Explicit Unicode literals”
- (Python 3.2: no change)
- Python 2.7:
- all changes of Python 3.1
- Python 3.1:
- dict/set comprehension
- set literals
- multiple context managers in a single with statement
- Python 3.0:
- all changes of Python 2.6
- new
nonlocal
keyword raise exc from exc2
: PEP 3134 “Exception Chaining and Embedded Tracebacks”print
andexec
become a functionTrue
,False
,None
,as
,with
are reserved words- Change from
except exc, var
toexcept exc as var
: PEP 3110 “Catching Exceptions in Python 3000” - Removed syntax:
a <> b
,`a`
,123l
,123L
,u'unicode'
,U'unicode'
anddef func(a, (b, c)): pass
- PEP 3132 “Extended Iterable Unpacking”
- Python 2.6:
- with: PEP 343 “The “with” Statement”
b'bytes'
syntax: PEP 3112 “Bytes literals in Python 3000”
Old Python Versions¶
- Python 0.9.1
- Python 1.5.2
- Python 0.9.1 .. 2.0 source tarballs
- David Beazley tests in 2017 (tweets)
- neopythonic by Guido van Rossum: Ramblings through technology, politics, culture and philosophy by the creator of the Python programming language.
- History of Python (Wikipedia article)
- The History of Python by Guido van Rossum: A series of articles on the history of the Python programming language and its community.
Development before GitHub¶
Buildbot was only running after changes were pushed upstream. It was common that a change broke the Windows support, and so core devs pushed an “attempt to fix Windows” commit, and then a second one, etc.
To propose a change, a contributor had to open an issue in the bug tracker (Roundup at bugs.python.org), and attach a patch file. A core developer had to
- Download the patch locally
- Apply the patch file
- Fix conflicts: when the day was older than 1 day, conflicts were very likely
Misc/NEWS was basically always in conflict, especially on merges.
Changes were first fixed in the oldest supported branch, and then forward-ported to newer branches. For example, fixed in 2.6, and ported to 2.7, 3.0 and 3.1.
When Subversion was used, a Subversion “property” (in practice, a text file tracked by Subversion) listed the revision number of all “merged” changes. For example, when a change made in the 2.6 branch was merged into the 2.7 branch, it was added to this list. It was likely that this property file was in conflict. Sadly, it was a text file made of a single line with thousands of revision numbers. Text editors are not convenient to edit such file. It was barely possible to fix a conflict in this property.
A new tool to review (comment) patches was linked to Roundup: Rietveld. It was possible to generate a patch from a fork the Mercurial repository, and then get a review page. Rietveld supported multiple revisions of the same change. Drawback: the tool was not well integrated with Roundup. For example, there was no way to unsubscribe from a review.
Python 3000¶
CVS, Subversion, Mercurial¶
- CVS: Initially hosted on cvs.python.org, it migrated to Sourceforge
- Subversion: https://svn.python.org/projects/python/
- Mercurial: https://hg.python.org/cpython/
- Map Subversion revision to Mercurial commit: Misc/svnmap.txt file in the Python code base.
- Lookup service. Examples:
- Subversion revision 68121: https://hg.python.org/lookup/r68121 redirects to http://svn.python.org/view?view=revision&revision=68121 but sadly this service is down (tested in September 2020)