Open
Description
Python 3.6 beta 1 was released on 12 Sep 2016, and a summary of the new features can be found here: https://docs.python.org/3.6/whatsnew/3.6.html . Being in beta stage means we can provide feedback on any of the new features/changes if we like.
(See #1329 for Python 3.5 support, which is still pending.)
New syntax features:
- PEP 498 - Literal String Formatting : f-strings were implemented in 692d36d
- PEP 515 - Underscores in Numeric Literals; done in 6a445b6 ; see also Add support for underscores in numeric literals #3831
- PEP 525 - Asynchronous Generators (provisional); see Add support for async generators (PEP525) #6668
- PEP 526 - Syntax for Variable Annotations (provisional) for uPy: requires changes to parser, relevant for viper; see py: Implement PEP 526, syntax for variable annotations #6126
- PEP 530 - Asynchronous Comprehensions
New built-in features:
- PEP 468 - Preserving the order of **kwargs in a function
- PEP 487 - Simpler customization of class creation
- PEP 520 - Preserving Class Attribute Definition Order
Standard library changes:
- PEP 495 - Local Time Disambiguation
- PEP 506 - Adding A Secrets Module To The Standard Library [not relevant to uPy core]
- PEP 519 - Adding a file system path protocol
CPython internals (not exposed at the Python level so not relevant to uPy):
Linux/Windows changes:
- PEP 524 - Make os.urandom() blocking on Linux (during system startup)
- PEP 528 - Change Windows console encoding to UTF-8 (provisional)
- PEP 529 - Change Windows filesystem encoding to UTF-8 (provisional)
- A
global
ornonlocal
statement must now textually appear before the first use of the affected name in the same scope. Previously this was a SyntaxWarning. - It is now possible to set a special method to
None
to indicate that the corresponding operation is not available. For example, if a class sets__iter__()
toNone
, the class is not iterable. - Long sequences of repeated traceback lines are now abbreviated as
"[Previous line repeated {count} more times]"
- Import now raises the new exception
ModuleNotFoundError
when it cannot find a module. Code that currently checks for ImportError (in try-except) will still work. - Class methods relying on zero-argument
super()
will now work correctly when called from metaclass methods during class creation.
Changes to MicroPython built-in modules
- array - Exhausted iterators of
array.array
will now stay exhausted even if the iterated array is extended. - asyncio (many, may need another ticket)
- binascii - The
b2a_base64()
function now accepts an optional newline keyword argument to control whether the newline character is appended to the return value.
- cmath
- The new
cmath.tau
(τ) constant has been added. - New constants:
cmath.inf
andcmath.nan
to matchmath.inf
andmath.nan
, and alsocmath.infj
andcmath.nanj
to match the format used by complex repr.
- The new
- collections
- The new
Collection
abstract base class has been added to represent sized iterable container classes. - The new
Reversible
abstract base class represents iterable classes that also provide the__reversed__()
method. - The new
AsyncGenerator
abstract base class represents asynchronous generators - The
namedtuple()
function now accepts an optional keyword argument module, which, when specified, is used for the__module__
attribute of the returned named tuple class. - The verbose and rename arguments for
namedtuple()
are now keyword-only. - Recursive
collections.deque
instances can now be pickled.
- The new
- hashlib
-
hashlib
supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2. - BLAKE2 hash functions were added to the module.
blake2b()
andblake2s()
are always available and support the full feature set of BLAKE2. - The SHA-3 hash functions
sha3_224()
,sha3_256()
,sha3_384()
,sha3_512()
, and SHAKE hash functionsshake_128()
andshake_256()
were added. - The password-based key derivation function
scrypt()
is now available with OpenSSL 1.1.0 and newer.
-
- json -
json.load()
andjson.loads()
now support binary input. Encoded JSON should be represented using either UTF-8, UTF-16, or UTF-32. - math - The tau (τ) constant has been added to the
math
andcmath
modules. - os
- See the summary of PEP 519 for details on how the
os
andos.path
modules now support path-like objects.
- A new
close()
method allows explicitly closing ascandir()
iterator. Thescandir()
iterator now supports the context manager protocol. - On Linux,
os.urandom()
now blocks until the system urandom entropy pool is initialized to increase the security. - The Linux
getrandom()
syscall (get random bytes) is now exposed as the newos.getrandom()
function.
- See the summary of PEP 519 for details on how the
- re
- Added support of modifier spans in regular expressions. Examples:
'(?i:p)ython'
matches'python'
and'Python'
, but not'PYTHON'
;'(?i)g(?-i:v)r'
matches'GvR'
and'gvr'
, but not'GVR'
. - Match object groups can be accessed by
__getitem__
, which is equivalent togroup()
. Somo['name']
is now equivalent tomo.group('name')
. - Match objects now support index-like objects as group indices.
- Added support of modifier spans in regular expressions. Examples:
- socket
- The
ioctl()
function now supports theSIO_LOOPBACK_FAST_PATH
control code. - The
getsockopt()
constantsSO_DOMAIN
,SO_PROTOCOL
,SO_PEERSEC
, andSO_PASSSEC
are now supported. - The
setsockopt()
now supports thesetsockopt(level, optname, None, optlen: int)
form. - The socket module now supports the address family
AF_ALG
to interface with Linux Kernel crypto API.ALG_*
,SOL_ALG
andsendmsg_afalg()
were added. - New Linux constants
TCP_USER_TIMEOUT
andTCP_CONGESTION
were added.
- The
- ssl
-
ssl
supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2. - 3DES has been removed from the default cipher suites and ChaCha20 Poly1305 cipher suites have been added.
-
SSLContext
has better default configuration for options and ciphers. - SSL session can be copied from one client-side connection to another with the new
SSLSession
class. TLS session resumption can speed up the initial handshake, reduce latency and improve performance. - The new
get_ciphers()
method can be used to get a list of enabled ciphers in order of cipher priority. - All constants and flags have been converted to
IntEnum
andIntFlags
. - Server and client-side specific TLS protocols for
SSLContext
were added. - Added
SSLContext.post_handshake_auth
to enable andssl.SSLSocket.verify_client_post_handshake()
to initiate TLS 1.3 post-handshake authentication.
-
- struct - now supports IEEE 754 half-precision floats via the
'e'
format specifier. - sys - The new
getfilesystemencodeerrors()
function returns the name of the error mode used to convert between Unicode filenames and bytes filenames. - zlib - The
compress()
anddecompress()
functions now accept keyword arguments.
(Changes to non-built-in modules will need to be documented elsewhere.)