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



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

Podoski Péter és Zabb László

Objektumorientált paradigma és a programfejlesztés

Programozási nyelvek (ADA)

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

Objektumorientált paradigma és programfejlesztés Bevezető

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

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Adatszerkezetek 2. Dr. Iványi Péter

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

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

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

FUNKCIONÁLIS PROGRAMOZÁS

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

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

A számítógépes feladatok a várt megoldáshoz egyértelmű utalásokat tartalmazzanak.

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

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

Programozás alapjai II. (7. ea) C++

10-es Kurzus. OMT modellek és diagramok OMT metodológia. OMT (Object Modelling Technique)

Információtartalom vázlata

OOP. Alapelvek Elek Tibor

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

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

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

Már megismert fogalmak áttekintése

Térinformatikai algoritmusok Elemi algoritmusok

INFORMATIKAI ALAPISMERETEK

Parametrikus tervezés

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Operációs rendszerek II. Folyamatok ütemezése

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Programozási nyelvek Java

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

Tájékoztató. Használható segédeszköz: -

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Egyetemi könyvtári nyilvántartó rendszer

Tartalomjegyzék. Előszó... 10

Rekurzió. Dr. Iványi Péter

INFORMATIKAI ALAPISMERETEK

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Programozási nyelvek Java

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

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

ContractTray program Leírás

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

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)

Egyetemi könyvtári nyilvántartó rendszer

Programozási technológia

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Objektum orientált programozás Bevezetés

ServiceTray program Leírás

Bevezetés a párhuzamos programozási koncepciókba

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

Szoftverfejlesztő képzés tematika oktatott modulok

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

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

DebitTray program Leírás

Programozás módszertan p.1/46

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozási Technológia előadás bevezetés. Előadó: Lengyel Zsolt

Adatbázis rendszerek. 4. előadás Redundancia, normalizálás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

2016, Funkcionális programozás

Verifikáció és validáció Általános bevezető

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

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

Programozás alapjai. 10. előadás

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Clang Static Analyzer belülről

Summer of LabVIEW The Sunny Side of System Design

Java és web programozás

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Adatbázis rendszerek. dr. Siki Zoltán

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Adatbáziskezelés. Indexek, normalizálás NZS 1

Mesterséges intelligencia alapú regressziós tesztelés

Operációs rendszerek. Az NT folyamatok kezelése

Gyakorlati vizsgatevékenység B

Generikus osztályok, gyűjtemények és algoritmusok

A C programozási nyelv II. Utasítások. A függvény.

Tartalommenedzser képzés tematika oktatott modulok

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Inczédy György Középiskola, Szakiskola és Kollégium Nyíregyháza, Árok u. 53. TANMENET. Informatika szakmacsoport

SCILAB programcsomag segítségével


Az adatbázisrendszerek világa

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Számítógépes döntéstámogatás. Genetikus algoritmusok

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Átírás:

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba Témavezető: Horváth Zoltán és Simon Thompson OTDK 2007, Miskolc Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 1 / 19

Paraméterek összevonása tuple-ba Egy kétmodulos példa (swap függvény paramétereinek összevonása) Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 2 / 19

Erlang Az Erlang nyelv Az Ericsson által kifejlesztett és jelenleg is nagy telekommunikációs szoftverrendszerek fejlesztésére használt funkcionális programozási nyelv. A változók csak egyszer kapnak értéket életük során Nincs statikus típusrendszere, a változók bármilyen típusú értéket kaphatnak Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 3 / 19

Erlang Az Erlang nyelv Egy új kiértékelő szál (processz) indítása nem igényel sokkal több erőforrást, mint egy függvényhívás A függvénynevek atomok, amelyek akár futási időben is generálhatók (kaphatnak értéket) Dinamikusan létrehozott kódrészletek is futtathatók (lecserélhető modulok futás közben) Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 4 / 19

Refaktorálás Refaktorálás definíciója, felhasználási területei A refaktorálás olyan program-transzformációk gyűjtőneve, amelyek nem változtatják meg a program viselkedését. A refaktorálás célja: a kód átszerkesztése, minőségének javítása, optimalizálása Felhasználási területei: széleskörű, mindennapos programozói feladatok (átnevezések, kód újrafelhasználás, kódolási konvenciókhoz igazítás) Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 5 / 19

Refaktorálás Refaktoráló eszköz Miért lényeges egy eszköz használata? Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 6 / 19

