3. alszekció a helyezések megjelölésével

Programozási technológiák

 

Balanyi Zsolt

Tervezési minták felismerése

Szegedi Tudományegyetem Természettudományi Kar

Témavezetők: Ferenc Rudolf, Gyimóthy Tibor

 

A dolgozat egy hiánypótló algoritmust mutat be a reverse engeneering területén. A tervezési minták felismerése egyelőre még nem megoldott kielégítő módon. Több próbálkozás is született, amelyek nem bizonyultak megbízhatónak. Az itt bemutatott algoritmus a Columbus programot használja a forráskód visszafejtésére egy általános formátumba, amely független a programozási stílusból, viszont jól leírja az osztályokat és a köztük lévő kapcsolatokat. Ebben a nyelvben vannak leírva a tervezési minták is, a működésüket jellemző legszűkebb tulajdonsághalmazzal. A minták felismerése abból áll, hogy a visszafejtett forráskódban kikeressük azokat az osztályokat, amelyek rendelkeznek a mintákra jellemző tulajdonságokkal. A keresés két fázisból áll. Az első fázisban megkeressük azokat az osztályokat, amelyek rendelkeznek az adott minta vagy alkotóelem jellegzetes tulajdonságaival, és azokat eltároljuk egy tömbben. A második fázisban az első fázisban megtalált kandidátusok közötti összefüggéseket próbáljuk megtalálni. Amennyiben a kandidátusok között megtaláljuk a szükséges összefüggéseket, úgy a megtalált osztályokat kiírjuk mint a keresett minta alkotóelemeit.

Az algoritmus jelenlegi verziója a minták leírását szigorúan követi, és a típusok, függvények, öröklődések pontos megfeleltetésén alapul. Ez jelentősen megkönnyíti a megfeleltető algoritmus dolgát. Az algoritmus minden, a mintában fellelhető programelemhez megpróbál társítani egy-egy programelemet az elemzett kódból. A sikeres társítás tényét eltárolja, a sikertelenét nem. A sikeresen társított programelem más mintaelemhez nem társítható, amíg a mintakeresés az adott osztályhalmazra sikeres vagy sikertelen választ nem ad. Ezután a társítások feloldódnak és lehetőséget adnak más kombinációk kipróbálására. Ezáltal kizárhatóak azok az esetek, amikor egy osztálynak sok függvénye és adattagja van, és így egymaga megfelelne több mintában szereplő osztálynak is.

 

Diviánszky Péter

Kombinátoros szintaktikai elemző a Clean nyelvhez

Debreceni Egyetem

Témavezetők: dr. Csörnyei Zoltán, dr. Horváth Zoltán

 

A beszéd és az írás is lineáris formában közli a nem lineáris gondolatokat, ennek feloldására szolgál a fogalmazás és az elemzés folyamata. Az egyik speciális esete ennek az, amikor a programozó megfogalmazza a programot, a fordító pedig többek között elemzi azt. Az adott nyelven megírt program elemzését többnyire speciális nyelvtanleírásokból generált elemzők végzik, azonban létezik egy alapvetően más megközelítés is: az úgynevezett kombinátoros elemzők.

A kombinátoros elemzők mellett szól az az érv, hogy a nyelvtan leírása már egy meglevő programnyelven történik, így nincs szükség külön elemző generátorra, és az elemző szorosabban együttműködhet a fordító többi részével. Ez igaz az ad-hoc stílusban megírt elemzőkre is, azonban a kombinátoros elemzők azoktól sokkal tömörebbek és áttekinthetőbbek, könnyebben alakíthatóak. Annak, hogy a gyakorlatban mégsem alkalmazták a kombinátoros elemzőket, a nagyobb időigény az oka.

Dolgozatomban kísérletet teszek egy, a gyakorlati életben is használt programnyelv elemzőjének minél hatékonyabb megírására kombinátoros elemzőkkel, majd értékelem az eredményt. Tudtommal ez az első ilyen próbálkozás.

