Systematyka meta-programowania systemów.


Original: http://web.cecs.pdx.edu/~sheard/staged.html

W meta- programowania systemu meta- programy programy obiektowo manipulować . Programy meta -obiektu może konstruować programy , połączyć fragmenty programu obiektowo -obiektu do większych programów , obserwować strukturę i inne właściwości obiektu -programów i wykonywania programów obiektowo do uzyskania ich wartości .

Istnieją dwa ważne rodzaj meta- programowania scenariuszy : generatory programów i analiz programu . Każdy z tych scenariuszy ma szereg charakterystycznych cech

Generator
Reprezentacja : typ danych algebraiczne Strings vs vs Quasi- cytat
Automatic vs obsługi adnotacji
Static Generator Generator vs Runtime
Jednorodne vs heterogeniczne
Wpisane vs un – Wpisane
Statycznie wpisane vs Dynamicznie wpisane
Dwustopniowy vs N -stopniowy
analiza
Jednorodne vs heterogeniczne
Higher Order Abstract Syntax vs First Order Syntax
Wpisane vs un – Wpisane

Generatory vs Analiz
Generator programu (meta -program) rozwiązuje konkretnego problemu poprzez budowę innego programu (obiekt -program) , który rozwiązuje ten problem pod ręką . Zazwyczajgenerated (obiekt) program jest ” wyspecjalizowane ” w odniesieniu do danego problemu i zużywa mniej zasobów niż ogólnego celu, nie- generator rozwiązania.

Analiza programu (meta -program) zauważa, strukturę i środowisko obiektu – programu i oblicza jakąś wartość w wyniku. Wyniki mogą być dane -lub sterowania przepływem wykresy, lub nawet inny obiekt – programowe z nieruchomości na podstawie właściwości źródła obiektu programu. Przykłady tego rodzaju meta- systemów są: transformatory programu , optymalizacją i częściowe systemy oceny .
Reprezentacja : typ danych algebraiczne Strings vs vs Quasi- cytat
Meta- programowania system wykorzystuje adnotacje programu ( zwany inscenizacji adnotacji ) odróżnić meta- programu z programu obiektu . Program obiekt powinien byćpierwszej klasy jakości. Trzeba myśleć o tym jak o datastructure , że można manipulować jak każdy inny. Wiele systemów meta -obiektu stanowią programy za pomocą sznurków, wykresy lub algebraicznych struktur danych .

Przy kodowaniu ciąg , że stanowią fragment kodu F ( x , y ), po prostu jako ” F ( x , y ) ” . Podczas konstruowania i łączące fragmenty reprezentowane przez ciągi można zrobić zwięźle dekonstrukcji ich jest dość gadatliwe. Więcej poważnie , nie ma gwarancji, że automatycznie zweryfikować programy thusly zbudowane są składniowo poprawna . Na przykład, ” f ( y ) ” może mieć ciąg statyczny typ , ale to oczywiście nie oznacza, że ​​ten ciąg reprezentuje składniowo właściwy program .

Z tym typem danych kodowania , możemy rozwiązać problemu poprawności składniowej . Typ danych kodowania jest zasadniczo takie samo jak to, co nazywa się abstrakcyjne składni lub drzewa analizy. Kodowanie fragmentu ” f ( x , y) ” w SML może być typ danych : Zastosuj (Variable “f” , Tuple [ Zmienna “x ” , zmienna “y” ] ) przy użyciu typu danych zadeklarowanych w następujący sposób:

exp typ danych = Zmienna sznurka
| Zastosuj z ( * exp exp)
| Krotka lista exp

Korzystanie z typu danych kodowanie ma natychmiastowe korzyści : poprawne pisanie nameta- program zapewnia poprawnej składni dla wszystkich obiektów -programów . Ponieważ SML wspiera wzór pasujący na typy danych , dekonstrukcji programów staje się łatwiejsze niż z reprezentacją ciąg. Jednak konstruowania programów jest teraz bardziej gadatliwy , bo musimy korzystać z uciążliwych konstruktorów jak zmienna , Zastosuj, a Tuple.

Quasi -quote przedstawienie jest próbą ponad pochodzą to ograniczenie. Tutajrzeczywista reprezentacja obiektu kodu nie są widoczne dla użytkownika przy pomocy mechanizmu stawkę . Kod obiektu jest wykonana przez umieszczenie “notowanie” adnotacje wokół normalnych fragmentów kodu.

