Elosztott rendszerekre implementált funkcionális nyelvek - PRML projekt



Hasonló dokumentumok
ERLANG PROGRAMOK TRANSZFORMÁCI CIÓJA ERLANG

KLIENS-SZERVER ALAPÚ ERLANG PROGRAMOK TRANSZFORMÁCIÓJA ERLANG OTP SÉMÁRA

A D-Box koordinációs nyelv és a futtató rendszer

Nemzetközi konferencia-kiadványban megjelent lektorált cikk

2018. február 2. Referált cikkek / Papers in referred proceedings [11], [12].

Oktatási segédlet 2014

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

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

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

Programozási nyelvek (ADA)

Kifejezések. Kozsik Tamás. December 11, 2016

Adatbázis és szoftverfejlesztés elmélet

Párhuzamos programozási platformok

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

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

Java I. A Java programozási nyelv

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

Párhuzamos funkcionális programozás a D-Clean nyelvben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programok értelmezése

Elosztott rendszer architektúrák

Lekérdező nyelv bonyolultság méréséhez

2016, Funkcionális programozás

Párhuzamos programozási platformok

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely

Programozási nyelvek (ADA)

Programozás alapjai Bevezetés

FUNKCIONÁLIS PROGRAMOZÁS

Programzás I gyakorlat

Adatszerkezetek és algoritmusok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

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

AWK programozás, minták, vezérlési szerkezetek

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

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

Flex tutorial. Dévai Gergely

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

2005. évi OTKA zárójelentés: OTKA T Vezető kutató: Dr. Horváth Zoltán

alkalmazásfejlesztő környezete

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

Szkriptnyelvek. 1. UNIX shell

AWK programozás Bevezetés

Mintavételes szabályozás mikrovezérlő segítségével

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

A szoftverfejlesztés eszközei

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Podoski Péter és Zabb László

Számítógép architektúra

Az informatika alapjai. 10. elıadás. Operációs rendszer

Kifejezések. Kozsik Tamás. December 11, 2016

Grid menedzsment megoldás az ARC köztesrétegben

Kollektív tanulás milliós hálózatokban. Jelasity Márk

2017/01/27 08:59 1/6 Gettext Rendszer

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

Java I. A Java programozási nyelv

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Matematikai programok

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Java II. I A Java programozási nyelv alapelemei

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Programozás II. 2. Dr. Iványi Péter

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

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

OpenCL - The open standard for parallel programming of heterogeneous systems

Iman 3.0 szoftverdokumentáció

Python tanfolyam Python bevezető I. rész

Feldspar: Nyelv digitális jelfeldolgozáshoz

Fordítóprogramok. Aszalós László szeptember 7.

2018, Funkcionális programozás

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Internet programozása. 1. előadás

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

Matematikai programok

Ismerkedés a Python programnyelvvel. és annak micropython változatával

LabView Academy. 4. óra párhuzamos programozás

Dr. Schuster György október 30.

Erlang programok transzformációja bonyolultsági mérőszámok alapján

Operációs Rendszerek II. labor. 2. alkalom

Számítógép felépítése

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

A D-Box koordinációs nyelv és a futtató rendszer

Bevezetés. Számítógép-hálózatok. Dr. Lencse Gábor. egyetemi docens Széchenyi István Egyetem, Távközlési Tanszék

Beszédfelismerés, beszédmegértés

Bevezetés. Dr. Iványi Péter

Tájékoztató. Használható segédeszköz: számológép

C programozás. 1 óra Bevezetés

Occam 1. Készítette: Szabó Éva

Adatszerkezetek 1. Dr. Iványi Péter

A dokumentáció felépítése

List of Publications (Pánovics János)

Kommunikáció. 3. előadás

egy szisztolikus példa

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

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

Átírás:

