Download - Jak działa CPython

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


Top Related