1 / 25

Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz

Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz. Legéndi Richárd Olivér legendi@inf.elte.hu diplomavédés 2009. január 27. Mi is a Fables?. Alapvetően egy funkcionális nyelv: Funkcionális paradigmák: változók, konstansok, relációk definiálására

farica
Download Presentation

Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FablesFunkcionális programozási nyelvágens-alapú szimulációkhoz Legéndi Richárd Olivér legendi@inf.elte.hu diplomavédés 2009. január 27.

  2. Mi is a Fables? • Alapvetően egy funkcionális nyelv: • Funkcionális paradigmák:változók, konstansok, relációk definiálására • Objektum elvűség:ágensek definiálása osztályokkal • Imperatív nyelvi elemek az események leírására • Egyszerű, tömör, engedékeny szintaxis – erre törekedtünk • Típusnélküliség

  3. Példa • model Példa { • var x := "String"; • konstans = 5; • függvény(x) = 2*x; • class Ágens { • var id; • } • startUp { • new Agent[id:=0]; • } • }

  4. Miért kellett egy új nyelv? • A szimulációk eddigi eszközei: • Swarm (1996): az első szimulációs csomag, kísérleti jelleggel • MAML (1999): az első szimulációs nyelv, a Swarmra épül • RePast (2001): Javas szimulációs csomag (API) • A problémák: • Elég bonyolultak • Komoly programozói tapasztalatot igényel a használatuk(pl. OO szemlélet, GUI programozás, stb.) • … • Elsődleges felhasználói réteg:szociológusok, társadalomkutatók, közgazdászok, …

  5. Cél • Egy olyan nyelv létrehozása, amely: • Egyszerű, minimális programozói tapasztalatot feltételez • Nyelvi szinten támogatja ágens-alapú szimulációk létrehozását, irányítását és megfigyelését • Szintaxisa tükrözi a tudományos cikkekben használt formalizmust

  6. Funkcionális paradigmák • Változók,konstansok • Függvények,Lokális definíciók,Elágazások • Felsorolási,intervallum és halmaz típusok var x; méret = 100; randomBit = discreteUniform( 0, 1 ); között(x, y, z) = x < y < z; signum(a) = a<0 => -1 | a == 0 => 0 otherwise 1; négyzetszámok = { x^2 : x is[-10..10]};

  7. Imperatív paradigmák • Inicializálás: • seed() beállítása • Paraméterek • Ágensek létrehozása • Ütemezők: • Bárhol definiálhatóak • Ciklikus / nem ciklikus • Nevesített: dinamikusan létrehozható/törölhető startUp (ágensek) { seed(0); printLn( "Inicializálás..." ); [ newÁgens[ money := 0 ] : _ is [1.. ágensek] ]; } scheduleFőÜtemezőcyclic 10 { 1 : printLn("1, 11, 21, ...") ; 2 : printLn("2, 12, 22, ...") ; } névListázás = for each a in Ágens do printLn ( a.név ) ;

  8. Példa modell // Vándorló hangyák: ~15 sor kód model Ants { antNum = 100; worldSize = 100; norm (x) = x mod worldSize; class Ant { var pos; move(x) = pos := norm( pos + x ); schedule Stepper cyclic 1 { 1:move(discreteUniform(-1,0,1)); } } antsAt = [ a.pos : a is Ant ]; startUp { seed(1984); [ new Ant[ pos:=worldSize/2 ] : i is [1..antNum] ]; } }

  9. Az eredmény

  10. A nagyobb részfeladatok • Értelmezés: • szintaktikai ellenőrzések • szintaxisfa felhúzása • Típusozás • minden kifejezésre, változóra • [Charting Wizard] • a lehetséges adatforrások megadása • Kódgenerálás, Optimalizáció • modell, GUI, tényleges producerek

  11. Működés Forrásállományok Result IME Eclipse Fables forrás Java importok Chart leírók Hibalista Modell GUI kód Dokumentációk … Compiler

  12. A Compiler Java importok Lexer Szintaktikus Elemző Precompiler Fables forrás Transformator Típusozó Generált források Informator CP Kódgenerátor

  13. Hibajelzés Lexer Szintaktikus Elemző Precompiler Típusozó Transformator Informator Kódgenerátor

  14. A Compiler Java importok Lexer Szintaktikus Elemző Precompiler Fables forrás Transformator Típusozó Generált források Informator CP Kódgenerátor

  15. Dokumentáció generálás Lexer Szintaktikus Elemző Precompiler Fables forrás Típusozó Generált doksik Kódgenerátor

  16. Architektúra • IME  Fordító • Fordító: • Értelmező: source  tokenek, szintakszisfa • Előfordító: szintakszisfa  reprezentációs fa • Transformator: reprezentációs fán apróbb változtatások • Típusozó: felcímkézi a fát a típusinformációkkal • Fordító   Charting PackageÚj chart létrehozása, meglévő editálásaModel informátor: reprezentációs fa  chartok • Compiler: reprezentációs objektumok  kódobjektumok kódobjektumok  generált forrás (Közben optimalizáció) • A fordító a végén visszaad egy eredmény objektumot • Hiba és figyelmeztetési listák • Generált forráskódok

  17. Értelmezők • JavaCC által generált parser: • Nyelvtan leírás (EBNF)  JavaCC  Parser • Grammar.jjt • Globálisan LL-1 nyelvtan • Lokálisan LL-2 • AST objektumok ezekből áll össze a szintaxisfa

  18. Előfordító • A szintaxisfa alapján felépítünk egy saját reprezentációt a modell köré. • Bejárjuk az egész fát, ez alapján építkezünk. • Az eredmény nem egy fa lesz, hanem egy a modellt reprezentáló objektum. • A továbbiakban ezen az objektumon dolgozunk.

  19. Transzformációk • Apróbb beállítások a modellen, amik feltételezik annak teljességét • Mi legyen konstans, változó ill. függvény? Fablesben definiált konstans nem feltétlen az, sőt!Pl.: random = uniform(0,1);Függőségi halmazok alapján: • Ha értéke fordításnál meghatározható => konstans • Ha paramétertől függ => inicializálandó változó • Ha pl. véletlentől függ => változó • Ha olyan konstanstól függ • Lokális változók felcímkézése • …

  20. Típusozás I • Az alapötlet: minden típust kideríthetünk az értékadásokból • Konstansok típusa adott (x=5) • Minden változónak csak 1 típusa lehet, azt az értékadásokból derítjük ki (y:=x) • Beépített függvényeknél a típust a paraméterek típusainak ismeretében ki lehet deríteni (z = 2+ 3*x) • Ezek alapján a felhasználói függvények típusai meghatározhatóak rekurzívan ( f(u) = u + 2*z )

  21. Típusozás II • Ha még nem ismerjük a paraméterek típusát? • Iteratív feldolgozás • Konverziók • x := 5; x:=2.1 – double vagy int? => double upcast • nem castolható eredmények  TypeMismatch • Mi legyen, ha ugyan az a függvény más-más típusú argumentumokkal szerepel? • Függvénycsaládok generálása pl. f(1);…;f(0.5) => int f(int), double f(double) • Értékadás szerű függvények? • Pl. union() halmazokra, mátrix (i,j)-edik elemének beállítása, stb.

  22. Optimalizáció I • Függvényekben új lokális konstansok bevezetése • Olyan függvényhívásokra, aminek a függőségei nem változnak a két kódrészlet között • Inverz relációk számolása • Adott tulajdonságú ágenseket nem iterálva, hanem hasheléssel keressük meg • { a is Agent when a.member == f(x) } => hashset.get(f(x)) • { a.member : a is Agent … } => keySet() használatával • Ahol lehet, natív tömbhasználat • Vectorok, Set-ek helyett • Nem mindig lehet, függhet a véletlentől, állapotváltozásoktól az iteráció

  23. Optimalizáció II • Programinverzió • A felesleges közbülső adatszerkezetek eliminálása • Kis ellentmondás: olvasható kód generálása • Haladó felhasználóknak fontos! • Emiatt nem helyettesítjük a konstansokat az értékükkel, nem vonjuk össze a kiértékelhető értékeket, stb.

  24. Segédeszközök • Dokumentáció generátló ezsközök • Modellből egy cikk vázlata • Nagyban hasonlít pl. a javadoc-ra • Dokumentációs comment: ”/**” ill. ”*/” • Több formátum: • HTML, PDF, RTF, LaTeX forrás • Saját Eclipse-alapú fejlesztőkörnyezet • RePasttól független megjelenítő csomag: • Egyszerűbb, független • A GUI generálása egy leírófájl alapján történik, amit a Charting Package generál le

  25. Összefoglalás • Funkcionális nyelv, tömör szintaxis • Típusok nélkül dolgozunk • Hasznos eszközkészlettel rendelkezik • Köszönöm a figyelmet!

More Related