Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
A Python for Future Generations
Search
Armin Ronacher
July 10, 2017
Programming
9.6k
20
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A Python for Future Generations
Keynote at EuroPython 2017 in Rimini.
Armin Ronacher
July 10, 2017
More Decks by Armin Ronacher
See All by Armin Ronacher
Reflections on building cloud and local hybrid machine entities
mitsuhiko
1
230
Agentic Coding: The Future of Software Development with Agents
mitsuhiko
0
960
Do Dumb Things
mitsuhiko
0
1.1k
No Assumptions
mitsuhiko
0
460
The Complexity Genie
mitsuhiko
0
360
The Catch in Rye: Seeding Change and Lessons Learned
mitsuhiko
0
470
Runtime Objects in Rust
mitsuhiko
0
460
Rust at Sentry
mitsuhiko
0
630
Overcoming Variable Payloads to Optimize for Performance
mitsuhiko
0
320
Other Decks in Programming
See All in Programming
パーソナライズPodcastを作った話
repunit11
0
130
phperだってパンチカードでコーディングしたい
o0h
PRO
0
250
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
240
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.6k
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.6k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
190
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
360
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
360
Java 27新機能 / Java 27 new features
kishida
2
210
Agents on Rails - Rails at Scale 2026
irinanazarova
0
520
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
13k
My Coaching Mixtape
mlcsv
0
340
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
A Tale of Four Properties
chriscoyier
163
24k
The Curse of the Amulet
leimatthew05
3
15k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
260
We Are The Robots
honzajavorek
0
390
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 &