Elosztott rendszerekre implementált funkcionális nyelvek - PRML projekt Király Roland, Hernyák Zoltán 2008. március 18. Kivonat Sok funkcionális nyelv rendelkezik telekommunikációs rendszerek fejlesztésére alkalmas nyelvi elemekkel, melyek támogatják a párhuzamos, több processzoros, vagy klaszterekre írt programok fejlesztését. mint az Erlang, és vannak, melyek inkább a gyors, nagy pontosságú számítások és adatkezelés területén nyújtanak több lehet séget, de az elosztottságot és a konkurrens rendszerek készítését nem támogatják. Ezen projekt célja egy olyan programozási nyelv megalkotása, amely nagy sebesség, nagy pontosságú matematikai számítások porgramozását teszi lehet vé egyszer, könnyen tanulható módon. A végs cél egy olyan funkcionális nyelv megalkotása, amelyen megírt programok futtathatók helyben, vagy elosztott módon egy grid rendszer számítógéphálózatban. A PRML project keretében kísérletet teszünk arra, hogy bemutassunk az általunk tervezett funkcionális nyelvet, és annak futtató rendszerét, mely támogatja a nagy pontosságú és sebesség igény számítások programozását, valamint konkurrens rendszerek fejlesztésére alkalmas. A rendszer képes számítógépek halmazát egységként (klaszter) kezelni automatikusan, vagy programozói beavatkozással. Mindezt teszi úgy, hogy a lehet legoptimálisabban kezeli a rendelkezésre álló er forrásokat. A nyelvhez jelenleg megalkottuk a nyelv szintaxisát, szintaktikai és szemantikai elemz programját. A futtató környezet implementációja folyamatos fejlesztés alatt áll. A futtató rendszerben választható, hogy.net köztes kódra alakítva a Framework 3.5-öt, vagy Erlang futtatókörnyezetet használjon az elosztottság megvalósítására. Az el adás keretében az eddigi eredményeket és ötleteket próbáljuk meg bemutatni, és megismertetni ezt a nyílt forráskódú rendszert a jöv beli, lehetséges fejleszt ivel. 1

1. PRML projekt A PRML project keretében kísérletet teszünk arra, hogy bemutassunk egy általunk tervezett funkcionális nyelvet, és annak futtató rendszerét, mely támogatja a nagy pontosságú és sebesség igény számítások gyors elvégzését és az elosztottságot, mely az el z tulajdonság szinte elengedhetetlen feltétele. A nyelv futtató rendszere képes számítógépek halmazát egységként (klaszter) kezelni úgy, hogy a lehet legoptimálisabban használja ki a rendelkezésre álló er forrásokat. A projekt keretében megterveztük a nyelv szintaxisát, melyet a kés bbiekben ismertetünk, valamint a szemantika meghatározó részét. A futtató rendszer jelenlegi verziója a CSharp nyelvre támaszkodva valósítja meg az elosztottságot, de céljaink között van a saját környezet kialakítása. A jelenlegi egyik legjobb ilyen rendszer, a Beowulf [8] mintájára, vagy ezt a rendszert felhasználva szeretnénk az elosztott rendszert és a hozzá tartozó middleware-t kidolgozni. 2. PRML nyelv 2.1. Funkcionális nyelvi jellemz k A funkcionális program típus, osztály és függvénydeníciókból és egy kezdeti kifejezésb l áll. A program végrehajtása a kezdeti kifejezés kiértékeléséb l áll, vagyis azonos a kifejezésben szerepl függvények szövegszer behelyettesítésével. A végrahjtási modell minden esetben egy átíró rendszer mely konuens, tehát a részkifejezések átírásának sorrendje nincs hatással a végeredményre. Ilyen konuens rendszer a Lamda kalkulus. A gráf átírása során a kifejezések kiértékelése és behelyettesítése lényegesen gyorsabbá tehet, ha a nagy er forrásigény kódrészeket több processzoron és memóriával, szerencsés esetben párhuzamosan tudjuk végrehajtani. Az általunk kidolgozott nyelvnek rendelkeznie kell az elosztottság támogatásával már nyelvi szinten is, valamint meg kell felelnie a funkcionális nyelveknél felsorolt alapelveknek. 2.2. A nyelv szintaxisa A PRML rendelkezik az alább felsorolt lehet ségek mindegyikével. Hivatkozási helyfüggetlenség (referential transparency). A függvények de- niálásan sorredje nincs hatással a végeredményre. Válozók csak egyszer kapnak értéket, állandók. Szigorú statikus típusosság - A típus levezet rendszer mindig meg tudja határozni a típust valamely környezetfügg nyelvtan segítségével. Megengedett a magasabb rend függvények használata. A futtatórendszer alkalmazhatja a Curry módszert - részleges függvényalkalmazást. Rekurzív függvényhívásokkal valósítja meg az iterációt. 2

