Tézisfüzet. Metaprogramok alkalmazása er sen típusos objektum-orientált rendszerek kiterjesztésére Zólyomi István

Hasonló dokumentumok
Metaprogramok alkalmazása er sen típusos objektum-orientált rendszerek kiterjesztésére. Zólyomi István

A metaprogramozás elmélete és alkalmazásai

A C++ template metaprogramozás és a funkcionális programozás kapcsolata

Sztöchiometriai egyenletrendszerek minimális számú aktív változót tartalmazó megoldásainak meghatározása a P-gráf módszertan alkalmazásával

Projektmunka és tehetséggondozás az informatikában

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

A Feldspar fordító, illetve Feldspar programok tesztelése

Fragmentációs függvények parametrizációja Tsallis Pareto-alakú eloszlásokkal

Feldspar: Nyelv digitális jelfeldolgozáshoz

GTL Graphical Template Library

Szoftver újrafelhasználás

Mi is volt ez? és hogy is volt ez?

Generatív programok helyessége

Típusbiztos szkriptnyelvek generálása funkcionális beágyazott nyelvekből

Nemlineáris optimalizálási problémák párhuzamos megoldása grafikus processzorok felhasználásával

Ellátási lánc optimalizálás P-gráf módszertan alkalmazásával mennyiségi és min ségi paraméterek gyelembevételével

A szemantikus világháló oktatása

Programozás III. - NGB_IN001_3

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Nyilvántartási Rendszer

Mathcad Június 25. Ott István. S&T UNITIS Magyarország Kft.

Informatika szigorlati témakörök gazdasági informatika egyetemi képzés hallgatói részére

Gyors neutronok detektálási technikái

SOA modell: Ez az interfész definiálja az elérhető adatokat, és megadja, hogy hogyan lehet azokhoz hozzáférni.

Mesterséges Intelligencia Elektronikus Almanach

Fülöp Csaba, Kovács László, Micsik András

Metamodellezés. Simon Balázs BME IIT, 2011.

Regionális forduló november 19.

Szoftver-technológia II. Modulok és OOP. Irodalom

Nagy bonyolultságú rendszerek fejlesztőeszközei

Programrendszerek tanúsítása szoftverminőség mérése

Automatikus tesztgenerálás modell ellenőrző segítségével

Objektumorientált paradigma és a programfejlesztés

SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ

Programozás alapjai Bevezetés

Publications Zoltán Porkoláb

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Komponens alapú programozás Bevezetés

Java I. A Java programozási nyelv

Challenge Accepted:C++ Standard Template Library

Analízis és módszerek a generatív metaprogramozás támogatására nagyméretű C++ projektekben

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Vállalati információs rendszerek I, MIN5B6IN, 5 kredit, K. 4. A meghirdetés ideje (mintatanterv szerint vagy keresztfélében):

Regionális forduló november 19.

Módszer köztes tárolókat nem tartalmazó szakaszos működésű rendszerek ütemezésére

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

A szoftverfejlesztés eszközei

Széchenyi István Szakképző Iskola

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Modellező eszközök, kódgenerálás

A Java EE 5 plattform

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Kétdimenziós mesterséges festési eljárások. Hatások és alkalmazások

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

ELTE Informatikai Kooperációs Kutatási és Oktatási Központ. Az ELTE-Soft KMOP / jelű pályázat zárórendezvénye

Mérnök informatikus alapképzési szak

Funkcionális Nyelvek 2 (MSc)

Szoftver-technológia I.

Az egyetemi publikációs adatbázis

IT ügyfélszolgálat és incidenskezelés fejlesztése az MNB-nél

Informatikai alkalmazásfejlesztő Információrendszer-elemző és - tervező

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

ARM Cortex magú mikrovezérlők. mbed

UML (Unified Modelling Language)

A szoftverfejlesztés eszközei

Jó és rossz gyakorlatok környezetvédelmi szemszögből

Szakmai program 2015

Oracle GoldenGate Studio Nagyon rövid bemutató. Quick Talk. Gollnhofer Gábor

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Enterprise extended Output Management. exom - Greendoc Systems Kft. 1

Kommunikációs rendszerek teljesítőképesség-vizsgálata

Folyamatoptimalizálás: a felhőalapú modernizáció kiindulópontja. Bertók Botond Pannon Egyetem, Műszaki Informatikai Kar

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Programozási nyelvek Java

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom

iphone és Android két jó barát...