A Clean nyelvet választottam az elemző megírásához, és egyúttal az elemzés céljaként is. Ez mindkét szempontból jó választás volt: egyrészt a Clean egy tisztán funkcionális nyelv, így alkalmas kombinátoros elemzők írására, másrészt a nyelv még fejlesztés alatt áll, és az áttekinthetőbb elemző segítheti a további fejlesztéseket. (A nyelvnek ezelőtt csak egy ad-hoc stílusban megírt elemzője létezett.)

Új eredmények: a hatékonyság növelése érdekében új típusú kombinátoros elemzőket vezettem be; ezeket összehasonlítottam a szakirodalomban találhatóakkal. Ezekkel az új típusú elemzőkkel megírtam a Clean nyelv elemzőjét Clean nyelven, és a kapott elemzőt összehasonlítottam a korábbival.

  

Fazekas Imre

CIAValós idejű szoftvermenedzsment ágensek és wrapperek segítségével

Debreceni Egyetem

Témavezető: dr. Juhász István

 

Egy Java alapú rendszer esetében jogos igény a futásidőben történő profiling elvégzése, vagy szoftverkomponensek analizálhatósága, strukturális és viselkedésbeli korrekciók végrehajtása az adott szoftver leállításának vagy teljesítménycsökkenésének előidézése nélkül. Például egy webszerver estében tesztelhetnénk a belső folyamatait nagy terhelés mellett, vagy megkereshetnénk működésének szűk keresztmetszeteit a megtalálást követő korrekciókat is beleértve. A profiling elvégzéséhez rendelkezésre állnak eszközök (például: debug, JPDA, JVM-opciók), de sajnos alkalmazásukkal súlyos árat fizetünk:

·         futás előtt kell döntenünk alkalmazásukról;

·         drasztikus teljesítménycsökkenést eredményez;

·         számolnunk kell a fejlesztői interakció teljes hiányával; stb.

Dinamikus analizálásra, vagy korrekcióra még igazán hatékony eszköz sem létezik, vagy csak egy speciális probléma kezelését teszik lehetővé.

Ideális esetben általunk definiált ágensek és wrapperek végeznék el az általunk definiált műveleteket, vagy megoldást találnának általunk specifikált problémákra egy futó alkalmazásba beépülve oly módon, hogy ne legyen szükség különösebb programozói tevékenységre vagy tudásra. Az ágensnek egy alkalmazás objektumai között kellene „mászkálgatni”, és működő objektumokba beépülni. A megoldást egy olyan technológia jelentené, amely lehetővé teszi:

·         tetszőleges alkalmazáson történő alkalmazhatóságot;

·         ágensek, wrapperek definiálását, koordinálását, irányítását futásidőben;

·         megbízható konzisztens működést a teljesítménycsökkenés minimalizálásával;

·         teljes kontrollt és felügyelet mind a szoftver, mind az ágensek felett;

·         nagyon egyszerű felhasználói interfészen keresztüli végrehajtást.

Ez lett a Central Idustry of Agents, vagyis a CIA. Olyan technológiát takar, amely minden „ideális esetként” felsorolt követelménynek való megfelelésen túl további eszközöket, lehetőségeket is biztosít.

 

II. helyezett: Fazekas Imre

Fluxion-objektumok futásidejű kezelése

Debreceni Egyetem

Témavezető: dr. Juhász István

 

A folyamatos üzemelést igénylő számítógépes rendszerek számára is biztosítanunk kell a futás közbeni fejlesztőséget. Ez OO-környezetben objektumok együttesét jelenti, melyek kapcsolatban állnak, kommunikálnak egymással. Amikor valamilyen fejlesztést végzünk, bizonyos objektumok megváltoztatják viselkedésüket, új objektumok jelennek meg. Ezért a futásidejű szoftverfejlesztés mögött mindig objektumcsere áll. Objektumok futásidejű cseréjét kell tudnunk megoldani. Biztosítani kell:

·         dinamikus osztálybetöltést;

·         osztályok, interfészek futásidejű definiálását, módosítását;

·         adattagok, metódusok definiálását, módosítását.