Lusta és mohó kiértékelés egyaránt használható a rendszerben. A Zermelo Fraenkel halmazkifejezést tartalmazza a nyelv - lista kifejezés A nyelv nem csak az elejét l a végéig megírt programok futtatására alkalmas, hanem támogatja a lépésenkénti végrehajtást, valamint a komolyabb matematikai számítások keredményét szöveges formában is képes megjeleníteni. 2.3. Típusok a nyelvben A PRML nyelv támogatja a funkcionális nyelveknél megszokott típusok mellet a nagy pontosságú számításokhoz szükséges nagy méret valós számok használatát, valamint a szám típusokoz megadható azok pontossága. A nyelvben speciális típusok is helyet kaptak. Van saját szerkezet a processzek azonosítására és a mobil kód célbajuttatására. <tipus> ::= <alaptipus> "vector" <intkonst> "of" <tipus> vektor "{}" üres rendezett n-es "{" <tipusn> "}" rendezett n-es "[]" üres lista "[" <tipusn> "]" lista <tipusazon> <tipusn> union <tipus> "->" <tipus> fügvény "(" <tipus> ")" csoport <processid> processz azonosító "stream" [] mobil csatorna <recordid> [] rekord <alaptípus> "int" <pontossag> "bool" "char" "string" [<intkonstans>] "word" <pontossag> "float" <pontossag>... A típusok pontossága változtatható a futtatórendszerben. A lebeg pontos számítások elvégzéséhez az elosztott rendszer optimális kihasználása mellett nagy mennyiség memória vonható össze. A több processzor egyidej kihasználásával a számítási kapacitás is nagy mértékben növelhet. Az aktuálisan elvégzend számítások er forrás igényéhez mérten az er források mértéke dinamikusan növelhet, vagy csökkenthet. 2.4. Kifejezések nyelvtana A nyelv kifejezés rendszere magában foglalja a funkcionális nyelvi jellemz ket, de nem használja a monadikus input-output kezelést. A hagyományos elemek mellett megtalálható benne az üzenetküldésre, processzek közti adatfolyamok kezelésére és a mobil kód küldésére alkalmas utasítások. 3

A dinamikus és generatív kódok írására a template-ek használhatóak, valamint van lehet ség a makrók támogatása el fordító segítségével. Az el fordítás során a standard C, C++ preprocesszort kívánjuk alkalmazni, mivel ebben megvan minden szükséges tudás a PRML elemeinek el fordítására. A függvények hívása és deníciója egyaránt lehet rekurzív, vagy több klózból felépített. A több klóz esetén mindig a hívási mintára illeszked ág fut le. A rekurzió kétféle változatát kihasználva egyaránt írható iteratív és normál rekurzív program. Az alábbiakban bemutatott néhány soros program megmutatja a nyelv lehet ségeit. (az alábbi kódot a nyelv szintaktikai ellen rz je helyesnek fordította.) module test import file1; //imported files import file2; export ft,fz;//exported functions fx :: int -> int<64> //from int to int64 fx a = a + 2; tupple :: int int int-> {} //create tuple contains integers tuple x y z = {x,y,z}; add::int int -> int add x y = x + y; fb::int -> int fb a = case a of 10 -> a, 20 -> a+2, _ -> fb a end; //this section starts some expressions start= 3 + 2; start= acker 3 2; start = fx 10; start=fx 3; acker::int int -> int acker 0 j = j + 1 acker i 0 = acker (i - 1) 1 acker i j = acker (i - 1) (acker i (j - 1)); A forráskódban megtalálható függvény deníció, függvények hívása, néhány ismert függvény deníciója, valamint egyszer kifejezések változók és kommentek. 4