W dalszej części tego dokumentu będziemy korzystać z quasi- cudzysłowu oznaczenie MetaML meta- programowania systemu . W MetaML quasi- cytat jest tylko jednym z kilku adnotacji postoju . W MetaML adnotacje postoju to nawiasy < > , Ucieczka ~ , winda, i uruchomić . Wyrażenie < e> buduje reprezentację kodu e ; ~ e spawów kod otrzymany przez ocenę e do ciała wokół wypowiedzi nawias i uruchamiania e ocenia e uzyskać kawałek kodu , a następnie ocenia ten fragment kodu . Ważne jest, aby pamiętać, że e ~ jest jedynym prawnym ciągu leksykalnie załączając nawiasach.

Podobnie jak w przypadku reprezentacji typu danych programów , za pomocą adnotacji postoju gwarantuje się poprawności składniowej obiektu przy użyciu programów poprawności rodzaju meta- programów , ale utrzymuje, łatwość budowy obiektów -programów . Z inscenizacji systemu typów (patrz poniżej)Poprawność rodzaj meta- programów może zagwarantować poprawności typu ( jak również poprawności składniowej ) programów obiektowych.
Automatic vs Obsługi
Nazywamy się meta- programowania, system, w którymprogramista stawiającą postoju adnotacji bezpośrednioobsługi systemu inscenizacja . Jeżeli adnotacje postoju miejsce przez automatyczny proces , a następniemeta- programowanie systemu jestautomatyczny system inscenizacja .

Off -line częściowe ocena jestautomatyczne inscenizacja meta- System . Rozważmy prosty częściowej oceny funkcji PE z typu < s -> d -> a> -> (s ->> )

PE przyjmuje reprezentację programu z jednego parametru statycznego i jeden parametr dynamiczny i zwraca odpowiedź. Analizuje ona tego programu oraz automatycznie tworzy z uwagami programu , który po odebraniu statyczny parametr , jak wejściowa tworzy reprezentację funkcji z dynamicznego parametru w odpowiedzi. Na przykład :

PEfn d = > d + (y + 3 ) >

ocenia się

fn s = >d + ~ ( lift (s +3) ) >

Automatyczne systemy meta- programowania zapisać użytkownikowiprzeszkadza umieszczenia adnotacji , aleużytkownik z automatycznym systemem traci kontrolę nad strukturą produkcji.

Twierdzi się, że ręcznie wystawił programy są trudne do napisania , a są o wiele większe niż ich un – inscenizowanych odpowiedniki , które mogą być wprowadzone do systemu PE , oszczędzając w ten sposób użytkownikowisporo pracy. Wraz z pojawieniem się nowoczesnych meta- programowania systemów z cytatem adnotacji quasi- inscenizacja to się okaże , czy ten argument nadal posiada . Nasze doświadczenie jest takie, że programy są adnotacjami ręcznie ( do kilku procent )sam rozmiar jak ich Unstaged odpowiedników.

Statyczny Generatory generatora vs Czas trwania
Generatory programowe są w dwóch smakach: generatory statyczne , które generują kod, który jest następnie ” napisany na dysku” i przetwarzane przez normalnych kompilatorów itp. i run -time generatory kodu , które są programy zapisujące lub budowy innych programów, a następnie natychmiast wykonać programy one generowane . Przykłady generatorów programowych są uruchamiane systemy czasu generowania kodu , takie jak jądra syntetyczne oraz statyczne generatory programowe takie jak Yacc.
Jednorodne vs heterogeniczne
Istnieją dwa rodzaje systemów meta- programowania : jednorodne systemy , gdziemeta- języka ijęzyka celem są takie same , oraz systemów heterogenicznych , gdziemeta- język różni się od obiektu – języku.

Oba rodzaje systemów są przydatne do przedstawiania programów do automatycznej analizy programu i manipulacji . Ale są ważne zalety homogenicznych systemach. Tylko jednolite systemy mogą być wielopoziomowe , w którymobiektowo program może sam byćmeta- program, który manipuluje sekund , obiektowo – programy. Tylko w jednorodnym meta- systemu możejeden typ systemu typu zarównometa- język iprzedmiot – język . Tylko jednorodny meta- systemy mogą wspierać refleksję (gdziemeta- język jest na tyle bogaty , że każda prymitywna na obiektowo programów może być wyrażona jako meta- program). Tylko jednorodny meta- systemy mogą obsługiwać “run” lub ” eval ” działanie w sposób jednolity . To jest to, co sprawia, run -time generowania kodu możliwe. Jednorodne układy mają również istotny pedagogicznych i mienia użyteczności , któreużytkownik musi tylko nauczyć się jednego języka.
Wpisane vs un – Wpisane
Aby zautomatyzować proces meta- programowania i zrobić to mniej podatny na błędy , musi być możliwe , aby statycznie wywnioskować pewne właściwości programów obiekt z meta- programów, które manipulują nimi . Ważnym zaliczki dostarczone przez meta- programowania systemu MetaML jestwystawiona System typu . Wystawił system typów łączy ważne informacje meta- programowania i typu inscenizacji w jednym systemie .