III. Alapfogalmak és tervezési módszertan SystemC-ben

Közösség, projektek, IDE

EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

Hatékony keresés a szemantikus világhálón

xkir Tesztintézmény Ügyvitel..SZAKMACSOPORT Irodai asszisztens..szakma OKJ SZÁMA: /

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

Web Services. (webszolgáltatások): egy osztott alkalmazásfejlesztési plattform

Programozási alapismeretek 4.

Járműinformatika A járműinformatikai fejlesztés

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

A 2018-as Modellező (A) specializáció tanegységei. Számítógépes rendszerek

A nemzeti fejlesztési miniszter

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Név KP Blokk neve KP. Logisztika I. 6 LOG 12 Dr. Kovács Zoltán Logisztika II. 6 Logisztika Dr. Kovács Zoltán

Publikációs lista. Gódor Győző július 14. Cikk szerkesztett könyvben Külföldön megjelent idegen nyelvű folyóiratcikk...

Átírás:

Tézisfüzet Metaprogramok alkalmazása er sen típusos objektum-orientált rendszerek kiterjesztésére Zólyomi István Témavezet : Dr. Porkoláb Zoltán Eötvös Loránd Tudományegyetem Informatika Kar Programozási Nyelvek és Fordítóprogramok Tanszék ELTE Informatika Doktori Iskola Az informatika alapjai és módszertana doktori program Iskola- és programvezet : Dr. Demetrovics János Budapest 2009 1

1. Bevezetés Napjaink legszélesebb körben alkalmazott programozási módszertana vitathatatlanul az objektum-orientált programozás. Alkalmazásának évtizedei alatt azonban világossá váltak módszertanának korlátai, hátrányai is. Ezek számos objektum-orientáltságot kiegészít, vagy alapjaiban új paradigma létrejöttét eredményezték, ilyenek többek között az aspektus-orientált, jellemz -orientált (feature-oriented), generikus, vagy a szándékalapú programozás. Ezek számos el nyük mellett természetesen hátrányokkal is rendelkeznek. A hátrányok leküzdését és az el nyös tulajdonságok egyesítését célozta meg a többparadigmás programozás, mely a feladatnak leginkább megfelel módszereket próbálja ötvözni. Legígéretesebb módszertannak azonban a metaprogramozás t nik, mely mindezen nyelvi kiterjesztések, programozási elvek absztrakciójaként értelmezhet. Alapelve nem más programozási paradigma kiterjesztésén alapszik, hanem általános programtranszformációk elvégzésére képes, a hagyományos programoktól elkülönül metaprogramok végrehajtásával dolgozik. Ennek speciális eseteként adódik a felsorolt módszertanok mindegyike. A programtranszformációk elvégzéséhez a metaprogramoknak hozzá kell férnie az átalakítandó program metaadataihoz, például típusinformációkhoz, kifejezésfákhoz. Másrészt képesnek kell lennie átalakításokat végezni a programon, például új kódot generálni vagy átalakítani a szintaxisfát. Sajnos a gyakorlatban a metaprogramozás még meglehet sen nehézkes és rosszul támogatott, így többnyire speciális alkalmazási területeken használják, ahol más módszerek már nem lennének célravezet k. Egyik legfontosabb a programkód tár- és id igényének optimalizálása, mely a metaprogramozás egyik els célterülete volt, és komoly eredményekre vezetett. Használják beágyazott és többszint programnyelvek kiértékelésére, segítségükkel spe- 2

ciális célterületeket leíró programnyelvek illeszthet k általános célú nyelvekbe. Másik gyakori alkalmazása automatikus adattároló vagy formátumkonverziós programkód generálása típusinformációk alapján, illetve különböz protokollok szerinti automatizált kommunikációra képes kód generálása függvényszignatúrák alapján. A modern, integrált fejleszt környezetek legtöbbje képes a programkód bizonyos fokú automatizált átszervezésére is, ilyen például programkód kiemelése függvénybe, függvényparaméterek átalakítása vagy a nem elérhet kódrészletek megtalálása. 2. A dolgozat célja, módszerei A dolgozatban az er sen típusos objektum-orientált típusrendszerek lehet ségeinek határait, alkalmazásának korlátait vizsgálom. A dolgozat célja ezen típusrendszerek lehet ségeinek kiterjesztése, melyre a metaprogramok kiváló eszközt adnak. A metaprogramok megírására a C++ nyelvet választottam, ezen belül is legtöbbször a nyelv sablonjainak segítségével dolgoztam. A sablonok a C++ nyelven belül önálló, Turing-teljes funkcionális nyelvet adnak, valamint típusparamétereik segítségével testre szabható kódgenerálási lehet séget biztosítanak. A C++ sablon-metaprogramozás használata napjainkra elfogadott és egyre szélesebb körben alkalmazott módszerré n tte ki magát, ezért választása természetesen adódik. 3