3. Futtató rendszer Az elosztott futtatás alapja az a rendszer, mely a számítógépes hálózatból megfelel mértékben vonja be a rendelkezésre álló számítási csomópontokat. A számítási halmaz lokális hálózatban (LAN) egymással összekapcsolt számítógépek halmaza Σ g i (klaszter). A klasztert egy központi vezérl csomópont g k irányítja, mely a számítási m veletek kiosztásáért és az eredmény feldolgozásáért felel s. Cluster = Σ g i + g k g i = CP U i, RAM i i = 1..n g k = central u A központi g k számítógép rendekezik karakteres, vagy grakus felülettel, melyet a programozó kezelhet közvetlenül, vagy egy küls számítógépre telepített alkalmazással, ahol a programjait írja és futtatja. A központi gép grakus felületen képes megmutatni a rendelkezésre álló számítási csomópontok számát, a memória méretét, a processzorok mennyiségét a gépekben, vagy összességében, valamint a terheltséget és az aktuális kihasználtságot. A számítási csomópontok valamely ismert operációs rendszert futtatják. Az operációs rendszeren fut a PRML midleware, mely egységessé és transzparensé teszi a futtató renszer számára a klasztert, és kommunikál a töbi entitással. A számítógépek szabvány kommunikációt használnak az üzenetek továbbításához, de magasabb szinten saját protokolljuk van az üzenetek feldolgozására. A központi gép egy hálózati kapcsoló segítségévelés kapcsolódik a számíási halmazhoz, valamint ez a kapcsoló biztosítja az összeköttetést a LAN számítógépei között. A klaszter felett áll a programozási nyelv futtató rendszere, mely a magasszint funkcionális nyelvet képes értelmezni, s az elosztó rendszert l független l alkalmazni az abban leírt utasításokat. A programozó közvetlenül beavatkozhat az elosztottság kezelésébe, vagyis utasításokat adhat a rendszer konkurrens részének, de írhat úgy is programot, hogy az alsóbb rétegekre bízza az er források bevonását, vagy gyelmen kívül hagyását. 3.1. Köztes kód A PRML nyelv jelenlegi verziójában a magasszint funkcionális nyelvet.net [9] kódra, vagy Erlang [4] kódra tudjuk konvertálni, majd az említett nyelvek futtató rendszerének lehet ségeit kihasználva hajtjuk végre a rogramokat. Az elosztottság megvalósítását végz middleware hiányzik, valamint a gráfátíró rendszer is csak részben kidolgozott, vagyis jelenleg nem futtatható. A szintaktikai ellen rz program a kész kódot közvetlen l normál CSharp kódra, CSharp IL kóra vagy Erlang kódra konvertálja, majd meghívva az adott nyelv futtatóját el állítja és futtatja a kész programot. 5