Wystawił System typu precyzyjnie określa się postoju ograniczeń systemu , jak również pisania wymagania każdego etapu. Jedną z zalet systemu etapowej typu jest to, że meta- programów , które manipulują źle wpisane obiektowo programy same są źle wpisane . Zapewnia to bardzo cenna dla autorów meta- programów.

Wystawił systemy typu są szczególnie odpowiednie dla jednorodnych systemów , ponieważ tylkojeden system typu jest konieczne. Takie systemy przechwytywania statycznych kontra dynamiczne rozróżnienie parametru częściowej oceny. Zatemf program, z rodzaju : f ::-> Rd -> < b ->> mówi nam sporo o programie.

Mówi, że f jest funkcją dwóch parametrów. Najpierw jeststatyczna ( teraz znany ) parametr typu “A ” , a drugie jest dynamiczny ( nie wiadomo do drugiego etapu ) parametr “d ” . Ten program daje program obiektu , który jest również( drugi poziom) meta- programu , z jedno ( drugi etap ) statyczny parametr typu “B “, która produkuje ( III etap) programu obiekt typu “c” .

Wpisane meta heterogeniczne systemy są również ważne . Tutajrodzaj meta- programu jakoś zawiera typy języka obiektowego . Pozwala to meta- programy do kodowania tylko typ – spójne ( na poziomie obiektu ) transformacje kodu wynikowego lub wpisz spójne tłumaczenia z jednego języka -obiektu do drugiego . W tym przypadku istnieją trzy typu systemy, które muszą pracować harmonijnie (meta- poziomie systemu rodzaje i dwa systemy poziomu obiektu typu ).
Statycznie wpisane vs Dynamicznie wpisane
Dwustopniowy vs N -stopniowy
Dwustopniowy meta- programowania system pozwala tylko jeden meta -stopniowa , ajeden obiekt -stopniowy . W N -stopniowego systemu meta- programowania dowolny obiekt , program może być takżemeta- program.

CzłowiekaPanele operatorskie

Oprócz tych właściwości eksploatacyjnych ,meta- System powinien również mieć dobry interfejs człowiek- systemu . Nasze doświadczenia z meta- programowania systemów doprowadziła nas do sformułowania następującej wysokim poziomie meta- programowanie interfejsu człowiek- System postulatów :

Budownictwo. To powinno być łatwe do skonstruowania kodu przy użyciu jakiś wzór – kodu obiektowego na bazie szablonów . Szablony powinien ” wyglądać ” języka obiektowego , który reprezentują .
Łączenie. Fragmenty programu powinny być łatwe do łączenia się w większe fragmenty programu , jest to najlepiej osiągnąć poprzez parametryzowane mechanizm sklejania takim jak “ szablon – z- dziury ” .
Wpisanie. W jednorodnym systemem , obiekt posiada kod typu parametrycznego , tzn. nie ma kodu z typu int kod z typu float , itp. poprawność rodzaju meta- programu , powinny zagwarantować typu poprawności obiekt -programów konstruuje .
Higiena. Związane zmienne w szablonach należy obchodzić w jakiś wyrafinowany sposób , który gwarantuje brak konfliktów nazw , i które przestrzega zasad statycznego rozsyłania . Bezpłatne zmienne w szablonach programu powinny odnosić się do wartości zmiennej w miejscu, gdzie statycznej szablon jest zdefiniowany , nie tam, gdzie jest to w końcu zrealizowane .
Uruchom. Object- programy można uruchomić . Wygenerowany kod może być ” testowane ” wewnątrz meta- systemu .
Druk. Object- programy mogą być drukowane . Jest to niezbędne do debugowania meta- programów. Przedmiotu – programy powinny być dość wydrukowany w sposób, w jaki są one zwykle napisane przez programistę . Nie powinny one być reprezentowane przez jakiejś abstrakcyjnej reprezentacji nieznanym dla programisty .
Obserwacja. Object- programy mają strukturę. Powinno być możliwe do analizy obiektowo programy , warto je od siebie , itp.