Röviden dinamikus környezetet kell teremtenem, ha meg akarom valósítani, hogy futás közben bizonyos objektumok viselkedése, adatmodellje változzon.

Fluxion, a szoftveres „hot-swapping”-et megvalósító technológia

OO-környezetben a továbbfejlesztett osztály minden korábbi példánya lecserélésre kerül, a memóriában található objektumok állapotának, a konzisztencia, és a rendszer stabilitásának megőrzésével. És persze mindezt futás közben, oly módon, hogy a tranzakciók, kiszolgálások csak enyhe késleltetést szenvedhetnek. A futásidőben definiált osztályt is létrehozhatunk és példányosíthatunk, vagy objektumok viselkedését, adatmodelljét változtathatjuk új metódusok és adattagok létrehozásával vagy a korábban definiáltak átírásával. Mindezen szolgáltatás egy könnyen kezelhető interfészen keresztül hajtható végre, könnyen elérhető eszközt biztosítva a fejlesztő számára.

A Fluxion rendszer biztosítja:

·         Tetszőleges alkalmazások esetében történő alkalmazhatóságot.

·         Alkalmazások futásidőben történő fejleszthetőségét.

·         Osztályok, interfészek, metódusok, adattagok definiálását és módosítását futásidőben.

·         Perzisztens objektumok kezelését.

·         Konzisztens és teljesítménybeli javulást eredményező működést

 

különdíj: Ivicsics Mátyás

A Clean dinamikus típusrendszere és implementációjának továbbfejlesztése

Eötvös Loránd Tudományegyetem

Témavezetők: dr. Horváth Zoltán, Martijn Vervoort

 

Munkámmal a Clean funkcionális programozási nyelv fejlesztésébe kapcsolódtam bele, azon belül pedig a dinamikus típusrendszer implementációjának továbbfejlesztésén dolgoztam.

A futásidejű programszerkesztés lehetővé teszi, hogy futó alkalmazás kiírjon illetve beolvasson programkódot és a beolvasott kódot végre is hajtsa. A Clean erősen típusos nyelv, így fontos elvárás, hogy a beolvasni kívánt kód típusellenőrzése beolvasás előtt megtörténjen. A megvalósításhoz kifejlesztették a dinamikus típusrendszert.

A fejlesztők törekedtek a kód hatékony tárolására, valamit arra, hogy a beolvasott kód felhasználásakor is érvényesüljenek a lustaságnak, a Clean által használt kiértékelési stratégiának az előnyei.

A fenti célok elérése sikerült, ám átláthatatlan fájlrendszerhez vezetett. A felhasználó által felderíthetetlen összefüggések kapcsoltak logikailag össze egymástól messze tárolt fájlokat; ezen fájlok átnevezése áthelyezése a rendszer működésére nézve veszélyesnek számított. Problémát jelentett annak a meghatározása is, hogy mely fájlok szükségesek a biztonságos működéshez és melyek feleslegesek, továbbá a kódállományok más számítógépre másolása is megoldhatatlan feladatnak bizonyult.

A problémák megoldásán dolgoztunk, és sikerült kialakítani olyan tárolási rendszert, amellyel lehetségessé vált a szokásos fájlműveletek (másolás, törlés, átnevezés) biztonságos végrehajtása. Létrehoztunk továbbá egy szemétgyűjtő és egy kódállomány-másoló eszközt, melyekkel a felesleg eltüntetésének, illetve kódállományok más számítógépekre való másolásának problémája megoldódott.

A kialakított új rendszer lehetővé teszi, hogy a programozó valóban felhasználóként viszonyulhasson a dinamikus programszerkesztéshez, és használatához ne kelljen tisztában lennie az implementáció bonyolultságával.

 

Kálmán Miklós

XML-dokumentumok kompakt reprezentációja

Szegedi Tudományegyetem Természettudományi Kar

Témavezetők: Gyimóthy Tibor, Havasi Ferenc

 

