SlideShare a Scribd company logo
1 of 9
Download to read offline
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
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

What's hot

infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...infraxstructure: Robert Mroczkowski  "Maszyny się uczą - admińskie rozmówki p...
infraxstructure: Robert Mroczkowski "Maszyny się uczą - admińskie rozmówki p...PROIDEA
 
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptZnaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptThe Software House
 
JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...
JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...
JDD2015: Logowanie zdarzeń w architekturze opartej na mikroserwisach - Paweł ...PROIDEA
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Semihalf
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
ZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPzamcamp
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 

What's hot (19)

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

Viewers also liked

Jak przygotować się do rozmowy rekrutacyjnej na Python Developera
Jak przygotować się do rozmowy rekrutacyjnej na Python DeveloperaJak przygotować się do rozmowy rekrutacyjnej na Python Developera
Jak przygotować się do rozmowy rekrutacyjnej na Python DeveloperaWojciech Lichota
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w djangoMarcin Baran
 
Compiled Websites with Plone, Django, Xapian and SSI
Compiled Websites with Plone, Django, Xapian and SSICompiled Websites with Plone, Django, Xapian and SSI
Compiled Websites with Plone, Django, Xapian and SSIWojciech Lichota
 
Sandman - makes things REST
Sandman - makes things RESTSandman - makes things REST
Sandman - makes things RESTWojciech Lichota
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Pyra stxnext
Pyra stxnextPyra stxnext
Pyra stxnextradekj200
 
Zwinność procesu rekrutacyjnego w branży IT
Zwinność procesu rekrutacyjnego w branży ITZwinność procesu rekrutacyjnego w branży IT
Zwinność procesu rekrutacyjnego w branży ITSTX Next
 
Raspberry pi - tiny hardware, huge idea
Raspberry pi - tiny hardware, huge ideaRaspberry pi - tiny hardware, huge idea
Raspberry pi - tiny hardware, huge ideaWojciech Lichota
 
Salary Formula. Bumpy Road to Transparency.
Salary Formula. Bumpy Road to Transparency.Salary Formula. Bumpy Road to Transparency.
Salary Formula. Bumpy Road to Transparency.Agata Landzwójczak
 
Anty-wzorce w różnorodności w branży it
Anty-wzorce w różnorodności w branży itAnty-wzorce w różnorodności w branży it
Anty-wzorce w różnorodności w branży itAgata Landzwójczak
 
Continuous Deployment aplikacji w Django
Continuous Deployment aplikacji w DjangoContinuous Deployment aplikacji w Django
Continuous Deployment aplikacji w DjangoWojciech Lichota
 

Viewers also liked (13)

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

Similar to Jak działa CPython

Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...PROIDEA
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015Michał Dudak
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwLuke Adamczewski
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Polcode
 
Let your existing devices enter the witchcraft of IoT and the smart-home world
Let your existing devices enter the witchcraft of IoT and the smart-home worldLet your existing devices enter the witchcraft of IoT and the smart-home world
Let your existing devices enter the witchcraft of IoT and the smart-home worldThe Software House
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Bartosz Ratajczyk
 

Similar to Jak działa CPython (18)

Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Python io
Python ioPython io
Python io
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
PLNOG 18 - Maciej Flak - Network as a Sensor czyli wykorzystanie NetFlow do m...
 
Python IO
Python IOPython IO
Python IO
 
University day 2
University day 2University day 2
University day 2
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015
 
Phyton
PhytonPhyton
Phyton
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
 
Python. Rozmówki
Python. RozmówkiPython. Rozmówki
Python. Rozmówki
 
Let your existing devices enter the witchcraft of IoT and the smart-home world
Let your existing devices enter the witchcraft of IoT and the smart-home worldLet your existing devices enter the witchcraft of IoT and the smart-home world
Let your existing devices enter the witchcraft of IoT and the smart-home world
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
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
  • 8.
  • 9. Pochodne Nazwa Platforma Cython C Shed Skin C++ Brython, PythonJS JavaScript empythoned emscripten Py4A, QPython Android PyObjC Mac OS X Numba LLVM