3. A dolgozat eredményei 3.1. Típusvizsgálat Mivel a metaprogramozás egy új, feltörekv módszertan, így még nem rendelkezik kell képpen kiforrott elméleti háttérrel és fejleszt eszközökkel. A programok metaadatainak elérése a metaprogramozás alapvet szükséglete, ám alig akad olyan programozási nyelv vagy környezet, mely ezt a fordítási idej metaprogramok esetén is támogatná. A dolgozatban bemutattam egy általános típusvizsgáló rendszert, mely lehet vé teszi az els rend logika predikátumaira alapozott elemi vizsgálatok végrehajtását, valamint ezekb l logikai m veletek segítségével összetett feltételeket is képes megfogalmazni. Szabványos C++ nyelv sablon-metaprogramok segítségével megadtam a rendszer megvalósítását C++ nyelv típusvizsgálatok elvégzésére. A témával kapcsolatos eredményeket [1, 9] alatt publikáltam. 1. Tézis. Deniáltam egy els rend logikán alapuló, nem intruzív, univerzális típusvizsgáló (introspection) rendszert. C++ sablonmetaprogramok segítségével elkészítettem a rendszer egy konkrét megvalósítását, mely C++ nyelv programkód típusvizsgálatára szolgál. A könyvtár az ISO/IEC 14882:1998 szabvány szerinti nyelvi eszközökre épül, ezért fordítófüggetlen és hordozható. 4

3.2. Strukturális altípusosság A metaprogramozás fontos alkalmazási területe a nyelvek típusrendszerének kiterjesztése, tulajdonságainak javítása. A dolgozatban bemutattam az er sen típusos objektum-orientált nyelvek típusrendszerének gyengeségét a lépésenkénti nomítás módszerének alkalmazása esetén. Az objektum-orientált módszer a megoldás érdekében létrehozandó összetett osztályok, illetve interfészek számának exponenciális növekedéséhez vezet az sök és interfészek számának függvényében. Mivel ez a gyengeség a struktúrális altípusosság szabályainak alkalmazásával kiküszöbölhet, C++ nyelven olyan automatikus konverziókat valósítottam meg, melyek a nyelv típusrendszerének kiterjesztésével a strukturális altípusosságot szimulálják. A megoldás sablonmetaprogramokkal automatizált kódgenerálásra épül, és kizárólag szabványos nyelvi eszközöket használ. A lusta, igény szerinti kódgenerálás segítségével az újonnan létrejöv osztályok száma lineáris lett a programban ténylegesen felhasznált, eltér konverziók számának függvényében. A megoldást [3, 5, 7] alatt ismertettem. 2. Tézis. Megmutattam a jelenlegi objektum-orientált nyelvek típusrendszerének korlátait osztályok lépésenkénti nomításának esetében. Szabványos sablon-metaprogramok segítségével a strukturális altípusosságon alapuló, kiegészít konverziós szabályokat vezettem be a C++ nyelv típusrendszerébe, megoldást adva a lépésenkénti nomítás problémájára. A módszerrel elkerülhet a létrehozandó interfészek számának kombinatorikus robbanása. 5