Napjainkban az XML-dokumentumok egyre nagyobb szerepet játszanak. Alkalmazási területük az adatbázisok tárolásától az orvosi felhasználásig terjed, a felhasználási spektrum napról napra bővül. Az XML-állományok elég nagy méretet ölthetnek és sok redundáns adatot tartalmaznak, ennek enyhítésére dolgoztunk ki egy eljárást. Olyan esetekben amikor az XML-dokumentumokat hordozni szeretnék, illetve átmásolni más helyekre, előtte különféle tömörítést kell rajtuk végrehajtani. A mi eljárásunk egy SRML (Schemantic Rule Meta Language)-állomány segítségével kompaktabbá, hordozhatóbbá teszi az XML-állományt. Az SRML metanyelvet mi dolgoztuk ki, így eléggé egyedi tulajdonságokat tudtunk beleékelni, amely mind általános és mind specifikus XML-állományokra hatékony szabályok tárolására alkalmas. Az SRML szabályrendszere hasonlít az Attribútum Nyelvtanoknál ismert szemantikus függvényekre. Az algoritmusunk ezek segítségével a szabályoknak megfelelően kompaktálja az XML-állományt. Az SRML-állományok előállítása történhet kézzel (abban az esetben, ha már ismerjük az összefüggőségeket), illetve gépi tanulással. Az utóbbi esetében az állományban olyan szabályok, dependenciák is fellelhetők, amelyek esetleg a felhasználók számára nem voltak egyértelműek. Ezzel például egyfajta Adatbányászat is végezhető, hogy olyan attribútumok között leljünk összefüggéseket, amelyek első ránézésre nem voltak evidensek. Az algoritmusunkat implementáltuk JAVA nyelvben, ezzel is elősegítve a gyors elterjedését a platformfüggetlenség nyújtotta előnyök miatt. Az implementáció tesztelése során az XML-állományt körülbelül 20-30%-kal tudtuk kisebbé tenni a tömöríthetőség elvesztése nélkül (pl.: az XMill nevű XML-tömörítő hasonló hatékonysággal futott le, mint az eredeti „nem kompaktizált” állományon, természetesen a kompaktált állományra adott XMill eredmény kisebb volt az eredetinél). Maga az algoritmus egy keretrendszeren alapszik, amely lehetővé teszi a későbbi bővítéseket. Jelenleg öt „plug-in” algoritmussal dolgozik a rendszer, ezek copyszabályok, statisztikai műveletek és gépi tanulási módszereket foglalnak magukban. Az algoritmus SRMLGenerator nevet kapta és bekerült egy általunk kifejlesztett csomagba (SRMLTool), amely tartalmazza a generáláson kívül a kompaktálás és dekompaktálás eljárásokat. Természetesen a kompaktált állomány veszteségmentesen visszaállítható eredeti formájára, ezzel garantálva az integritás megmaradását

 

III. helyezett: Kis Gergely – Orosz József György – Pintér Márton

C# programok metaszintű manipulációját támogató osztálykönyvtár készítése

Budapesti Műszaki és Gazdaságtudományi Egyetem

Témavezetők: dr. László Zoltán, Thomas Genssler

 

Mára az objektumorientált fejlesztés „de facto” szabvánnyá nőtte ki magát a szoftverfejlesztésben. Az utóbbi néhány évben azonban meg kellett tapasztalnunk a korlátait is. Példaként említhetjük a szoftveradaptáció, a felhasználói követelményekhez való folyamatos alkalmazkodás nehézkességét, vagy azt, hogy az objektumokban gyakran különböző viselkedések keverednek össze.

Ezekre a problémákra keres megoldást számos új módszer és paradigma, köztük a refaktorálás (refactoring), a generikus (más néven generatív) programozás, a személyiségjegyek (personalities), a metaprogramozás, az adaptív és az aspektus-orientált programozás. Az említett módszerek azonban a forráskódot már egy, a puszta szövegnél magasabb (meta) szinten közelítik meg. Így olyan eszközöket igényelnek, amelyek lehetővé teszik a forráskód metaszintű feldolgozását. Ilyen szoftverek már léteznek C++-hoz, JAVA-hoz, azonban még nem készültek el a viszonylag új ámbár villámgyorsan terjedő C# nyelvhez. Ezért tűztük ki célul egy, a C# nyelven íródott programok szintaktikai és szemantikai analízisét, valamint metaszintű manipulációját lehetővé tevő könyvtár elkészítését.

