Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Python for Future Generations
Search
Armin Ronacher
July 10, 2017
Programming
20
9k
A Python for Future Generations
Keynote at EuroPython 2017 in Rimini.
Armin Ronacher
July 10, 2017
Tweet
Share
More Decks by Armin Ronacher
See All by Armin Ronacher
Runtime Objects in Rust
mitsuhiko
0
220
Rust at Sentry
mitsuhiko
0
250
Overcoming Variable Payloads to Optimize for Performance
mitsuhiko
0
100
Rust API Design Learnings
mitsuhiko
0
400
The Snowball Effect of Open Source
mitsuhiko
0
280
Mobile Games are Living Organisms, Too
mitsuhiko
0
180
We gave a Mouse an NDK
mitsuhiko
0
660
Debug is the new Release
mitsuhiko
1
520
A Future Python
mitsuhiko
0
2.6k
Other Decks in Programming
See All in Programming
How to improve maintainability and readability of your automated tests? ( #scrumniigata )
teyamagu
PRO
1
130
戦略的DDDは重いのか? / Is strategic DDD heavy?
pictiny
3
2.2k
Escolhendo (ou não) o melhor ORM para o seu projeto
andreiacsilva
1
180
勉強会4_アップデートされたAssistantsAPIを試す
milky04
0
890
TSKaigi 2024 - 新サービス Progate Path の演習で TypeScript を採用して見えた教材観点からの利点と課題
makotoshimazu
1
230
Open standards for building event-driven applications in the cloud
meteatamel
0
240
otelcol receiver 自作RTA / Pepabo Tech Conference #22 春のSREまつり
arthur1
0
1.1k
WebGLで始める コンピュータグラフィックス入門
heller77
0
390
Long journey of Ruby standard library RubyKaigi 2024
andpad
2
360
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
120
TypeScriptで使いやすいOpenAPIの書き方
yukimochi_dwango
1
980
Exploring Type-Informed Lint Rules in Rust based TypeScript Linters
unvalley
3
660
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
325
20k
The Brand Is Dead. Long Live the Brand.
mthomps
49
31k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
14
8.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
15
1.6k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
What the flash - Photography Introduction
edds
64
11k
Clear Off the Table
cherdarchuk
86
310k
Rails Girls Zürich Keynote
gr2m
91
13k
Web Components: a chance to create the future
zenorocha
306
41k
Being A Developer After 40
akosma
67
580k
Scaling GitHub
holman
457
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
39
2.5k
Transcript
A Python for Future Generations Armin @mitsuhiko Ronacher
Hi, I'm Armin ... and I do Open Source, lots
of Python and SaaS Flask Sentry …
… and here is where you can find me twitter.com/@mitsuhiko
github.com/mitsuhiko lucumr.pocoo.org/
‘raising awareness’
the grass is always greener somewhere
… what's Python anyway?
Python is whatever cpython does
behavior & stdlib
a + b = ?
a.__add__(b) ?
type(a).__add__(a, b) ?
a.__class__.__add__(a, b) ?
they are all not necessarily correct
1 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6
BINARY_ADD
which is “obj as num”.add or “obj as sequence”.concat
gave us unclear behavior when subclassing builtins
there is no “+” operator
there is PyNumber_Add and PySequence_Concat
does it matter?
debatable but … kinda?
pypy, jython all copy the quirks because
they want high compatibility because
users would not use it if it was not compatible
because
prevents more innovative language changes
Python in 30 Years?
make the python we use more like the python we
teach
it's a common story
python developers value compatibility
distutils implements original setup.py
setuptools monkey patches distutils to support Python eggs
pip monkey patches setuptools on the fly to manage python
packages
wheel monkey patches setuptools to build wheels instead of eggs
cffi monkey patches setuptools and distutils to build extensions
snaek monkey patches cffi to build Rust extension modules
the GIL
the only reason removing the GIL is hard is backwards
compatibility
looks like we're not good at breaking compatibility
our only attempt was both radical and not radical enough
future of “scripting” languages
they are here to stay
but they will look different
standards + ecosystem
if we want to be here in 30 years, we
need to evolve
where we did well
interpreter code is readable
ease of compilation
extensibility
flat dependency chains
runtime introspection
what we should probably do
easier and clearer language behavior
looking elsewhere
JavaScript
Rust
both are new and modern both learned from mistakes
packaging and modules
packaging and modules package.json Cargo.toml
packaging and modules • metadata is runtime available • by
default no code execution on installation • (optionally) multiple versions per library • public vs private / peer dependencies
packaging and modules • we're moving away from setup.py install
• pip is a separate tool • wheels • multi-version would require metadata access where are we now?
packaging and modules • we can steal from others •
can target python 3 only if needed realistic change?
language standard
language standard • javascript: clarify interpreter behavior • simplified language
subset? • generally leaner language? • more oversight over language development
language standard • maybe micropython and other things can lead
the way • community can kill extension modules for CFFI realistic change?
unicode
unicode utf-8 everywhere wtf-8 where needed
unicode • very little guessing • rust: operating system string
type • rust: free from utf-8 to os-string and bytes • explicit unicode character APIs • emojis mean no basic plane
packaging and modules • we would need to kill string
slicing • utf-8 everywhere is straightforward • kill surrogate-escapes for a real os string? realistic change?
extension modules
extension modules more cffi less libpython
extension modules • tricky for things like numpy • generally
possible for many uses realistic change?
linters & type annotations
linters & type annotations babel, eslint, … typescript, flow, …
linters & type annotations rustfmt, gofmt, prettier, …
linters & type annotations • maybe? • typing in Python
3 might go this way realistic change?
what you can do!
abuse the language less
sys._getframe(N).f_locals['_wat'] = 42
class X(dict):
stop writing non cffi extensions
stop being clever with sys.modules
awareness is the first step
QA &