Jak działa CPython
Wojciech Lichota
Maj 2014
Parsowanie kodu źródłowego
1. 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 compile
moduł dis
narzędzie uncompyle2
moduł inspect
moduł traceback
lista opcode
Implementacje
Interpreter 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
Jak działa CPython
Pochodne
Nazwa Platforma
Cython C
Shed Skin C++
Brython, PythonJS JavaScript
empythoned emscripten
Py4A, QPython Android
PyObjC Mac OS X
Numba LLVM

More Related Content

PDF
Kickoff to Node.js
PDF
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
PDF
Pan Oponka - Biografia
PDF
(prawie) Wszystko o Tinkerze
PDF
Ansible w 5 minut... Playbooki
ODP
SELinux, czyli zero-zero-day exploits - DWO 2013
PDF
Infrastructure As Code
PDF
Kickoff to Node.js
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Pan Oponka - Biografia
(prawie) Wszystko o Tinkerze
Ansible w 5 minut... Playbooki
SELinux, czyli zero-zero-day exploits - DWO 2013
Infrastructure As Code

What's hot (19)

PPT
SphinxSearch
PDF
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
ODP
Od Zera do Farmera
PDF
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
PDF
JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...
PDF
Bootloadery i programy bare metal.
PPT
Przenosiny
PDF
Angular Restmod
PPTX
Aplikacje internetowe real-time w oparciu o React/Redux
PDF
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PPTX
Platforma Kontentowa
ODP
ZamCamp #6 - Najczęstsze błędy w PHP
PDF
Ansible w praktyce
PDF
Mongodb with Rails
PDF
Ansible w 5 minut
ODP
PHP@Docker - w produkcji
PPTX
Skrypty powłoki
PPTX
ansible kmonticolo bezlogo
PDF
Hugo - make webdev fun again
SphinxSearch
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
Od Zera do Farmera
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...
Bootloadery i programy bare metal.
Przenosiny
Angular Restmod
Aplikacje internetowe real-time w oparciu o React/Redux
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
Platforma Kontentowa
ZamCamp #6 - Najczęstsze błędy w PHP
Ansible w praktyce
Mongodb with Rails
Ansible w 5 minut
PHP@Docker - w produkcji
Skrypty powłoki
ansible kmonticolo bezlogo
Hugo - make webdev fun again
Ad

Viewers also liked (13)

PDF
Jak przygotować się do rozmowy rekrutacyjnej na Python Developera
PDF
Transakcyjność w django
PDF
Grok Prezentacja
PDF
Compiled Websites with Plone, Django, Xapian and SSI
PDF
Sandman - makes things REST
PDF
Apache http server - proste i zaawansowane przypadki użycia
PDF
Grok Artykul
PDF
Pyra stxnext
PDF
Zwinność procesu rekrutacyjnego w branży IT
PDF
Raspberry pi - tiny hardware, huge idea
PDF
Salary Formula. Bumpy Road to Transparency.
PDF
Anty-wzorce w różnorodności w branży it
PDF
Continuous Deployment aplikacji w Django
Jak przygotować się do rozmowy rekrutacyjnej na Python Developera
Transakcyjność w django
Grok Prezentacja
Compiled Websites with Plone, Django, Xapian and SSI
Sandman - makes things REST
Apache http server - proste i zaawansowane przypadki użycia
Grok Artykul
Pyra stxnext
Zwinność procesu rekrutacyjnego w branży IT
Raspberry pi - tiny hardware, huge idea
Salary Formula. Bumpy Road to Transparency.
Anty-wzorce w różnorodności w branży it
Continuous Deployment aplikacji w Django
Ad

Similar to Jak działa CPython (18)

PDF
Automatyzacja utrzymania jakości w środowisku PHP
PDF
Python io
PDF
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
PDF
Secure Coding w praktyce.
PPTX
Iron Python I Dlr
PDF
Python szybki start
PDF
PDF
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
PDF
Python IO
PDF
University day 2
PDF
ITAD PolSl 2014 - Nowości w .NET 2015
PDF
Phyton
PDF
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
PDF
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
PDF
Python. Rozmówki
PDF
Let your existing devices enter the witchcraft of IoT and the smart-home world
PPTX
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
PPTX
Jak działa rekurencyjne CTE?
Automatyzacja utrzymania jakości w środowisku PHP
Python io
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Secure Coding w praktyce.
Iron Python I Dlr
Python szybki start
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
Python IO
University day 2
ITAD PolSl 2014 - Nowości w .NET 2015
Phyton
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Python. Rozmówki
Let your existing devices enter the witchcraft of IoT and the smart-home world
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
Jak działa rekurencyjne CTE?

Jak działa CPython

  • 1. Jak działa CPython Wojciech Lichota Maj 2014
  • 2. Parsowanie kodu źródłowego 1. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. Operacje na bytecode i VM wbudowana funkcja compile moduł dis narzędzie uncompyle2 moduł inspect moduł traceback lista opcode
  • 7. Implementacje Interpreter 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
  • 9. Pochodne Nazwa Platforma Cython C Shed Skin C++ Brython, PythonJS JavaScript empythoned emscripten Py4A, QPython Android PyObjC Mac OS X Numba LLVM