A dolgozatban áttekintjük és jellemezzük a jelenleg elérhető legkorszerűbb technológiákat, majd bemutatjuk az általunk elkészített keretrendszert, a Recoder.C#-ot, amely a JAVA nyelvhez íródott Recoder könyvtáron alapul. A Recoder.C# képes a C# osztályok szintaktikus és részleges szemantikai analízisére, valamint e statikus információkból elérhetővé teszi az osztályok meta­struktúráját (névterek, típusok, osztályok, metódusok, mezők, attribútumok). Az elemzés mellett a programcsomag azt is lehetővé teszi, hogy a metastruktúrából ismét kódot generáljunk, így lehetőséget teremt a programok statikus transzformációjára.

A működés leírásához formalizáljuk az elemzés lépéseit, a szükséges információkat, valamint a fanyelvtanokon alapuló transzformációk szabályrendszerét. A C# új konstrukcióinak feldolgozása mellett azokra a problémás területekre is kitérünk, ahol a C# kód elemzése nehézséget jelent.

A dolgozat végén ízelítőt adunk a könyvtár lehetséges alkalmazásaiból, foglalkozunk a JAVA programok C# nyelvre fordításának lehetőségével és ennek fordítottjával. 

 

különdíj: Lukács Sándor

Hardverközeli programozás

Babeş-Bolyai Tudományegyetem

Témavezető: dr. Robu Judit

 

A hardverközeli programozás a számítástechnika egyik legvitálisabb ága, hiszen eszközmeghajtók, operációs rendszerek és alacsonyabb szintű fordítóprogramok nélkül a mai számítástechnika elképzelhetetlen. Ugyanakkor az ilyen „mélyszintű” programozás talán az egyik legigényesebb programozási terület, ahol nemcsak széles körű, alapos és pontos technikai ismeretekre van szükség, hanem rengeteg adatszerkezeti, algoritmikai, vagy akár statisztikai ismeretekre is.

A dolgozatom központi témája egy olyan operációs rendszer kernel kifejlesztése, amely keretében rengeteg hardverközeli programozást érintek, úgy elméleti, mint elsősorban gyakorlati megközelítésből. A fejlesztés során egy olyan minimális – de használható – kernelt készítettem, amelyet felhasználva könnyen és egyszerűen készíthettem és tesztelhettem különböző hardvereszközök számára meghajtókat – mint például merevlemez meghajtót, videokártya meghajtót, soros kommunikációs port vezérlőt stb.

A kernel fontosabb jellemzői: a) védett üzemmódú, többfolyamatos, többszálas; b) részben mikrokernel/moduláris felépítésű; c) széles körű a szinkronizációs primitívek és az interprocessz kommunikációs lehetőségek támogatása; d) a kernel egyes részei könnyen, szabadon helyettesíthetők és bővíthetők a további igényeknek megfelelően. Ezeket a lehetőségeket kihasználva a különböző meghajtók programozásakor olyan területeket is érintek, mint az UDMA, a PCI busz, hangkártyák vagy a Plug & Play kompatibilis eszközök programozása.

A dolgozat elsődleges céljaként sikerült létrehoznom egy olyan operációs rendszer kernelt, amely segítségével eléggé könnyen lehet tesztelni a továbbiakban úgy különböző hardverprogramozási, mint operációs rendszerekhez kapcsolódó algoritmikai (ütemező algoritmusok, memóriaallokáló stratégiák stb.) technikákat és megoldásokat.

  

Orosz József György

Komponensrendszer kisebb multi‑tier JAVA‑alkalmazásokhoz

Budapesti Műszaki és Gazdaságtudományi Egyetem

Témavezető: dr. László Zoltán

 

