New features planned for Python 4.0
With the release of Python 3.8 coming soon, the core development team has asked me to summarize our latest discussions on the new features planned for Python 4.0, codename "ouroboros: the snake will eat itself". This will be an exciting release and a significant milestone, many thanks to the hard work of over 100 contributors.
- After heated debate on the mailing list, the 79-character line limit prescribed by PEP8 will be updated. IDE users all over the world will now be able to take advantage of their 30" ultra-wide 4K monitors, as the recommended line length will be increased to 89.5 characters (this was a compromise with the 100-character lobby, the decision being to split the difference).
- All new libraries and standard lib modules must include the phrase "for humans" somewhere in their title.
- Finally, a new string-type for the masses, Python 4.0 will feature
"z-strings": C-style NULL terminated bytestrings. Just prefix your string like so,
z'my string'and Python will automatically ensure it is NULL-terminated. Note: the new z-strings cannot be used with any of the existing APIs that take string arguments - they must first be decoded to unicode strings or cast to
- Type-hinting has been extended to provide even fewer tangible benefits. This new and "nerfed" type hinting will be called type whispering.
- Fuck it we're going to just vendor libuv to provide the event loop for
- You can now use the
asynckeyword before every single other keyword in the Python language, and we encourage you to
async do so. There's nothing wrong with cargo-culting some magic keywords all over the place -- you want to go fast, don't you?
- In addition to
dataclasses(3.7), Python 4.0 will include several new thousand line decorator-hacks to implement simple struct types.
- The GIL has been removed.
- Just kidding! Instead we've been focusing all our effort on making it easier to juggle multiple interpreter data-structures within a single thread. No, no, you can thank us later!
strthing kept many of us employed as we had convinced our companies they needed to upgrade to Python 3. In the same spirit, we are excited to announce that there will now be two
intwill be a 32-bit signed integer, and
longwill be a 64-bit signed integer. But before you say, "hey, they did that in Python 2!", we'd like to add that you can no longer use
intanywhere, and will need to convert them all to
- Based on the overwhelming success of the
2to3utility, we plan to release a
3to4tool that will automatically convert your code to utilize these exciting new features.
With much sadness, the following features did not make the cut:
- After attempting to rewrite portions of the interpreter with Rust, nobody could figure out how to disable the borrow-checker, so we gave up.
switchstatement (and yes, yes, I know you can use a
dictto do dispatching).
concurrent.Presentwill not be merged in time for this release, but hey, we've got futures, haven't we?
- Since nobody understands how
twistedasyncio works, we are unable to offer any improvements at this time. The PSF now recommends all new projects to use
- Unfortunately we will not be able to offer any improvements to the packaging "situation".
We look forward to this release, and will do everything in our power to ensure it takes us several minor versions before it is even remotely usable.
Take heart! Remember the python motto:
What is dead can never die
Commenting has been closed, but please feel free to contact me