3.3. Sorosítás A metaprogramozás egy másik fontos alkalmazási területe az adatok sorosítása, melyre a típusok önleírásának felhasználásából kiindulva egy adott nyelvhez viszonylag jó, általános, formátumfüggetlen megoldás adható. A típusok önleírása a virtuális gépen, illetve értelmez n alapuló programozási környezetekben (pl. Java, C#) legtöbbször adottság, ezek többnyire rendelkeznek is szabványos sorosító könyvtárakkal. Az ilyen könyvtárak közös jellemz je, hogy a nyelven megadott típusok alapján határozzák meg az elmentett adatok formátumát. A sorosítás más, a metaadatok elérését futási id ben sem támogató nyelveken jóval nehezebb. A dolgozatban bemutatott megoldás a másik irányból indul ki, és a rendelkezésre álló adatleírásokhoz, sémákhoz készít programnyelvi típusokat. A megoldás nyelv- és formátumfüggetlen, ám a formátumot leíró séma típusainak leképzését igényli a programozási nyelv típusaira. Bemutattam a sorosítás m ködését XML formátumú adatokra, az algoritmust a típusok önleírását nem támogató C++ nyelven megvalósítva. A megoldás hasznosságát tovább növeli, hogy kis er forrásigénye miatt alkalmazása ideális lehet telefonok, kéziszámítógépek és egyéb, kisebb kapacitású rendszerek egymás közötti kommunikációjára. A megoldás részletei [2, 4] alatt érhet k el. 3. Tézis. Nyelv- és formátumfüggetlen, moduláris módszert adtam sémaleírással rendelkez dokumentumok sorosítására. Leképzést deniáltam az XML sémaleírók típusrendszerér l a C++ nyelv típusrendszerére, valamint megvalósítottam egy leképzést elvégz kódgenerátort. Implementáltam a leképzésre épül, XML dokumentumokat sorosító általános metaprogramot. Az elkészült könyvtárat a Nokia hivatalos fejleszt i eszközként adta ki S60 platformjára. 6

4. További kutatási lehet ségek Természetesen a dolgozat megoldásainak bármelyike adhatna lehet séget további fejlesztésekre, azonban én mégsem ezt érzem a legfontosabb kutatási iránynak. A kutatási munka során minduntalan olyan nehézségekbe, korlátokba ütköztünk, melyek messze nem a metaprogramozás határainak eléréséb l, hanem annak gyermekbetegségeib l adódnak. Azt gondolom tehát, hogy a metaprogramozás vizsgálata és fejlesztése, módszereinek megalapozása lehet a további kutatások legfontosabb iránya. A metaprogramozás leggyakrabban még mindig ad-hoc jelleg megoldásokra alapul, súlyos módszertani hiányosságokkal rendelkezik, ami a megfelel elméleti alapok, illetve a megfelel programozási eszközök hiányának tudható be. Fontosnak tartom tehát megtalálni azokat az elméleteket, módszertanokat, melyek segítségével jól tervezett, helyes és karbantartható metaprogramok írhatók. Másrészt a hagyományos programok fejlesztésében bevált eszközök jó része hiányzik a metaprogramok esetében. Nincsenek bonyolultságot mér metrikáink, tesztkörnyezeteink, nyomkövetést vagy teljesítménymérést biztosító eszközeink, integrált fejleszt környezeteink sem. Fontosnak tartom tehát metaprogramozást támogató fejleszt eszközök elkészítését is. 7

Hivatkozások [1] István Zólyomi, Zoltán Porkoláb. Towards a General Template Introspection Library. Generative Programming and Component Engineering LNCS Vol. 3286 (2004) pp. 266-282. [2] Szabolcs Payrits, Péter Dornbach, István Zólyomi. Metadata-Based XML Serialization for Embedded C++. Proceedings of ICWS 2006, pp. 347-356 [3] István Zólyomi, Zoltán Porkoláb, Tamás Kozsik. An Extension to the Subtype Relationship in C++ Implemented with Template Metaprogramming. Generative Programming and Component Engineering LNCS Vol. 2830 (2003) pp. 209-227. [4] Szabolcs Payrits, Péter Dornbach, István Zólyomi. Metadata-Based XML Serialization for Embedded C++. International Journal of Web Services Research (IJWSR), megjelenés alatt. [5] István Zólyomi, Zoltán Porkoláb. A Feature Composition Problem and a Solution Based on C++ Template Metaprogramming. Generative and Transformational Techniques in Software Engineering LNCS Vol. 4143 (2006) pp. 459-470. [6] István Zólyomi, Zoltán Porkoláb. A generative approach for family polymorphism in C++. Proceedings of ICAI 2004, Eger, Hungary, pp. 445-454. [7] Zoltán Porkoláb, István Zólyomi. An anomaly of subtype relations at component renement, and a generative solution in C++. MPOOL Workshop, ECOOP 2004, Oslo, pp. 39-44. [8] Ádám Sipos, István Zólyomi, Zoltán Porkoláb. On the Correctness of Template Metaprograms. Proceedings of ICAI 2007, Eger, Hungary, pp. 301-308. [9] István Zólyomi, Zoltán Porkoláb. Improving concept checking in Boost. Boost Workshop, OOPSLA 2004, Vancouver. 8