Title: Jezyki i srodowiska programowania system
1Jezyki i srodowiska programowania systemów
rozproszonych
Wyklad 5 Stos srodowisk, rezultaty
zapytan, funkcja nested
Wykladowca Tomasz Kowalski Wyklady przygotowane
na podstawie materialów prof. Kazimierza Subiety
2Stos srodowisk
environment stack
- Pojecie stosu srodowisk pojawilo sie w
informatyce w latach 60-tych. - Od tego czasu stos ten jest elementem konstrukcji
wiekszosci znanych jezyków, wlaczajac Pascal,
C/C, Smalltalk, Java, itd. - Idea jest prosta i oczywista, ale nie jest czesto
dostatecznie dobrze objasniona w podrecznikach. - Przy konstrukcji semantyki jezyków zapytan musimy
wrócic do stosu srodowisk. - Zasady zarzadzania srodowiskami programu maja
wplyw na technike i niezawodnosc programowania.
Sa one nastepujace - Srodowisko lokalne danego bytu programistycznego
ma priorytet w stosunku do srodowiska bardziej
globalnego. - Zasada lokalnego kontekst.
- Zasada dowolnego zagniezdzania wolan procedur.
3Ilustracja dzialania stosu srodowisk
Procedura p1 wywoluje procedure p2, która
wywoluje procedure p3
Wywolanie p3
Sekcja lokalnych danych i parametrów procedury
p3 Sekcja lokalnych danych i parametrów procedury
p2 Sekcja lokalnych danych i parametrów procedury
p1 ... Sekcja danych globalnych
Wywolanie p2
Wyjscie z p3
Sekcja lokalnych danych i parametrów procedury
p2 Sekcja lokalnych danych i parametrów procedury
p1 ... Sekcja danych globalnych
Sekcja lokalnych danych i parametrów procedury
p2 Sekcja lokalnych danych i parametrów procedury
p1 ... Sekcja danych globalnych
Wywolanie p1
Wyjscie z p2
Sekcja lokalnych danych i parametrów procedury
p1 ... Sekcja danych globalnych
Sekcja lokalnych danych i parametrów procedury
p1 ... Sekcja danych globalnych
Wyjscie z p1
... Sekcja danych globalnych
... Sekcja danych globalnych
czas
4Wiazanie
binding
- Wiazanie jest to zastepowanie nazw wystepujacych
w tekscie programu na byty programistyczne czasu
wykonania, np. na adresy RAM, identyfikatory
obiektów, adresy startowe procedur, itd. - Przykladowo, wiazanie nazwy zmiennej x oznacza
zastapienie tej nazwy przez adres RAM, gdzie
przechowywana jest wartosc zmiennej x. - Wiazanie moze byc wczesne lub statyczne (early
binding, static binding), czyli odbywa sie w
czasie kompilacji, albo pózne lub dynamiczne
(late binding, dynamic binding), czyli odbywa sie
w czasie wykonania.
5Przykladowa sytuacja na stosie srodowisk
Wykonywany jest blok l w procedurze p2 wywolanej
z p1.
Kolejnosc poszukiwania wiazania dla zmiennej g
procedure p1( x, y ) deklaracje zmiennych a,
b ... call p2( 55, 83 ) ...
procedure p2( z, t ) deklaracje zmiennych
c,d ... ( blok l )
deklaracje zmiennych e, f g 75
... ...
Wierzcholek stosu
Zmienne e, f zadeklarowane wewnatrz bloku
l Zmienne c, d i parametry z(55), t(83)
procedury p2 Zmienne a, b i parametry x, y
procedury p1 ......... Zmienne i inne byty
globalne
Dól stosu
6Po co jest mechanizm stosu srodowiskowego?
- Abstrakcja i hermetyzacja.
- Izolacja.
- Semantyczna niezaleznosc i ponowne uzycie.
- Wywolywanie procedur z innych procedur.
- Spójne zarzadzanie nazwami uzytymi w programie.
- Realizacja metod transmisji parametrów.
- Kontrola typologiczna (analiza statyczna).
- Podane motywacje maja znaczenie dla jezyków
zapytan, pozwalajac zrealizowac takie ich
zalozenia jak mozliwosc dowolnego zagniezdzania
zapytan, mozliwosc powolywania lokalnych nazw
wewnatrz zapytan, mozliwosc uzywania nazw z bazy
danych lacznie z nazwami zmiennych
programistycznych, nazwami procedur, funkcji i
metod.
7Stos srodowisk w SBA
- Stos srodowisk dostosujemy do wymagan semantyki
jezyków zapytan oraz konstrukcji pochodnych,
takich jak perspektywy, procedury bazy danych,
itd. Stos bedzie spelniac nastepujace zalozenia - Bedzie zgodny z modelami skladu AS0 - AS3.
- Bedzie w jednorodny sposób traktowal dane
indywidualne i kolekcje. - Maksymalny rozmiar stosu nie bedzie
implementacyjnie ograniczony. - Stos bedzie skladal sie z sekcji, gdzie kazda
sekcja bedzie przechowywac informacje o pewnym
srodowisku czasu wykonania, np. srodowisku
wywolania pewnej funkcji, procedury lub metody,
srodowisku wnetrza pewnego obiektu, srodowisku
wnetrza pewnej klasy, srodowisku obiektów bazy
danych, itd. Rozmiar sekcji nie bedzie
ograniczony. - Na dole stosu umieszczone beda sekcje globalne,
do których naleza globalne zmienne aplikacji,
baza danych, wspólne biblioteki procedur i
funkcji, oraz zmienne srodowiskowe systemu
komputerowego.
8Binder
binder
- Podstawowa struktura przechowywana na stosie
srodowisk jest binder. - Binder jest para ltn, xgt, gdzie n jest zewnetrzna
nazwa (nazwa zmiennej, stalej, obiektu, funkcji,
perspektywy, procedury, metody, itd.), zas x jest
bytem czasu wykonania (zwykle referencja do
obiektu). - Pare ltn, xgt bedziemy zapisywac n( x ).
- Definicje te uogólnimy.
- Koncepcja bindera jest bardzo prosta. Zadaniem
bindera n(x) jest wiazanie, czyli zastapienie
nazwy n wystepujacej w zapytaniu lub programie na
wartosc x, bedaca bytem czasu wykonania. - Dla dowolnej nazwy wystepujacej w programie musi
byc na stosie odpowiedni binder, który zamieni te
nazwe na byt czasu wykonania. - Nazwa, dla której odpowiadajacy jej binder nie
istnieje, nie moze byc zwiazana, czyli jest
bledna. - Przy luznych modelach skladu (tzw.
pólstrukturalnych, semistructured) mozemy uznac,
ze wiazanie takiej nazwy jest puste (jest pustym
zbiorem).
9Rola binderów
- Uogólnienie Binder jest para n(x), gdzie n moze
byc dowolna zewnetrzna nazwa definiowana przez
programiste, uzytkownika, projektanta aplikacji,
projektanta bazy danych, itp., zas x moze byc
dowolnym rezultatem zwracanym przez zapytanie. - W podejsciu stosowym do jezyków zapytan stos
srodowisk sklada sie z sekcji odpowiadajacych
poszczególnym srodowiskom czasu wykonania. - Sekcja jest zbiorem binderów do bytów
programistycznych odpowiadajacego jej srodowiska. - W budowanej przez nas semantyce bindery beda
mialy takze inne zastosowania, w szczególnosci,
beda niekiedy zwracane jako rezultaty zapytan. - Stos srodowiskowy bedziemy oznaczac ENVS
(ENVironment Stack).
10Przykladowy sklad
11Przykladowy ENVS
Sekcja chwilowa przetwarzania Sekcja chwilowa
przetwarzania - wlasnosci lokalne wywolanej
metody Sekcja chwilowa przetwarzania - wlasnosci
wnetrza aktualnie przetwarzanego obiektu
Prac Sekcje danych globalnych
Sekcja bazy danych
12Pojecie stanu
- Pojedyncza referencja jest szczególnym
przypadkiem rezultatu zapytania. - W ten sposób, poprzez definicje skladu obiektów i
stosu ENVS uzyskalismy precyzyjna definicje
pojecia stanu. - W podejsciu stosowym pojecie stanu (dziedzina
Stan) jest definiowane jako stan skladu obiektów
plus stan stosu srodowisk. - Brak pojecia stanu jest bardzo powazna wada wielu
koncepcji i modeli obiektowych, w szczególnosci
standardów SQL-99, XQuery i ODMG. - Zgodnie z wczesniejszymi definicjami, semantyka
zapytania jest funkcja odwzorowujaca stan, czyli
sklad obiektów oraz stan ENVS, w rezultat. - Odwzorowaniem, które bedzie podstawa dalszych
definicji, jest semantyka pojedynczej nazwy
wystepujacej w zapytaniu lub w programie. - Czynnosc ewaluacji takiej nazwy nosi nazwe
wiazania. - Wiazanie odbywa sie na ENVS zgodnie z regula
stosu, które nakazuje przeszukiwanie stosu od
jego wierzcholka w kierunku jego podstawy, z
pominieciem niektórych sekcji.
13Reguly wiazania nazw
- Zasady przeszukiwania stosu i wyznaczania
rezultatu wiazania sa nastepujace - Dla wiazanej nazwy n, ENVS jest przeszukiwany az
do znalezienia sekcji, w której znajduje sie
binder oznaczony nazwa n. Po znalezieniu takiej
sekcji wyszukiwanie jest zakonczone. - Wszystkie bindery z tej sekcji oznaczone nazwa n
tworza rezultat przeszukiwania. - Rezultat wiazania uzyskuje sie poprzez odrzucenie
ze znalezionych binderów nazwy n i pozostawienie
wylacznie wartosci tych binderów.
14Mechanizm przeszukiwania stosu - funkcja bind
start przeszukiwania stosu
Prac(i1) X(i127) Y(i128) N(5)
I("Anna") ......... Nazwisko(i10) Zarobek(i11)
Adres(i12) PracujeW(i16) ......... Prac(i1)
Prac(i5) Prac(i9) Dzial(i17)
Dzial(i22) .........
- bind( nazwa ) - funkcja wiazania nazw
- bind( Prac ) i1
- bind( Y ) i128
- bind( I ) "Anna"
- bind( Zarobek ) i11
- bind( Dzial ) i17, i22
Binder Prac(i1) znajduje sie w dwóch sekcjach
stosu, ale w tym przypadku wiazanie nazwy Prac
zwróci i1, a nie i1, i5, i9 .
15Rezultaty zwracane przez zapytania
- Oprócz referencji i wartosci atomowych zapytania
moga zwrócic bindery. - Uogólnienie podanych zalozen prowadzi do
nastepujacej rekurencyjnej definicji dziedziny
Rezultat - Atomowa wartosc nalezaca do V (np. 3, "Kowalski",
TRUE, itd.) nalezy do dziedziny Rezultat. - Referencja do obiektu (inaczej identyfikator
obiektu) dowolnego typu nalezaca do I nalezy do
dziedziny Rezultat. W szczególnosci, do dziedziny
Rezultat naleza referencje do metod, procedur,
funkcji, perspektyw, itd. - Jezeli x ? Rezultat, zas n ? N jest dowolna
nazwa, wówczas para n(x) nalezy do dziedziny
Rezultat. Taki rezultat bedziemy nazywac nazwana
wartoscia w innym kontekscie zostal on juz
okreslony jako binder. - Jezeli x1, x2, x3, ... sa atomowymi wartosciami,
referencjami lub nazwanymi wartosciamy, wówczas
struct x1, x2, x3, ... ? Rezultat. Kolejnosc
elementów w strukturze ma znaczenie. - Jezeli x1, x2, x3, ... sa wyzej wymienionymi
rezultatami, wówczas bag x1, x2, x3, ... ?
Rezultat oraz sequence x1, x2, x3, ... ?
Rezultat.
16Przyklady zbioru Rezultat
- Atomowe
- 25, "Kowalski", i11, i18
- Zlozone
- structi1, i56
- sequence i1, i6, i11
- bag structi1, i56, structi6, i72,
structi11, i72 - bagstructn("Kowalski"), Zarobek(2500), d(i56)
- bagstruct Dzial(i56), Prac( bag struct
n("Nowak"), s(i9 ) ,
struct n("Stec" ), s(i14) ) - Przy pomocy podanych konstruktorów mozna tworzyc
struktury przypominajace obiekty. Nie sa one
jednak obiektami, poniewaz nie mozna im przypisac
wlasnych identyfikatorów i nie mozna ich zwiazac
z istniejaca lub nowa klasa. Uzywajac
terminologii ODMG, rezultaty zapytan sa
literalami. Takiej terminologii nie bedziemy
stosowac.
17Rezultaty zapytan zapisane jako tablice
18Otwieranie nowego zakresu na stosie srodowisk
- W klasycznych jezykach programowania otwieranie
nowego zakresu na wierzcholku ENVS nastepuje w
momencie wywolania procedury (funkcji, metody)
lub w momencie wejscia sterowania w nowy blok.
Skasowanie tej sekcji nastepuje w momencie
zakonczenia dzialania procedury (funkcji, metody)
lub w momencie wyjscia sterowania z bloku. - Do klasycznych sytuacji otwierania nowego zakresu
na ENVS dolaczymy nowa. Stanowi ona istote
podejscia stosowego do jezyków zapytan. Pewne
operatory wystepujace w zapytaniach (zwane
niealgebraicznymi) dzialaja na stosie podobnie do
wywolan bloków programów. - Np. w zapytaniu jezyka SBQL
- Prac where (Nazwisko Kowalski and Zarobek gt
1000) - czesc (Nazwisko Kowalski and Zarobek gt
1000) jest blokiem, który jest ewaluowany w
nowym srodowisku okreslonym przez wnetrze
obiektu Prac aktualnie testowanego przez operator
where. - Na stos ENVS jest wkladana nowa sekcja
zawierajaca bindery do wszystkich wewnetrznych
wlasnosci (atrybutów, metod, itd.) tego obiektu
Prac.
19Ilustracja otwierania nowego zakresu
Operator where iteruje po rezultacie zapytania
PRAC. W kazdej iteracji wklada (i po ewaluacji
zdejmuje) sekcje stosu zawierajaca bindery do
wnetrza kolejnego obiektu PRAC.
PRAC where
(Nazwisko Kowalski and Zarobek gt 1000)
wiazanie
wiazanie
wiazanie
PRAC (i1) PRAC (i5) PRAC(i9) DZIAL (i17)
DZIAL (i22)
Stos w momencie ewaluacji zapytania
PRAC. Ewaluacja (wiazanie) nazwy PRAC zwraca
i1, i5, i9
Stos w momencie ewaluacji pod-zapytania (Nazwisko
Kowalski and Zarobek gt 1000) dla trzeciego
obiektu PRAC. Ewaluacja (wiazanie) nazwy Nazwisko
zwraca i10. Ewaluacja (wiazanie) nazwy Zarobek
zwraca i11.
20Funkcja nested
- Intencja jest zdefiniowanie funkcji, której
argumentem jest referencja do obiektu, zas
wynikiem jest wewnetrzne srodowisko tego obiektu,
które ma byc umieszczone na ENVS. - Takie srodowisko jest zbiorem binderów.
- Funkcje nazwalismy nested.
nested(i9) Nazwisko (i10 ), Zarobek (i11 ),
Adres (i12 ), PracujeW (i16 )
21Uogólnienie funkcji nested
- Dla dowolnej wartosci atomowej v ? V ? nested( v
) ? (zbiór pusty). - Dla identyfikatora i obiektu atomowego (nie
posiadajacego podobiektów) ? nested( i ) ?. - Dla obiektu zlozonego lti, n, lti1, n1, ...gt, lti2,
n2, ...gt, ... , ltik, nk, ...gt gt ? nested( i )
n1(i1), n2(i2), ... , nk(ik) . - Dla identyfikatora i obiektu pointerowego lti, n,
i1gt dla którego istnieje w skladzie obiekt lt i1,
n1, ...gt ? nested( i ) n1(i1) . - Dla dowolnego bindera n(x) ? nested( n(x) )
n(x) . - Jezeli argumentem funkcji nested jest struktura
elementów, wówczas wynik jest suma
teorio-mnogosciowa rezultatów funkcji nested dla
pojedynczych elementów tej struktury ? - nested( struct x1, x2, x3, ...) nested( x1 )
? nested( x2 ) ? nested( x3 ) ? ...