Download - Jak działa CPython
![Page 1: Jak działa CPython](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/1.jpg)
Jak działa CPythonWojciech Lichota
Maj 2014
![Page 2: Jak działa CPython](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/2.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/3.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/4.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/5.jpg)
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 6: Jak działa CPython](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/6.jpg)
Operacje na bytecode i VM
wbudowana funkcja compilemoduł disnarzędzie uncompyle2
moduł inspectmoduł traceback
lista opcode
![Page 7: Jak działa CPython](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/7.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022100602/5589d592d8b42a503b8b46b2/html5/thumbnails/9.jpg)
PochodneNazwa Platforma
Cython C
Shed Skin C++
Brython, PythonJS JavaScript
empythoned emscripten
Py4A, QPython Android
PyObjC Mac OS X
Numba LLVM