To wrap up a very busy 2016 in the Python world, the Python Software Foundation produced the first release in a new series, and the largest release in over a decade–Python 3.6.
Today we are announcing general availability of ActivePython 3.6.0 on Windows, Linux, and MacOS. This comes on the heels of our recent ActivePython 2.7.13 release, the latest in the 2.7 series. We have included the same great set of packages that every serious Python developer uses, such as requests, six, pytest, coverage and many others.
This new release of Python 3.6 includes 16 Python Enhancement Proposals (PEPs) that have been addressed in this release. This is a very large number and the largest since Python 3.0! We’ll only touch on a few of the bigger items, so for a very detailed dive into the changes please see the full change set.
What’s New In Python 3.6 (And ActivePython 3.6)
Significant improvements have been made in the dictionaries, the fundamental hashmap data structure in Python. Overall dictionary memory use has been reduced by 20% which is a fantastic accomplishment in a language as mature as Python. For large deployments this will make a significant difference to Python’s overall footprint.
Dynamic typing has always been both a benefit and a source of bugs. Python 3.6 continues to improve on the typed annotations introduced in 3.5 by now allowing annotations for class and instance variables. Type annotations provide hints to help developers to better understand their code and make it more maintainable overall. This will also allow development tools to be built on top of this functionality to provide better checking for the developer and potentially code generation.
Python 3.6 has continued to evolve its asynchronous programming capabilities now including support for await and async inside of generators and comprehensions. Overall asynchronous programming allows the developer to not have to wait for a particular (typically longer running) result such as I/O. Speaking of which, the asyncio module is now a full member of the standard library. In addition, parts of asyncio were rewritten in C to improve performance by up to 25%.
Another addition to the standard library in 3.6 is the secrets module. This provides a host of utilities for generating cryptographically strong values for authentication tokens, logins and other use cases.
It wouldn’t be a Python 3 release if we didn’t talk about strings. A new type of string format, the “f-string”, gives users the ability to have runtime evaluated expressions embedded in them. The goal of the f-string is to reduce overall boilerplate when using expressions in strings. In addition, operations on bytes and encodings like UTF-8 were optimized to a new API to create bytes objects.
Now, that is a serious list of additions and it only scratches the surface! However, one word of caution: we do not recommend first releases (i.e. X.0) in a new series for production environments. As mentioned, Python 3.6 brings so many benefits that we encourage you to start testing with it. This allows you some lead time preparation for 3.6.1 which is expected out in mid-March. In the meantime, both ActivePython 3.5.2 and 2.7.13 are production-ready and available for download.