Ebben az állapotában a nyelv tesztelhet, de a hatékonysága csak részben és nem pontosan mérhet, viszont megmutatja a nyelv lehet ségeit és ötletek ad a továbfejlesztéshez. 3.2. Parser és lexer A nyelvtani ellen rz program szabvány LALR(1). A nyelvtanból generálódik a lexikális elemz, vagyis a nyelvi elemek leírásának megváltoztatását a lexikális és a szintaktikus elemz képes követni. A szintaktikát XML, vagy egyéb jól strukturált sémájú fájlba tárolhatjuk. Az elemz k a fájlban tárolt szintaxis alapján újra és újra legenerálhatóak, így elég csak a nyelvtani leírást megváltoztatni és újrageneráltatni az elemz ket a nyelv változásainak követésére. A szemantikus ellen rz több apró programból áll, a programokat egy konténer fogja össze, és mindíg azokat az elemz programokat futtatja csak le, amelyek a lefordítandó fájlban alkalmazott nyelvtani formulák elemzéséhez szükségesek. Ez az eljárás más rendszerekben is el fordul. Ilyen módon épül fel egyes refaktoring eszközök elemz je, mint a RefactorErl [3] [6] [7], valamint az összes Lex, Yacc, Bison, Yecc, Leex és egyéb parser generátorokkal el állított elemz k. Ezeknek a rendszereknek a nagy el nye az, hogy minden változtatás, ami a nyelvet érinti könnyen korrigálható az újrafordítás során. 3.3. A framework A teljes rendszer tehát több szintb l áll, melyek független l cserélhet ek, átalakíthatóak, így alkalmazkodóvá teszik a nyelvet. Az konkurrens rész dinamikusan fel tudja használni a több processzor és memória nyújtotta lehet ségeket úgy, hogy mindezt elfedi a programozó el l. A teljes rendszer dinamikus és bármely pontján megváltoztatható, így könnyen fejleszthet. 4. Párhuzamos munkák A funkcionális nyelvek világában találhatók hasonló elemz és fordító-futtató rendszerek, melyek sok esetben jobban és hatékonyabban valósítják meg az itt bemutatottakat. A matematikai számítások terén nyújt támogatást, a konkurrencia megvalósításában az Erlang [4], az IO kezelésében a Clean kiemelked. Vannak a generikusok használatát támogató funkcionális nyelvek, és a párhuzamosságot támogató rendszerek is, mint a Distributed Clean [2], vagy a Hume [1]. A PRML projekt kutatási célokkal készül lehet séget adva feljeszt knek és kutatókak egyaránt, hogy nem éles ipari, de ellen rzött környezetben próbálhassák ki ötleteiket, programjaikat és tudásukat. A feljesztés teljes mértékben nyitott, minden használható kifejlesztett, vagy fejlesztés alatt álló komponens beépítésre kerülhet a résztvev k és a projekt vezet inek jóváhagyása mellett. 6

Hivatkozások [1] Gudmund Grov, Robert Pointon, Greg Michaelson, and Andrew Ireland. Coordination Models, Languages and Applications Track of the 23rd Annual ACM Symposium on Applied Computing, 2008. To appear. [2] ZSÓK VIKTÓRIA, HERNYÁK ZOLTÁN, HORVÁTH ZOLTÁN Designing Distributed Computational Skeletons in D-Clean and D-Box, in.: Lecture Notes in Computer Science, Horváth Zoltán(ed.) in.: Central European Functional Programming School (The First Central European Summer School, CEFP 2005, Budapest, Hungary, July 4-15, 2005), Revised Selected Lectures., ISSN 0302-9743 [3] Microsoft http://plc.inf.elte.hu/erlang [4] Erlang http://www.erlang.org [5] PORKOLÁB ZOLTÁN, KIRÁLY ROLAND, KURTI ILIR Supporting Generic Programming in CORBA IDL, in.: Proceedings of the 7th International Conference on Applied Informatics (ICAI) [6] HORVáTH ZOLTáN, LöVEI LáSZLó, KOZSIK TAMáS, VíG ANIKó, NAGY TAMáS Refactoring Erlang Programs. Abstract, in.: Conference of PhD Students in Computer Science, CSCS 2006, Volume of extended abstracts [7] LöVEI LáSZLó, HORVáTH ZOLTáN, KOZSIK TAMáS, KIRáLY RO- LAND, VíG ANIKó, NAGY TAMáS Refactoring in Erlang, a Dynamic Functional Language, Dig Danny, Cebulla Michael(ed.) in.: Proc. of 1st Workshop on Refactoring Tools (WRT'07), ECOOP 2007, ISSN 1436-9915 [8] Beowulf project http://www.debian.org/ports/beowulf/ [9] msdn.microsoft.com/netframework/ 7