Metaprogramowanie w językach programowania wysokiego poziomu

master
dc.abstract.enIn my master thesis i would like to present less popular programming paradigm - metaprograming. First part of my thesis is about theoretical aspect of this paradigm. Second part shows some practical problems when we can use metaprogrammina, as well as some classical approaches. After each example the solutions are compared in terms of performance, maintainability of code and simplicity.pl
dc.abstract.plKiedy poruszany jest temat istniejących paradygmatów programowania, zwykle wymieniane są tylko cztery najbardziej podstawowe: programowanie imperatywne, deklaratywne, obiektowe oraz funkcyjne . Są one jednocześnie najbardziej popularne, gdyż już same języki programowania zwykle narzucają jeden z nich, na przykład Erlang wymusza programowanie funkcyjne, a Java programowanie obiektowe. Oprócz wymienionych wcześniej czterech podstawowych paradygmatów istnieje cała gama innych metodologii tworzenia programów komputerowych. Mniej popularnymi paradygmatami są na przykład: programowanie proceduralne, programowanie sterowane zdarzeniami, programowanie współbieżne, czy programowanie aspektowe. Dodatkowo, wiele technologii i języków programowania pozwala na łączenie kilku metodologii i paradygmatów, a części jednego programu są stworzone w oparciu o zupełnie inne podejście do programowania. Wszystko po to, by umożliwić programistom jak najprostsze zaprojektowanie, zaimplementowanie i przetestowanie tworzonego programu komputerowego. Niestety, nie ma poprawnego, bądź najlepszego wyboru metodologii, gdyż natura każdego projektu jest inna i może tylko dawać wskazówki odnośnie najbardziej trafnego paradygmatu. Poza tym, każde podejście sprawdza się lepiej w pewnych przypadkach, a gorzej w innych. Przykładowo, programowanie deklaratywne, które narzuca SQL jest lepszym podejściem do problemu zarządzania bazami danych niż programowanie strukturalne, gdyż wymagałoby to tworzenia zagnieżdżonych pętli i instrukcji warunkowych. Wszystko to składa się na pewną trudność wyboru paradygmatów w odniesieniu do poszczególnych części programów bądź systemów informatycznych. Podejmując tak kluczowe wybory programiści i projektanci muszą się opierać tylko na własnym doświadczeniu i wiedzy. W mojej pracy magisterskiej chciałbym zaprezentować mniej popularne podejście do tworzenia rozwiązań programistycznych o nazwie „metaprogramowanie”. Podstawowym elementem tego paradygmatu jest generowanie kodu wykonywalnego, by usprawnić, uprościć lub wprowadzić na wyższy stopień abstrakcji pewne części programu.Metaprogramowanie nie jest techniką nową, gdyż dynamiczne generowanie kodu jest znane od momentu powstania pierwszych kompilatorów. Obecnie często same kompilatory tworzy się metodą metaprogramowania, generując ich kod na podstawie abstrakcyjnej definicji języka, który mają rozpoznawać i same generować kod maszynowy na ich podstawie. Istnieje jednak znacznie więcej możliwych scenariuszy poza samą kompilacją, w których możliwe jest zastosowanie paradygmatu metaprogramowania. Różne mogą być też sposoby realizacji tej techniki. Pierwsza część mojej pracy będzie miała na celu zgłębienie tematu metaprogramowania, zaczynając od podstawowych definicji, poprzez opis możliwych realizacji, po ogólne scenariusze. Druga część zawiera opis i analizę kilku programów (bądź ich części), na przykładzie których zaprezentowane zostanie użycie metaprogramowania w praktyce. Dodatkowo, przykłady rozwiązań programistycznych opartych o generowanie kodu zostaną porównane z klasycznym podejściem w takich przypadkach, jak rozpoznawanie wzorców, języki dziedzinowe (ang. domain-specific language, DSL) czy utrwalanie logiki. Porównanie podejść do problemów odbędzie się na płaszczyznach wydajności kodu, czytelności czy łatwości testowania. Wyciągnięte na tej podstawie wnioski pozwolą określić w jakich przypadkach stosowanie metaprogramowania może dać realne korzyści w projektach programistycznych.pl
dc.affiliationWydział Matematyki i Informatykipl
dc.contributor.advisorWilczak, Daniel - 132637 pl
dc.contributor.authorWnukowski, Michałpl
dc.contributor.departmentbycodeUJK/WMI2pl
dc.contributor.reviewerKulig, Annapl
dc.contributor.reviewerWilczak, Daniel - 132637 pl
dc.date.accessioned2020-07-24T15:30:01Z
dc.date.available2020-07-24T15:30:01Z
dc.date.submitted2013-09-19pl
dc.fieldofstudyinżynieria oprogramowaniapl
dc.identifier.apddiploma-74167-78895pl
dc.identifier.projectAPD / Opl
dc.identifier.urihttps://ruj.uj.edu.pl/xmlui/handle/item/187009
dc.languagepolpl
dc.subject.enmetaprogramming DSL abstraction paradigm C#pl
dc.subject.plmetaprogramowanie DSL abstrakcja paradygmaty C#pl
dc.titleMetaprogramowanie w językach programowania wysokiego poziomupl
dc.title.alternativeMetaprogramming in high level programming languagespl
dc.typemasterpl
dspace.entity.typePublication
dc.abstract.enpl
In my master thesis i would like to present less popular programming paradigm - metaprograming. First part of my thesis is about theoretical aspect of this paradigm. Second part shows some practical problems when we can use metaprogrammina, as well as some classical approaches. After each example the solutions are compared in terms of performance, maintainability of code and simplicity.
dc.abstract.plpl
Kiedy poruszany jest temat istniejących paradygmatów programowania, zwykle wymieniane są tylko cztery najbardziej podstawowe: programowanie imperatywne, deklaratywne, obiektowe oraz funkcyjne . Są one jednocześnie najbardziej popularne, gdyż już same języki programowania zwykle narzucają jeden z nich, na przykład Erlang wymusza programowanie funkcyjne, a Java programowanie obiektowe. Oprócz wymienionych wcześniej czterech podstawowych paradygmatów istnieje cała gama innych metodologii tworzenia programów komputerowych. Mniej popularnymi paradygmatami są na przykład: programowanie proceduralne, programowanie sterowane zdarzeniami, programowanie współbieżne, czy programowanie aspektowe. Dodatkowo, wiele technologii i języków programowania pozwala na łączenie kilku metodologii i paradygmatów, a części jednego programu są stworzone w oparciu o zupełnie inne podejście do programowania. Wszystko po to, by umożliwić programistom jak najprostsze zaprojektowanie, zaimplementowanie i przetestowanie tworzonego programu komputerowego. Niestety, nie ma poprawnego, bądź najlepszego wyboru metodologii, gdyż natura każdego projektu jest inna i może tylko dawać wskazówki odnośnie najbardziej trafnego paradygmatu. Poza tym, każde podejście sprawdza się lepiej w pewnych przypadkach, a gorzej w innych. Przykładowo, programowanie deklaratywne, które narzuca SQL jest lepszym podejściem do problemu zarządzania bazami danych niż programowanie strukturalne, gdyż wymagałoby to tworzenia zagnieżdżonych pętli i instrukcji warunkowych. Wszystko to składa się na pewną trudność wyboru paradygmatów w odniesieniu do poszczególnych części programów bądź systemów informatycznych. Podejmując tak kluczowe wybory programiści i projektanci muszą się opierać tylko na własnym doświadczeniu i wiedzy. W mojej pracy magisterskiej chciałbym zaprezentować mniej popularne podejście do tworzenia rozwiązań programistycznych o nazwie „metaprogramowanie”. Podstawowym elementem tego paradygmatu jest generowanie kodu wykonywalnego, by usprawnić, uprościć lub wprowadzić na wyższy stopień abstrakcji pewne części programu.Metaprogramowanie nie jest techniką nową, gdyż dynamiczne generowanie kodu jest znane od momentu powstania pierwszych kompilatorów. Obecnie często same kompilatory tworzy się metodą metaprogramowania, generując ich kod na podstawie abstrakcyjnej definicji języka, który mają rozpoznawać i same generować kod maszynowy na ich podstawie. Istnieje jednak znacznie więcej możliwych scenariuszy poza samą kompilacją, w których możliwe jest zastosowanie paradygmatu metaprogramowania. Różne mogą być też sposoby realizacji tej techniki. Pierwsza część mojej pracy będzie miała na celu zgłębienie tematu metaprogramowania, zaczynając od podstawowych definicji, poprzez opis możliwych realizacji, po ogólne scenariusze. Druga część zawiera opis i analizę kilku programów (bądź ich części), na przykładzie których zaprezentowane zostanie użycie metaprogramowania w praktyce. Dodatkowo, przykłady rozwiązań programistycznych opartych o generowanie kodu zostaną porównane z klasycznym podejściem w takich przypadkach, jak rozpoznawanie wzorców, języki dziedzinowe (ang. domain-specific language, DSL) czy utrwalanie logiki. Porównanie podejść do problemów odbędzie się na płaszczyznach wydajności kodu, czytelności czy łatwości testowania. Wyciągnięte na tej podstawie wnioski pozwolą określić w jakich przypadkach stosowanie metaprogramowania może dać realne korzyści w projektach programistycznych.
dc.affiliationpl
Wydział Matematyki i Informatyki
dc.contributor.advisorpl
Wilczak, Daniel - 132637
dc.contributor.authorpl
Wnukowski, Michał
dc.contributor.departmentbycodepl
UJK/WMI2
dc.contributor.reviewerpl
Kulig, Anna
dc.contributor.reviewerpl
Wilczak, Daniel - 132637
dc.date.accessioned
2020-07-24T15:30:01Z
dc.date.available
2020-07-24T15:30:01Z
dc.date.submittedpl
2013-09-19
dc.fieldofstudypl
inżynieria oprogramowania
dc.identifier.apdpl
diploma-74167-78895
dc.identifier.projectpl
APD / O
dc.identifier.uri
https://ruj.uj.edu.pl/xmlui/handle/item/187009
dc.languagepl
pol
dc.subject.enpl
metaprogramming DSL abstraction paradigm C#
dc.subject.plpl
metaprogramowanie DSL abstrakcja paradygmaty C#
dc.titlepl
Metaprogramowanie w językach programowania wysokiego poziomu
dc.title.alternativepl
Metaprogramming in high level programming languages
dc.typepl
master
dspace.entity.type
Publication
Affiliations

* The migration of download and view statistics prior to the date of April 8, 2024 is in progress.

No access

No Thumbnail Available