PyPy's Approach to Virtual Machine Construction

Podobne dokumenty
Java EE produkcja oprogramowania

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Translacja wprowadzenie

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Podstawy programowania. Wprowadzenie

Tworzenie oprogramowania

Programowanie obiektowe. Wprowadzenie

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Rozwiązanie Compuware dynatrace

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Metody Kompilacji Wykład 1 Wstęp

Programowanie komputerów

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

Paradygmaty programowania

Optimizing Programs with Intended Semantics

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Programowanie obiektowe

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Redis, skrypty w języku Lua

Programowanie obiektowe - 1.

Programowanie w języku C++ Grażyna Koba

Programowanie obiektowe


Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Java jako język programowania

Języki i paradygmaty programowania - 1

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

KONSTRUKCJA KOMPILATORÓW

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta:

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Programowanie w języku Python. Grażyna Koba

Programowanie obiektowe

Microsoft IT Academy kurs programowania

Programowanie Komponentowe WebAPI

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Historia modeli programowania

Dziedziczenie. Tomasz Borzyszkowski

Semantyka i Weryfikacja Programów - Laboratorium 3

Podstawy programowania

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Przeciążanie operatorów

Web frameworks do budowy aplikacji zgodnych z J2EE

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Ćwiczenie 1. Przygotowanie środowiska JAVA

Języki i metodyka programowania

Podstawy programowania.

Pakiety i interfejsy. Tomasz Borzyszkowski

Spis treści. Wprowadzenie 15

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Projektowanie obiektowe. Roman Simiński Polimorfizm

Technika mikroprocesorowa. Języki programowania mikrokontrolerów

Wykład 9: Polimorfizm i klasy wirtualne

Wprowadzenie do programowania

Zapisywanie algorytmów w języku programowania

Python wstęp do programowania dla użytkowników WCSS

Wykład 8: klasy cz. 4

Systemy Operacyjne Wirtualizacja

Przyczyny dwustopniowego tłumaczenia

Programowanie obiektowe 2 - opis przedmiotu

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Podstawy analizy danych numerycznych w języku Python

Podstawy Programowania 2

KARTA KURSU. Programowanie obiektowe

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

CODE::BLOCKS & VALGRIND OPRACOWAŁ MICHAŁ BETHKE

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do języka Java

Struktury Danych i Złożoność Obliczeniowa

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Przegląd języka Python. Łukasz Anwajler

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Programowanie obiektowe zastosowanie języka Java SE

JavaScript - korzenie

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

Podstawy Programowania Obiektowego

Podstawy i języki programowania

programowanie w oparciu o platformę netbeans w praktyce

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

KARTA KURSU. Wstęp do programowania

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Szablony funkcji i klas (templates)

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Transkrypt:

PyPy's Approach to Virtual Machine Construction Armin Rigo, Samuele Pedroni Prezentacja: Michał Bendowski

Czym jest PyPy? Implementacja Pythona w Pythonie - wydajniejsza niż oryginalna implementacja w C Narzędzie pozwalające na pisanie wydajnych interpreterów w Pythonie - przeznaczonych zarówno dla x86 jak i JVM/CLR Udany projekt naukowy, prowadzony przez informatyków z wielu uniwersytetów

http://speed.pypy.org Smaller is better

Z lotu ptaka Interpreter Pythona napisany w (R)Python Zestaw narzędzi tłumaczących dla języka RPython

RPython RPython = Restricted Python Podzbiór Pythona - każdy program w RPython można wykonać dowolnym interpreterem Pythona Kompromis między siłą wyrazu a potrzebą wydajności

RPython Wyjątki Pojedyncze dziedziczenie + domieszki (ang. mix-ins) Dynamiczne wyszukiwanie metod (ang. dispatch) Funkcje i klasy jako wartości pierwszej kategorii Standardowe struktury danych Pythona Brak refleksji w czasie wykonania (ale jest funkcja isinstance) Wiązania wewnątrz klas i globalnych przestrzeni nazw są stałe

