jak działa cpython
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
Jak działa CPythonWojciech Lichota
Maj 2014
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
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
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
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
Operacje na bytecode i VM
wbudowana funkcja compilemoduł disnarzędzie uncompyle2
moduł inspectmoduł traceback
lista opcode
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
PochodneNazwa Platforma
Cython C
Shed Skin C++
Brython, PythonJS JavaScript
empythoned emscripten
Py4A, QPython Android
PyObjC Mac OS X
Numba LLVM