jak działa cpython

9

Click here to load reader

Upload: wojciech-lichota

Post on 24-Jun-2015

201 views

Category:

Technology


2 download

DESCRIPTION

Prelekcja skierowana jest do osób które niedawno zaczęły swoją przygodę z Pythonem i zainteresowane są tym jak działa wewnątrz interpreter Pythona. Podczas wykłady dowiesz się jak interpreter przetwarza pliki .py, co to jest bytecode, czym się różni .pyc od .pyo oraz czy da się uruchomić program i ukryć jego kod źródłowy. Na zakończenie autor wymieni i krótko scharakteryzuje inne implementacje oraz pochodne języka Python.

TRANSCRIPT

Page 1: Jak działa CPython

Jak działa CPythonWojciech Lichota

Maj 2014

Page 2: Jak działa CPython

Parsowanie kodu źródłowego1. Parse source code into a parse tree

(Parser/pgen.c)2. Transform parse tree into an Abstract Syntax Tree

(Python/ast.c)3. Transform AST into a Control Flow Graph

(Python/compile.c)4. Emit bytecode based on the CFG

(Python/compile.c)

Źródło: https://docs.python.org/devguide/compiler.html#abstract

Page 3: Jak działa CPython

Bytecode$ python2.7

>>> def hello_world():

... print 'Hello World!'

>>> dis.dis(hello_world)

2 0 LOAD_CONST 1 ('Hello World!')

3 PRINT_ITEM

4 PRINT_NEWLINE

5 LOAD_CONST 0 (None)

8 RETURN_VALUE

Page 4: Jak działa CPython

Bytecode$ python3.4

>>> def hello_world():

... print('Hello World!')

>>> dis.dis(hello_world)

2 0 LOAD_GLOBAL 0 (print)

3 LOAD_CONST 1 ('Hello World!')

6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)

9 POP_TOP

10 LOAD_CONST 0 (None)

13 RETURN_VALUE

Page 5: Jak działa CPython

Interpretacja bytecode

Python/ceval.c linie 1099-2810● 1500 linii kodu (bez komentarzy i pustych linii)● 132 instrukcje case● 118 instrukcji break● 80 instrukcji continue● 63 komentarze● 36 instrukcje goto

Page 7: Jak działa CPython

ImplementacjeInterpreter VM lub technika Język

CPython CPython VM C

Jython JVM Java

IronPython CLR C#

Skulpt JS engine JavaScript

RubyPython Ruby VM Ruby

PyPy JIT RPython / C

Stackless Python microthreads C

Page 9: Jak działa CPython

PochodneNazwa Platforma

Cython C

Shed Skin C++

Brython, PythonJS JavaScript

empythoned emscripten

Py4A, QPython Android

PyObjC Mac OS X

Numba LLVM