Slide 1

Slide 1 text

The State of Python … and the web Armin Ronacher // @mitsuhiko

Slide 2

Slide 2 text

Who am I • Armin Ronacher (@mitsuhiko) • Founding Member of the “Pocoo Team” • we're doing Jinja2, Werkzeug, Flask, Pygments, Sphinx and a bunch of other stuff.

Slide 3

Slide 3 text

Crossroads

Slide 4

Slide 4 text

Python 3 • The Elephant in the Room

Slide 5

Slide 5 text

Python in 2011 • The big Python 3 versus Python 2 debate • PyPy is making tremendous progress

Slide 6

Slide 6 text

Recent Python News • Unladen Swallow is resting • Python 3.2 was released • Python's packaging infrastructure is being worked on. • distutils2 / packaging in Python 3

Slide 7

Slide 7 text

Recent PyPy News • PyPy gets experimental support for the CPython C API • PyPy got 10.000$ by the PSF • PyPy 1.5 released • Are you using PyPy in production? Why not? http://bit.ly/pypy-survey

Slide 8

Slide 8 text

PyPy

Slide 9

Slide 9 text

PyPy Right Now • “Python written in Python” • PyPy trunk 3.7x faster than CPython over a wide variety of benchmarks • Up to 40x faster for certain benchmarks • Compatible with Python 2.7.1

Slide 10

Slide 10 text

Really Fast • http://speed.pypy.org/

Slide 11

Slide 11 text

Things that will break • There is only experimental support for the Python C API and it will always be slow. • Different garbage collection behavior, no reference counting.

Slide 12

Slide 12 text

Things that work • Django • Flask • ctypes • pyglet • twisted • sqlite

Slide 13

Slide 13 text

The Bonus • Sandbox support • Stackless execution mode • A .NET backend

Slide 14

Slide 14 text

Python 3

Slide 15

Slide 15 text

Python 3 is … • … where all new language developments are happening • … adding unicode to the whole stack • … cleaning up the language • … breaking backwards compatibility

Slide 16

Slide 16 text

The Good Parts • Introduces unicode into exceptions and source compilation as well as identifiers • Greatly improved IO API regarding unicode • New language constructs • Implementation cleaned up a lot

Slide 17

Slide 17 text

New Constructs • Extended iterable unpacking • Keyword only arguments • nonlocal • Function parameter and return value annotations

Slide 18

Slide 18 text

Improved Things • print as a function • Improved syntax for catching and raising exceptions • Ellipsis (…) syntax element now available everywhere

Slide 19

Slide 19 text

Different Behavior • More powerful metaclasses (but removed support for some tricks people relied on*) • List comprehensions are now from the behavior much closer to generator expressions • * don't abuse undocumented “features”

Slide 20

Slide 20 text

Warts removed • Argument unpacking • Unused nested tuple raising syntax • Longs no longer exposed • Classic classes gone • Absolute imports by default • Obscure standard library modules

Slide 21

Slide 21 text

Common Ground

Slide 22

Slide 22 text

New in 2.6/2.7 • Explicit byte literals, make upgrading easier • Advanced string formatting • Print as a function • Class decorators • New IO library

Slide 23

Slide 23 text

New in 2.6/2.7 • The multiprocessing package • Type hierarchy for numbers • Abstract base classes • Support for fractions

Slide 24

Slide 24 text

Going Forward

Slide 25

Slide 25 text

Beauty or Speed • Right now it's a decision between the beauty of the code (Python 3) or the raw performance (PyPy). • PyPy itself will probably always be written in Python 2, but the interpreter might at one point support Python 3.

Slide 26

Slide 26 text

Library Support • Numeric libraries work great on Python 3 and benefit of improvements in the language. • PyPy still lacks proper support for the C- API of Python.

Slide 27

Slide 27 text

Predictions • Most people will write their code against 2.7 with the intention of supporting PyPy. • Libraries that require the Python C API will become less common • We will see libraries that support targeting both Python 2.7 and Python 3.x.

Slide 28

Slide 28 text

Python and the Web

Slide 29

Slide 29 text

WSGI • New revision for Python 3 • There is some work done to port implementations to Python 3 • No longer something people actively care about. “It works”

Slide 30

Slide 30 text

New Developments • Improvements to PyPy's support for database adapters • Improvements in template compilation to take advantage of PyPy's behavior. • Porting some libraries over to Python 3.

Slide 31

Slide 31 text

Making Python 3 work

Slide 32

Slide 32 text

Python 3 can work • Start porting libraries over. • Issues with Python 3 will only be resolved if people actively try to port. • The higher level the application, the easier to port. Libraries are the culprit.

Slide 33

Slide 33 text

And it's not hard • When you're at the port where you can drop Python 2.6 support, you can write code that survives 2to3 mostly without hacks in the code. • http://bit.ly/python3-now

Slide 34

Slide 34 text

Frameworks

Slide 35

Slide 35 text

We're doing great • WSGI works out well in practice. • Pylons and BFG -> Pyramid, nice introduction into the ZOPE world. • Less and less framework specific code out there, easier to reuse.

Slide 36

Slide 36 text

Less Frameworks* • Django • Pyramid • Flask • Bottle • web.py

Slide 37

Slide 37 text

Low Level • Werkzeug • WebOb • these two might actually merge at one point in the future

Slide 38

Slide 38 text

Frameworks are Good • New frameworks are necessary to explore new paradigms and concepts. • It's surprisingly easy to switch frameworks or parts of frameworks in Python. • Frameworks are merging and evolving.

Slide 39

Slide 39 text

Thank you

Slide 40

Slide 40 text

Contact / Slides • Armin Ronacher • @mitsuhiko • http://lucumr.pocoo.org/ • http://lucumr.pocoo.org/talks/ <- Slides