A többrétegű alkalmazások egyre inkább előtérbe kerülnek. Az ilyen szoftverek megvalósításához viszont olyan „middleware” szolgáltatások is szükségesek, mint például az elosztott, újra felhasználható üzleti logikát végző objektumok, a transzparens perzisztencia vagy a hozzáférés-védelem. A J2EE szabvány (azon belül is az EJB specifikáció) megoldást nyújt ezekre az igényekre, amelynek köszönhetően ma a legnépszerűbb platform a többrétegű alkalmazások körében. Az azonban kérdéses, hogy a J2EE megállja-e a helyét azoknál a kisebb alkalmazásoknál, ahol az üzleti logika viszonylag egyszerű, mindössze néhány view dolgozik néhány (4-5) entitáson.

Kidolgoztam egy módszertant, amely az ilyen rendszerek fejlesztésekor használható. A módszertan alapját azok a már jól bevált tervezési minták adják, amelyek megtalálhatók számos enterprise, illetve egyéb JAVA alkalmazásban. A dolgozat célja a módszertan, illetve a támogató eszközök bemutatása és tudományos vizsgálata.

A módszertan gyakorlati alkalmazásához két keretrendszert dolgoztam ki. Az egyik a YACCOS komponensrendszer, amellyel a business objektumok és az üzleti logika menedzselhető. A másik a Lorf/J, egy – az előbbi rendszertől teljesen független – framework, amely a perzisztencia transzparens megvalósításában segít. A két rendszert az ún. értékobjektumok (value object) kapcsolják össze.

A YACCOS keretrendszer több szempontból is más, mint a hagyományos komponensrendszerek. Nem definiál saját protokollokat a távoli metódushívásra, csak mindössze 5 új fogalmat és egy „triviális” működést. A komponensek egyetlen kompozíciós operátorral integrálhatók, míg a megfelelő kötések segítségével más rendszerbeli komponensekből (EBJ-k, WebService-ek, CORBA stb.) is elérhetők.

A Lorf/J framework egy független megoldás objektumok tárolására, amely jól illeszkedik a YACCOS-hoz is. A Lorf/J egy statikus kódgeneráláson alapuló transzparens objektumrelációs leképzést valósít meg, és lehetővé teszi tetszőleges JAVA-ob­jektumok tárolását valamely JDBC kompatibilis relációs adatbázisba. A perzisztens objektumok elérésére, megtalálására saját interfésszel rendelkezik, ugyanakkor az objektumrelációs megfeleltetés miatt az adatokat a hagyományos módon, JDBC-n keresztül is elérhetjük. 

 

I. helyezett: Terék Zsolt

Korszerű modelltranszformációs rendszer tervezése és alkalmazásai

Budapesti Műszaki és Gazdaságtudományi Egyetem

Témavezető: Varró Dániel

 

UML-modellek verifikációjának illetve validációjának elterjedt megközelítése szerint a felhasználó rendszermodelljét automatikusan transzformáljuk különféle matematikai leírásokká (Petri-hálók, automaták stb.), majd a matematikai analízis eredményeit szintén automatikusan vetítjük vissza a rendszermodellbe, ezáltal a rendszermérnököknek nem szükséges ismerniük a különféle matematikai formalizmusokat.

A tanszéken kifejlesztett VIATRA (VIsual Automated model TRAnsformations) rendszer célja e transzformációs feladatok támogatása, melynek során egy UML Profile által megadott (gráf)transzformációs szabályhalmaz szemantikájának megfelelő Prolog programot automatikusan generáljuk és hajtjuk végre. A VIATRA rendszer gyakorlati alkalmazásai azonban rámutattak arra, hogy nagyméretű rendszerek transzformációi során hatékonysági problémák lépnek fel.

A modelltranszformációs rendszerek hatékonyságát döntően az alkalmazott gráfminta-illesztési algoritmus sebessége befolyásolja. Mivel a mintaillesztés problémája általános gráfok esetében NP-teljes, polinom idejű algoritmus kidolgozása (jelen ismereteink alapján) reménytelen. A vizsgálódások célja az volt, hogy az algoritmus átlagos esetben hatékony legyen.

