ŻYWE JĘZYKI PROGRAMOWANIA LIVING IT UP WITH A LIVE PROGRAMMING LANGUAGE Sean McDirmid Ecole Polytechnique Fédérale de Lausanne (EPFL) 5/24/2010MARCIN HAGMAJER 1
AGENDA GenezaSuperGlueDodatkowe technikiSzczegóły realizacji i implementacjaPrzykład - PacMan 5/24/2010MARCIN HAGMAJER 2
DYNAMICZNE JĘZYKI PROGRAMOWANIA 5/24/2010MARCIN HAGMAJER 3 edycja kompi- lacja debu- gowa- nie Programowanie wysokopoziomowe Dynamiczne typowanie Spadek wydajności Lisp Smalltalk Erling
PROGRAMOWANIE NA ŻYWO Natychmiastowe efekty zmian w kodzie Konstrukcje deklaratywne - mniej kodu Dopełnianie kodu i podpowiedzi Często oparte o metody wizualne 5/24/2010MARCIN HAGMAJER 4
JĘZYKI WIZUALNE Dla zwykłych użytkownikówKomponenty – model deklaratywnyProblemy z graficzną reprezentacją większych programówPołączenie cech wizualnych z tekstowymiExcel, Forms/3, Fabrik, LabVIEWApple Quartz Composer: graf połączeń dźwiękowych 5/24/2010MARCIN HAGMAJER 5
SUPERGLUE Tekstowy, żywy język programowania 5/24/2010MARCIN HAGMAJER 6
SUPERGLUE 5/24/2010MARCIN HAGMAJER 7 Sygnały i komponenty Dynamiczne dziedzi- czenie Graf przepływu danych + OOP Dane zmienne w czasie Sygnały dynamicznie dziedziczą po klasach
PRZYKŁAD POCZĄTKOWY 5/24/2010MARCIN HAGMAJER 8
SYGNAŁY Wartości w grafie przepływu danych, które ułatwiają komunikację pomiędzy komponentami. Są to obiekty dziedziczące po klasach, połączone z innymi sygnałami i zawierające sygnały zdefiniowane w ich nadrzędnych klasach. Definiuje się je jako elementy klasy używając słowa kluczowego port 5/24/2010MARCIN HAGMAJER 9
KLASY Definiują zachowanie Nie są wartościami i mogą być rozszerzone jedynie przez sygnały Definiowane w najwyższej warstwie programu lub jako elementy inncyh klasy z wykorzystaniem słowa kluczowego class 5/24/2010MARCIN HAGMAJER 10
POŁĄCZENIA Definiują zależność pomiędzy sygnałami, dzięki czemu ich wartość jest jednakowa Są regułami podobnymi do prostych, jednokierunkowych ograniczeń. Określany przy użyciu operatora = 5/24/2010MARCIN HAGMAJER 11
ROZSZERZENIA (EXTENSIONS) Sprawiają, że sygnały rozszerzają klasy Reguły wycelowane w sygnały poza ich definicją Definiowane z wykorzystaniem operatora / : 5/24/2010MARCIN HAGMAJER 12
WARUNKI (CONDITIONS) Określają kiedy reguły połączeń i rozszerzeń mogą być zastosowane. Odpytują istniejące połączenia i rozszerzenia za pomocą tych samych operatorów (= i ), których używa się do ich stworzenia Tworzeone przez konstrukcje if otaczające reguły połączeń i rozszerzeń 5/24/2010MARCIN HAGMAJER 13
CEL: UPROSZCZONY PACMAN Gracz steruje PacManem za pomocą strzałek na klawiaturze Komputer kontroluje duchy Po dotknięciu ducha, PacMan w prawy górny róg Kulka mocy na środku ektranu. 5/24/2010MARCIN HAGMAJER 14
RYSUNEK (1/4) 5/24/2010MARCIN HAGMAJER 15
RYSUNEK (2/4) 5/24/2010MARCIN HAGMAJER 16
RYSUNEK (3/4) 5/24/2010MARCIN HAGMAJER 17
RYSUNEK (4/4) 5/24/2010MARCIN HAGMAJER 18
RYSUNEK - ANIMACJA 5/24/2010MARCIN HAGMAJER 19
DODATKOWE TECHNIKI 5/24/2010MARCIN HAGMAJER 20
STANY STAŁE I ZMIENNE TRAKTOWANE JEDNAKOWO 5/24/2010MARCIN HAGMAJER 21
DYNAMICZNE DZIEDZICZENIE 5/24/2010MARCIN HAGMAJER 22
TYPOWANIE ZALEŻNE 5/24/2010MARCIN HAGMAJER 23
MEDIATORY TYPÓW 5/24/2010MARCIN HAGMAJER 24
WNIOSKOWANIE TYPÓW 5/24/2010MARCIN HAGMAJER 25
WNIOSKOWANIE TYPÓW W IDE 5/24/2010MARCIN HAGMAJER 26
WNIOSKOWANIE TYPÓW W IDE (1/4) 5/24/2010MARCIN HAGMAJER 27
WNIOSKOWANIE TYPÓW W IDE (2/4) 5/24/2010MARCIN HAGMAJER 28
WNIOSKOWANIE TYPÓW W IDE (3/4) 5/24/2010MARCIN HAGMAJER 29
WNIOSKOWANIE TYPÓW W IDE (4/4) 5/24/2010MARCIN HAGMAJER 30
WNIOSKOWANIE TYPÓW W IDE 5/24/2010MARCIN HAGMAJER 31
REALIZACJA JĘZYKA 5/24/2010MARCIN HAGMAJER 32
PRZETWARZANIE KODU 5/24/2010MARCIN HAGMAJER 33 skanowanieparsowanie wnioskowanie typów wykonanie Parsowanie z pierwszeństwem Damage and repair Zmiany w kodzie Zmiany stanu wywołane sygnałem Zmiana grafu przepływu danych
BŁĘDY CZASU WYKONANIA 5/24/2010MARCIN HAGMAJER 34 niejednoznacznie połączone sygnaly niepołączone sygnały prymitywne specyficzne błędy (np. dzielenie przez 0) błędy reportowane jako wartości sygnałów w osobnym oknie program kontynuuje z wartościami domyślnymi
IMPLEMENTACJA 5/24/2010MARCIN HAGMAJER 35
SYGNAŁY 5/24/2010MARCIN HAGMAJER 36
ROZSZERZENIA 5/24/2010MARCIN HAGMAJER 37
PACMAN Dokończenie gry 5/24/2010MARCIN HAGMAJER 38
PACMAN (1/4) 5/24/2010MARCIN HAGMAJER 39
PACMAN (2/4) 5/24/2010MARCIN HAGMAJER 40
PACMAN (3/4) 5/24/2010MARCIN HAGMAJER 41
PACMAN (4/4) 5/24/2010MARCIN HAGMAJER 42
PACMAN 5/24/2010MARCIN HAGMAJER 43
DZIĘKUJĘ 5/24/2010MARCIN HAGMAJER 44