Refaktorálás Refaktoráló eszköz Miért lényeges egy eszköz használata? Kézzel lassú és fárasztó a végrehajtás, ráadásul rengeteg a hibalehetőség Géppel gyors és biztonságos Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 6 / 19

Refaktorálás Refaktoráló eszköz Miért lényeges egy eszköz használata? Kézzel lassú és fárasztó a végrehajtás, ráadásul rengeteg a hibalehetőség Géppel gyors és biztonságos Az objektumorientált nyelvekben már régóta használnak refaktor eszközöket (pl. Java és C++) Funkcionális programokhoz eddig csak a HaRe (Haskell) állt rendelkezésre. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 6 / 19

Refaktorálás Refaktor lépések Erlangban Átnevezések: függvény, változó, modul Függvényparaméterek átrendezése, csoportosítása (tuple-be vonása), egy változó kiemelése paraméterbe Függvények általánosítása, összevonása, specializációja Azonos részkifejezések kiemelése változóba, függvénybe Adatszerkezetek módosítása Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 7 / 19

Refaktorálás Refaktor lépések Erlangban Átnevezések: függvény, változó, modul Függvényparaméterek átrendezése, csoportosítása (tuple-be vonása), egy változó kiemelése paraméterbe Függvények általánosítása, összevonása, specializációja Azonos részkifejezések kiemelése változóba, függvénybe Adatszerkezetek módosítása A nyelv sajátosságai miatt a statikusan típusos és az objektumorientált nyelvektől is lényegesen eltérő, új elemzési módszerek szükségesek. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 7 / 19

Programszöveg és szintaxisfa A kód és a megfelelő szintaxisfa az azonosítókkal Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 8 / 19

Programszöveg és szintaxisfa A kód és a megfelelő szintaxisfa az azonosítókkal Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 8 / 19

Szintaktikus információk A szintaktikus információk tárolása az adatbázisban Az absztrakt szintaxisfa (AST) szinte minden lehetséges szintaktikus kategóriájához létrehoztunk egy-egy táblát. A fa minden eleméhez rendelünk egy egyedi azonosító. Minden modul is kap egy egyedi modul-azonosítót. A táblák sorai tartalmazzák az adott egyed azonosítóit és gyerekeinek azonosítóit. A pozíciók, szintaktikus kategóriák és nevek tárolására bevezettünk egy-egy külön táblát a keresések sebességének növelésére. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 9 / 19

Szemantikus információk A szemantikus információk tárolása az adatbázisban Azonos egyedhez tartozó előfordulások tárolása: egy-egy tábla tartalmazza a változók és függvények előfordulásait. A hatókör-tábla tárolja azt a legbelső hatókört, amiben az adott elem van. Egy külön tábla tárolja a hatókörök hierarchiáját. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 10 / 19

Paraméterek összevonása tuple-ba A refaktor lépés definíciója, paraméterei A refaktor-lépés a felhasználó által mutatott függvényparamétertől kezdve a megadott számú paramétert összevonja egy tuple-ba. A lépés nem csak a konkrét függvény előfordulást érinti, hanem az összes hívását és definícióját is esetleg több modult módosítva. Ha a tuple választott hossza nagyobb 1-nél, akkor a függvény paraméterszáma is megváltozik. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 11 / 19

Elöfeltételek A lépés előfeltételei Az megadott pozíción a függvény formális paramétere legyen Nem lehet függvénykifejezés (fun... end) Az összevonandó paraméterek száma nem lehet több a hátralévő paraméterek számánál A megváltozó paraméterszám nem okozhat ütközést Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 12 / 19

Implicit függvény Egy példa -module(branch3). -export([calls/0]). branches(first, A, _B) -> A; branches(second, _A, B) -> B; branches(head, [A _], [B _]) -> {A, B}. calls() -> {branches(head, [1,2], [3,4]), apply(fun branches/3, [first, 1, 2]) }. -module(branch3). -export([calls/0]). branches(first, {A, _B}) -> A; branches(second, {_A, B}) -> B; branches(head, {[A _], [B _]}) -> {A, B}. calls() -> { branches(head, {[1,2], [3,4]}), apply(fun (P1,P2,P3) -> branches(p1,{p2,p3}) end, [first, 1, 2]) }. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 13 / 19

