jak działa cpython
Post on 24-Jun-2015
203 Views
Preview:
DESCRIPTION
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
top related