390 likes | 555 Views
Algoritmusok megjelenítése egy magas szintű programnyelv vizuális nyomkövetőjén keresztül. Podoski Péter és Zabb László Témavezetők: Dr. Fekete István, Veszprémi Anna ELTE IK. Bevezető. Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket
E N D
Algoritmusok megjelenítése egy magas szintű programnyelv vizuális nyomkövetőjén keresztül Podoski Péter és Zabb László Témavezetők: Dr. Fekete István, Veszprémi Anna ELTE IK
Bevezető • Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket • Felmértük a manapság ismert eszközök előnyeit és hiányosságait • Kidolgoztunk egy saját megjelenítő rendszert, amiben az algoritmusok vizualizációjához szükséges eszközök széles palettája elérhető
Algoritmus-vizualizációk ma • Célja • főleg oktatási területre • könnyebb ismertetés és megértés • olykor algoritmusok fejlesztésekor is segíthet a hibakeresésben • Nehézségek: könnyebb újat írni, mint találni egy megfelelőt • Jellemző, hogy egyszerű Java appletekkelvalósítják meg a demonstrációt
Az igény megfogalmazása • Elvárások egy jó megjelenítővel kapcsolatban: • Célközönség számára megfelelő ábrázolás • Könnyedén lehessen a vizualizációkat módosítani, bővíteni (pl. Hanoi tornyai) • Egyszerű telepítés • Épüljön be a tanítási folyamatba • Ne igényeljen magas szintű programozói tudást
Psimulex - lehetőségek • .NET-ben írt nyílt forráskódú keretrendszer • Algoritmusok megfogalmazása • C-szerű nyelven • Beépített fordítóprogram • Algoritmusok futtatása • Saját virtuális platform • Többprocesszoros, akár hálózati emuláció • Algoritmusok megjelenítése • a program változóit megjelenítő általános grafikai könyvtár (WPF) • Algoritmusok elemzése • Műveletigény, memóriaigény
Saját nyelv • Az algoritmusok szempontjából alapvető típusok (skalárisok, konténerek és fák, gráfok) • Gyengén típusos imperatív nyelv, C-szerű szintaxissal • Típuskonstrukció: rekord • Fontosabb vezérlési szerkezetek • Felhasználói függvények • Több forrásfájl használata • Globális változók
Saját virtuális platform • Virtuális gép („mini” OS ütemezővel), folyamatok, szálak • A virtuális gép processzora futtatja az ún. „Microlex” utasításokat (gépi kódnak megfelelő parancsobjektumokat) • Az egyes szálaknak futási és hívási vermük van • Az ütemező cserélhető • Később virtuális hálózattá bővíthető
Fordítás gépi kódra • Négy lépésben fordítunk, visitor (látogató) tervminta alkalmazásával
Parancsobjektumok • A „parancs” tervminta alapján készültek • Mindegyik gépi utasítás egy-egy parancsobjektum • Az aktuális futási környezeten (szálon) dolgoznak • Három fő csoportjuk van: • Vezérlés-átadó parancsobjektumok (pl. Call, Jump) • Konkrét (főleg aritmetikai) műveleteket végrehajtó parancsobjektumok • Változókat, adatszerkezeteket kezelő parancsobjektumok
Saját típusrendszer • Aránylag gazdag típuskészlet (skalár típusok, gyűjtemények, fák, gráfok) • Java-hoz hasonlóan közös őstípus • BaseType == Object • Reflection-re épül, emiatt könnyen elérhető az egész .NET osztályhierarchia • Felhasználói típus a rekord (egyelőre) • A komplex típusok egymásba ágyazhatóak • Automatikus típuskonverziók
Saját IDE • Funkciók • „LexLighter” (aktuális utasítás színezése) • „Syntaxhighlight” • Léptetési módszerek (hasonlóan a VS-hez) • Korszerű IDE, fülek, több forrásfájl kezelése, testre szabható, ergonomikus • Nézetek váltása
Saját vizualizáció • Dinamikus, változást követő, interaktív adatszerkezetek megjelenítése • „Montázs” – tetszőleges elrendezhetőség: • Hívási verem megjelenítése • Egy-egy lényeges adatszerkezet kiemelése • Egymásba ágyazhatóság (fa elemei gráfok) • Adatszerkezetek szerkeszthetőek futás közben is
Mindez futás közben Egy bináris fa szintfolytonos bejárása a Psimulex-ben
Felhasználási területek • Oktatás • Algoritmusok • Programozás • Fordítóprogramok (assembly-szerű nyelvek filozófiája) • Kutatás • Elméletek tesztelése és bemutatása • Fejlesztés • Algoritmikus problémák megoldása itt és aztán implementálása • Demonstráció • Automatikusan létrejön a megjelenítés, csak a programot kell megírni, az inputot megszerkeszteni.
Távlati tervek • Párhuzamos programozási eszközök (lock, monitor, erőforrások) teljeskörű bevezetése • .NET interoperabilitásnövelése (a megírt Psimulex nyelvű programból C# vagy IL kódot generálhassunk) • Integráció a Visual Studiodebuggerébe: intelligens .NET adatszerkezet reflekcióés saját grafikus modul • Internetes portál (pl. versenyekhez) • Oktatási és fejlesztési segédeszközzé válás
Összefoglaló • Felmértük a jelenlegi igényeket és kínálatot az algoritmus megjelenítőkből • Elhatároztuk, hogy készítünk egy általános algoritmus megjelenítő rendszert • Ebből megvalósult a saját nyelven programozható virtuális gép, egy egyszerű grafikus csomag és egy alapszintű debugger • Célok: az eddigi tapasztalatok alapján egy komplett segédeszköz publikálása