Slide 1

Slide 1 text

PyPy.js What? How? Why? Ryan Kelly [email protected] @rfkelly

Slide 2

Slide 2 text

Mozilla

Slide 3

Slide 3 text

Mozilla

Slide 4

Slide 4 text

Mozilla ❤ The Web

Slide 5

Slide 5 text

The Web Technology: HTTP HTML CSS JavaScript Culture: Open Ubiquitous Secure Trustworthy

Slide 6

Slide 6 text

The Web Cons: HTTP HTML CSS JavaScript Pros: Open Ubiquitous Secure Trustworthy

Slide 7

Slide 7 text

The Web is worth Keeping

Slide 8

Slide 8 text

The Web is worth Improving

Slide 9

Slide 9 text

Andreas Gal, Mozilla CTO: "For Mozilla, anything that the Web can’t do, or anything that the Web is not faster and better at than native technologies, is a bug." https://bugzilla.mozilla.org/

Slide 10

Slide 10 text

A Bug in the Web "I want to code in Python dammit"

Slide 11

Slide 11 text

PyPy.js What? How? Why?

Slide 12

Slide 12 text

What?

Slide 13

Slide 13 text

PyPy.js: What?

Slide 14

Slide 14 text

PyPy.js is ... Not the First Pyjamas PyJS Skulpt Brython PythonJS RapydScript Pystachio Pyjaco ...?

Slide 15

Slide 15 text

PyPy.js is ... An Experiment

Slide 16

Slide 16 text

PyPy.js is ... Compliant

Slide 17

Slide 17 text

PyPy.js is ... Fast

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

PyPy.js is ... In­Browser v a r v m = n e w P y P y J S ( ) ; v m . r e a d y . t h e n ( f u n c t i o n ( ) { . . . } ) v m . s e t ( " x " , 1 2 ) . t h e n ( . . . ) v m . e v a l ( " x = x + 1 " ) . t h e n ( . . . ) v m . g e t ( " x " ) . t h e n ( . . . )

Slide 23

Slide 23 text

PyPy.js is ... In­Browser

Slide 24

Slide 24 text

PyPy.js is ... "An experiment in building a fast, compliant, in­browser python environment" But...

Slide 25

Slide 25 text

PyPy.js is ... Not so Fast

Slide 26

Slide 26 text

PyPy.js is ... Humongous Raw GZip pypy.vm.js 15 MB 2 MB pypy.vm.js.mem 5.5 MB 1.4 MB

Slide 27

Slide 27 text

PyPy.js is ... Humongous Raw GZip pypy.vm.js 14 MB 1.8 MB pypy.vm.js.mem 5.5 MB 1.4 MB

Slide 28

Slide 28 text

How?

Slide 29

Slide 29 text

PyPy

Slide 30

Slide 30 text

PyPy: A Python interpreter, written in "RPython" A toolchain for translating RPython to C A JIT­Compiler­Generator

Slide 31

Slide 31 text

PyPy:

Slide 32

Slide 32 text

PyPy: PyPy.py

Slide 33

Slide 33 text

PyPy: PyPy.py PyPy.c rpython

Slide 34

Slide 34 text

PyPy: PyPy.py PyPy.c PyPy.x86 rpython gcc

Slide 35

Slide 35 text

PyPy: PyPy.py PyPy.c mycode.py PyPy.x86 rpython gcc

Slide 36

Slide 36 text

PyPy: PyPy.py PyPy.c mycode.x86 mycode.py PyPy.x86 rpython gcc pypy jit

Slide 37

Slide 37 text

Emscripten

Slide 38

Slide 38 text

Emscripten: An LLVM backend that generates JavaScript A simulated POSIX environment, in JavaScript Originally for porting games to the web

Slide 39

Slide 39 text

Emscripten:

Slide 40

Slide 40 text

Emscripten: mycode.c

Slide 41

Slide 41 text

Emscripten: mycode.c mycode.js emcc

Slide 42

Slide 42 text

Emscripten: mycode.c mycode.js mycode.x86 js jit emcc

Slide 43

Slide 43 text

asm.js "An extraordinarily optimizable, low­level subset of JavaScript"

Slide 44

Slide 44 text

f u n c t i o n S q r t M o d u l e ( s t d l i b , f o r e i g n , h e a p ) { " u s e a s m " ; v a r s q r t = s t d l i b . M a t h . s q r t ; v a r H E A P F 6 4 = n e w s t d l i b . F l o a t 6 4 A r r a y ( h e a p ) ; f u n c t i o n s q r t _ p t r ( a d d r ) { a d d r = a d d r | 0 ; v a r x = 0 . 0 ; x = + H E A P F 6 4 [ a d d r > > 3 ] ; H E A P F 6 4 [ a d d r > > 3 ] = + s q r t ( x ) ; } r e t u r n { s q r t _ p t r : s q r t _ p t r } ; }

Slide 45

Slide 45 text

PyPy.js: How?

Slide 46

Slide 46 text

PyPy.js: How? PyPy.py

Slide 47

Slide 47 text

PyPy.js: How? PyPy.py PyPy.c rpython

Slide 48

Slide 48 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js rpython emcc

Slide 49

Slide 49 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js PyPy.x86 rpython js jit emcc

Slide 50

Slide 50 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js mycode.py PyPy.x86 rpython js jit emcc

Slide 51

Slide 51 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js mycode.js mycode.py PyPy.x86 rpython js jit emcc pypy jit

Slide 52

Slide 52 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js mycode.js mycode.x86 mycode.py PyPy.x86 rpython js jit emcc pypy jit js jit

Slide 53

Slide 53 text

Awful?

Slide 54

Slide 54 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js mycode.js mycode.x86 mycode.py PyPy.x86 rpython js jit emcc pypy jit js jit

Slide 55

Slide 55 text

PyPy.js: How? PyPy.py PyPy.c PyPy.js mycode.js mycode.x86 mycode.py PyPy.x86 rpython js jit emcc pypy jit js jit cpu micro-ops prediction pipelining ...

Slide 56

Slide 56 text

It's awful all the way down

Slide 57

Slide 57 text

Why?

Slide 58

Slide 58 text

PyPy.js: Why? http://www.smbc­comics.com/index.php?id=2088

Slide 59

Slide 59 text

PyPy.js: Why? http://www.smbc­comics.com/index.php?id=2088

Slide 60

Slide 60 text

PyPy.js: Why? < s c r i p t t y p e = " t e x t / p y t h o n " > p r i n t ( " b u h - b y e j a v a s c r i p t ! " ) < / s c r i p t >

Slide 61

Slide 61 text

You're gonna have a bad time

Slide 62

Slide 62 text

Consider Alternatives http://brython.info http://github.com/PythonJS

Slide 63

Slide 63 text

py2exe

Slide 64

Slide 64 text

py2web

Slide 65

Slide 65 text

IPython

Slide 66

Slide 66 text

Free Stuff!

Slide 67

Slide 67 text

Please, file bugs against the Web

Slide 68

Slide 68 text

[email protected] @rfkelly http://pypyjs.org/ http://github.com/rfk/talk­pypyjs­what­how­why

Slide 69

Slide 69 text

No content