Slide 1

Slide 1 text

Python all the things! Dr Russell Keith-Magee @freakboy3742 PyCon AU 2016

Slide 2

Slide 2 text

Python all the things! Dr Russell Keith-Magee @freakboy3742 PyCon AU 2016

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

How, and why?

Slide 10

Slide 10 text

How

Slide 11

Slide 11 text

What is Python?

Slide 12

Slide 12 text

Python is a language specification.

Slide 13

Slide 13 text

Python is a reference implementation.

Slide 14

Slide 14 text

CPython is a reference implementation.

Slide 15

Slide 15 text

Simplest approach: (Embedded) CPython

Slide 16

Slide 16 text

Unix & C

Slide 17

Slide 17 text

Porting CPython

Slide 18

Slide 18 text

A cavelcade of platforms... $ ls -d Lib/plat-* plat-aix3 plat-freebsd7 plat-next3 plat-aix4 plat-freebsd8 plat-os2emx plat-atheos plat-generic plat-riscos plat-beos5 plat-irix5 plat-sunos5 plat-darwin plat-irix6 plat-unixware7 plat-freebsd4 plat-linux2 plat-freebsd5 plat-mac plat-freebsd6 plat-netbsd1

Slide 19

Slide 19 text

Compiling the kernel

Slide 20

Slide 20 text

Cross-compiling the kernel

Slide 21

Slide 21 text

Compiling CPython

Slide 22

Slide 22 text

Embedding CPython

Slide 23

Slide 23 text

Accessing system libraries

Slide 24

Slide 24 text

ctypes & FFI

Slide 25

Slide 25 text

ctypes from ctypes import * libc = cdll.LoadLibrary("libc.so.6") libc.strchr.argtypes = [c_char_p, c_char] libc.strchr.restype = c_char_p >>> print(libc.strchr(b"abcdef", b"d")) 'def'

Slide 26

Slide 26 text

Where does this work?

Slide 27

Slide 27 text

Alas, I have no compiler...

Slide 28

Slide 28 text

Android, Java and Unix

Slide 29

Slide 29 text

Platform limitations

Slide 30

Slide 30 text

Python that isn't CPython

Slide 31

Slide 31 text

Use a different compiler

Slide 32

Slide 32 text

PyPy.js

Slide 33

Slide 33 text

Inside a Python Parser Compiler Eval loop Standard library

Slide 34

Slide 34 text

Implementing a new Python Parser Compiler Eval loop Standard library

Slide 35

Slide 35 text

MicroPython Jython IronPython Skulpt Brython

Slide 36

Slide 36 text

Implementing a new Python Parser Compiler Eval loop Standard library

Slide 37

Slide 37 text

VOC

Slide 38

Slide 38 text

Implementing a new Python Parser Compiler Eval loop Standard library

Slide 39

Slide 39 text

Batavia

Slide 40

Slide 40 text

Why not compile to Javascript?

Slide 41

Slide 41 text

Spot the difference var x = 10; function scope_test(y) { x = x * y; } scope_test(3) console.log('x = ' + x); x = 10 def scope_test(y): x = x * y scope_test(3) print('x = ', x)

Slide 42

Slide 42 text

Why not compile to Javascript?

Slide 43

Slide 43 text

The missing pieces

Slide 44

Slide 44 text

A different development cycle

Slide 45

Slide 45 text

Implementing a new Python Parser Compiler Eval loop Standard library

Slide 46

Slide 46 text

The Standard Library

Slide 47

Slide 47 text

The Standard Library

Slide 48

Slide 48 text

A reference Python standard library?

Slide 49

Slide 49 text

Ouroboros

Slide 50

Slide 50 text

Deployment and delivery

Slide 51

Slide 51 text

Briefcase

Slide 52

Slide 52 text

How

Slide 53

Slide 53 text

Why?

Slide 54

Slide 54 text

Existential threats

Slide 55

Slide 55 text

Quo vadimus

Slide 56

Slide 56 text

New platforms Phones Tablets Watches Set-top boxes Embedded systems

Slide 57

Slide 57 text

An opportunity

Slide 58

Slide 58 text

Polylingualism required Objective C Swift Java JavaScript

Slide 59

Slide 59 text

A defence of polylingualism

Slide 60

Slide 60 text

A counterargument to polylingualism

Slide 61

Slide 61 text

First contact

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

Changing perceptions

Slide 64

Slide 64 text

Why Python?

Slide 65

Slide 65 text

Breadth of technical domains

Slide 66

Slide 66 text

Social leadership

Slide 67

Slide 67 text

Accessibility

Slide 68

Slide 68 text

We're doing good. We can do better.

Slide 69

Slide 69 text

Burnout

Slide 70

Slide 70 text

Don't assume resources are free

Slide 71

Slide 71 text

Relationship with money

Slide 72

Slide 72 text

A side effect: Enabling Diversity

Slide 73

Slide 73 text

The biggest challenges are non-technical

Slide 74

Slide 74 text

The biggest challenges are non-technical

Slide 75

Slide 75 text

The future

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

pybee.org/b/signup

Slide 78

Slide 78 text

Fortune favours the prepared mind

Slide 79

Slide 79 text

Thank You! [email protected] @freakboy3742 pybee.org pybee.org/b/signup