Implicit függvény Egy példa -module(branch3). -export([calls/0]). branches(first, A, _B) -> A; branches(second, _A, B) -> B; branches(head, [A _], [B _]) -> {A, B}. calls() -> {branches(head, [1,2], [3,4]), apply(fun branches/3, [first, 1, 2]) }. -module(branch3). -export([calls/0]). branches(first, {A, _B}) -> A; branches(second, {_A, B}) -> B; branches(head, {[A _], [B _]}) -> {A, B}. calls() -> { branches(head, {[1,2], [3,4]}), apply(fun (P1,P2,P3) -> branches(p1,{p2,p3}) end, [first, 1, 2]) }. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 14 / 19

Implicit függvény Egy példa -module(branch3). -export([calls/0]). branches(first, A, _B) -> A; branches(second, _A, B) -> B; branches(head, [A _], [B _]) -> {A, B}. calls() -> {branches(head, [1,2], [3,4]), apply(fun branches/3, [first, 1, 2]) }. -module(branch3). -export([calls/0]). branches(first, {A, _B}) -> A; branches(second, {_A, B}) -> B; branches(head, {[A _], [B _]}) -> {A, B}. calls() -> { branches(head, {[1,2], [3,4]}), apply(fun (P1,P2,P3) -> branches(p1,{p2,p3}) end, [first, 1, 2]) }. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 15 / 19

Implicit függvény Egy példa -module(branch3). -export([calls/0]). branches(first, A, _B) -> A; branches(second, _A, B) -> B; branches(head, [A _], [B _]) -> {A, B}. calls() -> {branches(head, [1,2], [3,4]), apply(fun branches/3, [first, 1, 2]) }. -module(branch3). -export([calls/0]). branches(first, {A, _B}) -> A; branches(second, {_A, B}) -> B; branches(head, {[A _], [B _]}) -> {A, B}. calls() -> { branches(head, {[1,2], [3,4]}), apply(fun (P1,P2,P3) -> branches(p1,{p2,p3}) end, [first, 1, 2]) }. Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 16 / 19

A tool szerkezete A refaktoráló eszköz Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 17 / 19

A tool szerkezete A refaktoráló eszköz Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 17 / 19

Nyelvek Alkalmazott programozási nyelvek ELisp: az Emacs menü szerkezetéhez, felhasználói üzenetek, kommunikáció kezeléséhez Erlang: a refaktor lépések, adatbázis-struktúra kezelése SQL: kommunikáció az adatbázis felé ODBC-n keresztül Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 18 / 19

Elért eredményeink 1 Az eszköz keretrendszerének megvalósítása 2 Az AST és a statikus-szemantikus információk adatbázisban tárolásának megtervezése 3 A kód tárolásának és megjelenítésének megvalósítása Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 19 / 19

Elért eredményeink 1 Az eszköz keretrendszerének megvalósítása 2 Az AST és a statikus-szemantikus információk adatbázisban tárolásának megtervezése 3 A kód tárolásának és megjelenítésének megvalósítása 4 A projektmunka keretében elemzett refaktor lépések feltételeinek megfelelően az algoritmusok megtervezése 5 A refaktor lépések lekódolása Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 19 / 19

Elért eredményeink 1 Az eszköz keretrendszerének megvalósítása 2 Az AST és a statikus-szemantikus információk adatbázisban tárolásának megtervezése 3 A kód tárolásának és megjelenítésének megvalósítása 4 A projektmunka keretében elemzett refaktor lépések feltételeinek megfelelően az algoritmusok megtervezése 5 A refaktor lépések lekódolása 6 Az elemzés során készített tesztesetek (kb. 300 db) mindegyikének lefuttatása, a kapott eredmények helyességének ellenőrzése 7 Az eszköz tesztelése egy iparból kapott nagyobb kódbázison Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 19 / 19

Elért eredményeink 1 Az eszköz keretrendszerének megvalósítása 2 Az AST és a statikus-szemantikus információk adatbázisban tárolásának megtervezése 3 A kód tárolásának és megjelenítésének megvalósítása 4 A projektmunka keretében elemzett refaktor lépések feltételeinek megfelelően az algoritmusok megtervezése 5 A refaktor lépések lekódolása 6 Az elemzés során készített tesztesetek (kb. 300 db) mindegyikének lefuttatása, a kapott eredmények helyességének ellenőrzése 7 Az eszköz tesztelése egy iparból kapott nagyobb kódbázison 8 A teljes eszköz jelenleg 5 refaktor lépést tartalmaz 9 A kód jelenleg 10 000 Erlang sor, ami C kódra átszámítva ennek többszörösét jelenti Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK 2007, Miskolc 19 / 19