RPython Programy w RPython są tłumaczone na kod w C lub bajtkod JVM, CLI/.NET Głównym zastosowaniem tego języka i towarzyszących mu narzędzi jest napisany w nim interpreter Pythona W ramach projektu PyPy powstały już implementacje Smalltalka, Scheme'a, JavaScriptu i innych języków

Kompilacja RPython Front-end produkuje grafy przepływu sterowania Do grafów dodawane są informaje o typach Seria transformacji operuje na grafach, czyniąc je coraz bardziej niskopoziomowymi Na koniec back-end generuje kod docelowy

Front-end Tekst programu trafia do interpretera Pythona (jak CPython lub pypy), który parsuje wejście i tworzy "function objects" - efektywną reprezentację zawierającą bajtkod Pythona (ten sam co w plikach *.pyc) Grafy przepływu sterowania budowane są przez wykonanie bajtkodu na specjalnych, "symulowanych" obiektach i zmuszenie interpretera, żeby zawsze wykonywał obie gałęzie instrukcji warunkowej Ten sam interpreter bajtkodu jest używany w "prawdziwym" interpreterze pypy

Pierwszym krokiem jest dopisanie informacji o typach. Na tym etapie system typów jest dość bogaty i zbliżony do kompletnego systemu typów Pythona Z czasem system typów będzie się zmieniał na bardziej restrtykcyjny, a grafy będą odpowiednio modyfikowane, żeby być z nim zgodne

Transformacje

Pierwszą transformacją jest przejście na system typów docelowej platformy LLTyper - w przypadku C, obiektowość tłumaczymy na operacje na strukturach, z jawnym wskaźnikiem do tablicy metod wirtualnych OOTyper - w przypadku JVM obiektowość jest wbudowana w platformę, ale: oba powyższe współdzielą kod obsługujący semantykę Pythona i konwencje wołania metod i funkcji

Przykład transformacji - dodanie GC Można do tego podejść na kilka sposobów i wszystkie zostały zaimplementowane jako transformacje Zaczniemy od najprostszych W przypadku JVM/CLI ta transformacja oczywiście w ogóle nie jest potrzebna

Boehm GC Możemy użyć gotowego Garbage Collector dla C i C++, takiego jak Boehm GC. Wydajność będzie raczej słaba, ale ilość naszej pracy znikoma

Reference counting Do grafów sterowania dopisujemy instrukcje zliczające referencje. Musimy też nieco zmodyfikować struktury danych. To podejście nie jest bardzo wydajne, ale jest używane przez CPython i tam się sprawdza

Własny Garbage Collector Musimy zastąpić wywołania malloc odpowiednim mechanizmem z naszego GC Sam GC jest napisany w RPython Daje nam najwięcej okazji do optymalizacji pod kątem naszego zastosowania Obecnie stosowany w pypy

Coraz niżej Kolejne transformacje implementują operacje, które były uznawane za wbudowane na wyższych poziomach Na przykład: lst.append(item) jest tłumaczone na ll_append(lst, item). Ta druga funkcja (napisana w RPython) operuje na obiektach symulujących tablice i wskaźniki, dzięki czemu może być wprost przetłumaczona na C

JIT compiler Jedną z najciekawszych transformacji jest możliwość dodania funkcji tracing JIT compiler do kompilowanego interpretera Programista musi jedynie wskazać, które zmienne należą do interpretera, a które do interpretowanego programu JIT obsługuje różne backendy, więc może być użyty również na CLR (wtedy emituje bajtkod CLR dla kluczowych śladów programu napisanego w Pythonie)

py.py Jako że cały kod jest napisany w (R)Pythonie, wszystkie komponenty systemu (interpreter Pythona, GC, biblioteka standardowa, kompilator RPythona, generator JIT) mogą być testowane i debugowane z użyciem istniejącej implementacji (CPython) Mogą być też rozwijane przez osoby najbardziej zainteresowane, czyli użytkowników języka Python

Dziękuję za uwagę