Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałMarian Wysocki Został zmieniony 9 lat temu
2
Plan prezentacji PJWSTK 2010 2 Motywacje powstania Cele projektu Podstawowe założenia Niezgodność impedancji Integracja składniowa Architektura rozwiązania Plany rozwoju projektu Podsumowanie
3
Motywacje powstania PJWSTK 2010 3 Większa moc języka Java Lepsza pielęgnacyjność kodu Synergia Java + język zapytań Nowe cechy SBQL „Marketing” podejścia stosowego Odpowiedź na LINQ Podstawa mocnego API do baz danych Chęć obrony mgr ;-)
4
Cele projektu PJWSTK 2010 4 Zapytania na obiektach Java Zachowanie cech SBQL Integracja składniowa Mocna kontrola typów w czasie kompilacji Kompatybilność wsteczna Możliwość wywołania metod i konstruktorów z zapytań Wydajność – tłumaczenie zapytań na kod Javy
5
Podstawowe problemy PJWSTK 2010 5 Niezgodność impedancji Składnia - różne style i budowa programów Rozwiązanie – dopasowanie składni operatorów mających odpowiedniki w języku programowania (np. ==, !=, !, &&, ||, new, instanceof) Nowe operatory (np. where, join, order by) – wartość dodana języka Systemy typów Jednolity model danych SBA – wyższy poziom abstrakcji
6
Niezgodność impedancji cd. PJWSTK 2010 6 Semantyka i paradygmaty programów – deklaratywność kontra imperatywność Zapytania jako specjalne wyrażenia (wywołanie funkcji) Generowanie funkcji realizującej zapytanie Poziomy abstrakcji – wysoki języka zapytań, niski języka programowania Integracja dwukierunkowa Generyczność operatorów – wykorzystanie standardowych interfejsów (operatory ==, porównania zakresowego, order by) Możliwość użycia metod, funkcji i konstruktorów Java
7
Niezgodność impedancji cd. 2 PJWSTK 2010 7 Przetwarzanie kolekcji Specjalne traktowanie obiektów kolekcji w języku zapytań Mapowanie java.util.Collection bag, java.util.List sequence Kolekcje generyczne w języku zapytań, np. bag Konieczne określenie typu elementow kolekcji
8
Zasada korespondencji PJWSTK 2010 8 Język zapytań – ok. 35 operatorów Java – ok. 240 nie-terminali Bezpośrednie włączenie zapytań oznacza potencjalnie ponad 8400 punktów styku Oznacza to : Trudności w rozwoju języka zapytań Konflikty dla operatorów o tej samej składni i różnej semantyce Ogólne zagmatwanie ostatecznego „tworu”
9
Integracja składniowa PJWSTK 2010 9 Rozwiązanie problemu korespondencji – rozdzielenie składni na rozłączne konteksty Integer[] n = new Integer[] {4, 2, 6, 20, 4, 23, 1, 5, 7}; List result = #{ n as i where i > 7 }; System.out.println(result); Całe zapytanie jako nowy element składniowy Minimalna ilość nowych połączeń Zapytanie jako wywołanie funkcji
10
Architektura rozwiązania PJWSTK 2010 10 Dodatkowa faza preprocesingu Kod źródłowy zapytań *.s4j Wygenerowany kod Java *.s4j *.java Skompilowany kod *.s4j *. class preprocesing kompilacja uruchomienie
11
Faza preprocesingu PJWSTK 2010 11 Zadania: Parsowanie i analiza zapytań Analiza użytych bytów Java (min. zmienne, klasy, metody) Analiza kodu Javy Translacja zapytań na kod Javy Środki: Integracja z kompilatorem Java (OpenJDK) Typechecker i sygnatury zapytań Generator kodu Java
12
Faza preprocesingu cd. PJWSTK 2010 12 Wygenerowany kod źródłowy *.java Kod źródłowy i biblioteki *.s4j*.java *.jar*.class Preprocesor SBQL4J Java Parser SBQL4J Parser Java Analyser SBQL4J Analyser Code generator
13
Sygnatury zapytań PJWSTK 2010 13 Są tworzone w trakcie analizy Zawierają informacje o wyniku zapytania lub podzapytania Liczność wyniku ([0..1] lub [0..*] dla kolekcji) Typ kolekcji wynikowej (bag, sequence) Nazwa typu Inne właściwości charakterystyczne dla danego typu sygnatury Podobnie jak obiekty w runtime, zawierają metodę nested
14
Przegląd sygnatur PJWSTK 2010 14 ValueSignature BinderSignature ClassSignature MethodSignature ConstructorSignature StructSignature PackageSignature
15
Kontrola błędów PJWSTK 2010 15 Zgłoszenia za pomocą standardowego mechanizmu kompilatora Javy W przypadku błędu zgłoszenie, wstawienie domyślnej sygnatury dla danego operatora i kontynuacja Każdy operator wymaga określonej sygnatury o odpowiednich atrybutach (np. typ wyniku, liczność) Sprawdzane są błędy zarówno w zapytaniach, jak i w kodzie Java
16
Translacja zapytań na kod Java PJWSTK 2010 16 Dostępne 4 tryby translacji: Wywołanie interpretera Generacja kodu tożsamego z interpreterem Zoptymalizowany kod interpretera bez stosu QRES Natywne operacje Java bez stosów QRES i ENVS Balansowanie między elastycznością i wydajnością
17
Tryb interpretera PJWSTK 2010 17 Klasa implementująca wzorzec Visitor Tekst zapytania parsowany w runtime programu Przekazanie parametrów z kontekstu Java na spód stosu ENVS Obiekty Java otoczone wrapperami w trakcie wykonania Niska wydajność, duża elastyczność – możliwe dynamiczne tworzenie zapytań
18
Generowany kod interpretera PJWSTK 2010 18 Zapytanie jako metoda wygenerowanej klasy Kod zapytania tożsamy z ścieżką wywołania interpretera Stosy QRES i ENVS używane w trakcie wykonania Tylko zapytania zdefiniowane przed kompilacją Brak parsowania tekstu zapytania i generowania drzewa AST podczas uruchomienia Wyższa wydajność – mniejsza elastyczność
19
Generowany kod interpretera bez stosu QRES PJWSTK 2010 19 Wyniki podzapytań jako nowe zmienne w kodzie Generowanie unikalnych nazw podzapytań Minimalna ilość koercji w trakcie wykonania
20
Generowany kod bez stosów QRES i ENVS PJWSTK 2010 20 Maksymalne wykorzystanie możliwości maszyny wirtualnej Java Zamiana nazw użytych w zapytaniu na nazwy z modelu danych Konieczna dodatkowa analiza wiązania nazw i użycia funkcji nested Największa wydajność i czytelność wygenerowanego kodu
21
Nowy operator order by PJWSTK 2010 21 Funkcja sortująca zdefiniowana zgodnie ze standardami Javy: W obiekcie sortowanym – interfejs java.lang.Comparable W obiekcie implementującym java.util.Comparator List products = getProductList(); Comparator plCollator =...; //porównywanie polskich liter List orderedProducts = #{ products order by unitsInStock desc; productName asc using plCollator };
22
Generyczne kolekcje PJWSTK 2010 22 Rozdzielenie interfejsu (bag, sequence) od implementacji Specjalizacja kolekcji bez zmian w semantyce języka List products = getProductList(); Collection orderedProducts = #{ bag (products.productName) };
23
Plany rozwoju projektu PJWSTK 2010 23 Uniwersalne API do baz danych i innych źródeł danych Wariant translacji zapytań SBQL4J na natywne zapytania / operacje uzyskania danych Wariant podzapytań niezależnych składniowo „Smart parsing” Podział na konteksty wewnątrz zapytania Możliwość rozszerzenia semantyki języka przez dodanie biblioteki Większe możliwość integracji DBLink warehouseDBLink =...; List result = #{ warehouseDBLink.((cusomers rollby segment).name) }; System.out.println(result);
24
Plany rozwoju projektu cd. PJWSTK 2010 24 Optymalizacja zapytań przez przepisywanie Zintegrowane środowisko programistyczne (IDE) dla SBQL4J Zapytania ad-hoc i kontrola typologiczna w czasie wykonania
25
Podsumowanie PJWSTK 2010 25 Mocny język zapytań oparty na SBQL, zintegrowany z Javą Przełamanie niezgodności impedancji Niskie ryzyko użycia w istniejących projektach Szerokie możliwości rozwoju
26
Dziękuję za uwagę PJWSTK 2010 26
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.