A dolgozat egy új modelltranszformációs rendszert mutat be, amely az elmúlt másfél év kutatási eredményein alapuló mintaillesztő algoritmus köré épül. Ennek az implementációnak két fontos követelményt kellett teljesítenie:

·         a VIATRA rendszer transzformációs magját funkcionálisan helyettesítenie kell úgy, hogy annál lényegesen nagyobb hatékonyságra legyen képes;

·         alkalmas legyen a modelltranszformáció alapú kódgenerálás támogatására is.

A bemutatott modelltranszformációs rendszer a Scheme programozási nyelvet használja fel szkriptnyelvként és beágyazott interpreterként.

A transzformációs rendszert kiterjesztettük kódgenerálási képességekkel is, melynek során a szabályok végrehajtásával egyidejűleg a megadott parametrikus kódvázak futtatásával a potenciális alkalmazási területek (pl. debug információk, logging, tesztesetek generálása stb.) egy szélesebb skáláját kapjuk 

 

különdíj: Veres Kinga

Kangaroo MIPS R3000 virtuális gép és assembler

Babeş-Bolyai Tudományegyetem

Témavezető: dr. Robu Judit

 

Virtuális gépnek nevezünk egy olyan alkalmazást, amely gépi kódú programokat futtat és azt a látszatot kelti a felhasználó számára, mintha azok egyenesen a hardveren hajtódnának végre.

A virtuális gépek jelentősége elsősorban abban rejlik, hogy egyrészt lehetővé teszik más számítógép-architektúrákra fejlesztett programok futását egy adott gépen; másrészt egy nagymértékben ellenőrzött futási környezetet biztosítanak, amely alkalmas különféle programhibák gyors kiszűrésére, azok negatív hatásának csökkentésére.

Dolgozatom egy saját fejlesztésű MIPS R3000 virtuális gépet és a hozzá tartozó assemblert mutatja be. A MIPS processzorcsalád meghatározó szereppel bír a csökkentett utasításkészletű számítógépek világában és a legújabb hardverfejlesztési irányelveken alapszik. Egyszerűsége és hatékonysága fontos didaktikai szerepet kölcsönöz neki. A bemutatott alkalmazások elősegítik a számítógép hardverének megismerését, és hasznos kiindulópontot jelenthetnek egy nem-x86 architektúra felfedezésében. 

 

III. helyezett: Vidács László

C/C++ preprocesszor és modell a programmegértéshez

Szegedi Tudományegyetem Természettudományi Kar

Témavezetők: Beszédes Árpád, Gyimóthy Tibor

 

A C preprocesszor (cpp) egyidős a C nyelvvel. Kapcsolatuk olyan szoros, hogy a hagyományos értelemben vett C nyelvű forrás értelmezhetetlen a C fordító számára a preprocesszor nélkül. A preprocesszor nyújtotta lehetőségek (konstansok, új szintaxis definiálása, rendszerkonfiguráció beállítása, feltételes fordítás…) sokszor hátránynak is bizonyulnak. A fordítás előtti forrásfeldolgozás szöveges helyettesítéseken alapuló műveletek sora, ennek következtében a preprocesszor úgymond fekete dobozként működik: a fordító a már előfeldolgozott forrást kapja meg, ami sok esetben gyökeresen különbözik attól, amit a programozó lát. Ez mégsem csökkenti a felhasználás mértékét, egyes ismertebb unixos programok forrássorainak 10-20%-át is preprocesszor direktívák teszik ki.

Komoly karbantartási problémák mellett a programmegértést nagyban akadályozza a direktívák használata. A tanszéken egy reverse engineering eszköz fejlesztése folyik, ami eddig figyelmen kívül hagyta a preprocesszor működését. Célunk hogy a feketedoboz-szerű működést feltárjuk, modellt készítsünk az elemzett programról.

A dolgozatban először az általunk implementált preprocesszort mutatjuk be, majd szót ejtünk a modellépítésről, a felhasználási lehetőségekről