Domain-specifikus nyelvek Németh Boldizsár Németh Boldizsár - 2013. 04. 06.

Slides:



Advertisements
Hasonló előadás
Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 5.5. Model Based Architecture módszerek BelAmI_H Spring.
Advertisements

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Az integrált áramkörök (IC-k) tervezése
SB ScriptBasic Általános Architektúra Peter Verhás Február 2002.
3. A programozás eszközei, programozás-technikai alapismeretek
Funkcionális programozás F#-ban
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
Objective-C Készítette: Zsivics Sanel NL5LWN. Tartalom bevezető történeti háttér rangsor elterjedtsége / népszerűsége alapok felépítése (.h,.m, xcode,
RAM és ROM Mind RAM, mind ROM beépíthető ASIC vagy FPGA/EPLD tervbe Mind RAM, mind ROM beépíthető ASIC vagy FPGA/EPLD tervbe A következőkben a szükséges.
Adatbányászati technikák (VISZM185)
Domain tesztelés bemutatása PHP tesztelés
Generatív programozás
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Bevezetés a Java programozásba
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
Java Típuskonverziók.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1.5 Programozó matematikus szak 2003/2004-es tanév II. félév.
VFP programozása report készítése menü készítése dinamikus elemek
2012. március 7. Paulik Áron Prog szakkör.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Szombathely Dinamikus WEB programozás: PHP és JSP.
ANY u WHERE u : seq(MININT..MAXINT) & size(u) = size(s) & #f.(f : 1..size(s) >->> 1..size(s) & !j.(j : 1..size(s) => s(f(j)) = u(j))) & !i.(i : 1..size(s)-1.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Lénárt Anett egyetemi adjunktus - PTE PMMK Rendszer- és Szoftvertechnológia Tanszék Előadás JavaScript Tananyag: W eb - programozás.
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Adatbázis adminisztrátori ismeretek
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
PHP nyelv. PHP Interpreteres nyelv → parancsértelmező szükséges hozzá Rasmus Lerdorf 1995 → személyes felhasználás (internetes önéletrajzának megtekintésének.
Programozási nyelvek.
Készítette: Tóth Ervin
CSS A CSS bemutatása.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
SQL.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
A gyakorlatok munkakörnyezete
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Egyenesvonalú (lineáris) adatszerkezetek
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Podoski Péter és Zabb László. 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.
5. gyakorlat Fleiner Rita.
A C++ nyelv.
Webprogramozó tanfolyam
A Visual Basic nyelvi elemei
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Java web programozás 7-8..
2. Operációs rendszerek.
Lekérdezések feldolgozása és optimalizálása. Haladó adatbázisokLekérdezések feldolgozása és optimalizálása2 Definíciók Lekérdezés feldolgozása –lekérdezés.
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Adatstruktúrák Algoritmusok Objektumok
Haladó Fordítóprogramok
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Clang tooling.
Előadás másolata:

Domain-specifikus nyelvek Németh Boldizsár Németh Boldizsár

Mi a DSL? Domain Specific Language Cél: egy adott tárgykör problémáit a lehető legkönnyebben lehessen megoldani Mire képes: Absztrakciós szint A tárgykör jelölésrendszere Kifejezőképesség Megszorítások Németh Boldizsár

DSL példák Németh Boldizsár CREATE TABLE STATION (ID INTEGER PRIMARY KEY, CITY CHAR(20), STATE CHAR(2), LAT_N REAL, LONG_W REAL); h1 { color: white; background-color: darkgray; padding: 5px; margin: -10px; } IDIR =../include CC=gcc CFLAGS=-I$(IDIR) entity example is port( a: in std_logic; clock: in std_logic; reset: in std_logic; x: out std_logic ); end example; while [ $n -gt 0 ] do sd=`expr $n % 10` rev=`expr $rev \* 10 + $sd` n=`expr $n / 10` done echo "$rev"

GPL vs. DSL GPLDSL TárgyterületNagy és nyitottJól meghatározott Turing-teljességMindigLehet, hogy nem Felhasználói absztrakciók KifinomultKorlátozott ÉlettartamÉvek-évtizedekHónapok-évek KidolgozzaGuru, vagy bizottságNéhány fejlesztő és szakértő Felhasználói rétegKiterjedt, anonimKicsi, elérhető FejlődésLassú, standardizáltLendületes Visszamenőleges kompatibilitás NélkülözhetetlenNem elengedhetetlen Németh Boldizsár

Egy példa state idle actions {unlockDoor lockPanel} doorClosed => active end state active drawOpened => waitingForLight lightOn => waitingForDraw end state waitingForLight lightOn => unlockedPanel end state waitingForDraw drawOpened => unlockedPanel end state unlockedPanel actions {unlockPanel lockDoor} panelClosed => idle end,

DSL-ek felhasználása Eszköz-szintű DSL (pl: make) Architektúra DSL Technikai DSL Alkalmazási terület DSL Németh Boldizsár

Beágyazott vs. Külső Beágyazott Egy gazdanyelvbe kerül beágyazásra Szükség van a gazdanyelv fordítási környezetére Külső El kell készíteni egy teljes fordító rendszert Nagyobb szabadságot kapunk a szintaxis kidolgozásában Németh Boldizsár

Sekély és mély beágyazás Sekély A DSL csak egy absztrakciós függvényréteg Nem kell a változókkal, láthatósággal bajlódni Mély Adatstruktúra: DSL program Lefordítjuk vagy végrehajtjuk Át lehet írni a programok szerkezetét Németh Boldizsár

Fordítás és végrehajtás Fordítás Általános célú nyelvre vagy közvetlenül gép-közeli kódra Több nyelvre is, több lépcsős Könnyebb kezelni, vizsgálni a generált kódot A generált kód fordítójának is lehetnek optimalizálásai Végrehajtás Egyszeri végrehajtásra gyorsabb Futtatási időben is lehet változtatásokat végezni Németh Boldizsár

Részleges DSL-ek A program egyes részeit egy másik nyelven kell írni Csak a fontos, eltérő absztrakciót kívánó részeket fejezzük ki a saját nyelvünkön Németh Boldizsár

Java Fluent interface, builder Németh Boldizsár from("file:src/data?noop=true").choice().when(xpath("/person/city = 'London'")).to("file:target/messages/uk").otherwise().to("file:target/messages/others"); Container class public class BuyerTest extends MockObjectTestCase { void testAcceptsOfferIfLowPrice() { offer = mock(Offer.class); offer.expects(once()).method(“buy”).with(eq(QUANTITY)).will(returnValue(receipt)); }}

Haskell Tömör szintaxis Németh Boldizsár circ1 a b c = out where out = xor2 aux1 c aux1 = and2 (inv a) b Nagy kifejezőerejű típusrendszer, operátorok expr :: Expr expr = 4 + 3*2 > Plus (Lit 4) (Times (Lit 3) (Lit 2)) expr’ :: Int expr’ = 4 + 3*2 > 10

Scala Syntactic sugar, implicit coversions Németh Boldizsár new Order to sell(200 bondsOf "Sun") maxUnitPrice 300 using { (qty, unit) => qty * unit } Parser combinators lazy val whileStmt = ("while" ~> "(" ~> exp <~ ")") ~ stmt ^^ { case e ~ b => While (e, b) }

Miller Németh Boldizsár Típusellenőrzés Konfiguráció Kód generálás Imperatív frontend Parsolás Transzformáció Embedded code Forráskód Simple frontend Flow frontend Embedding interface

Nyelvi elemek Utasítások, kifejezések: mély beágyazás Buborékok és interfészek: mély beágyazás Konfigurációk: sekély beágyazás Környezetleírás: kezdettől fogva külső DSL Németh Boldizsár

Assembly beágyazás Haskell-be ágyazott assembly nyelvek Megkönnyítik a generálást és a későbbi átalakításokat Annotációk a generált kódban Németh Boldizsár small_3 = do add (r 1) (r 2) (r 3) add (r 1) (r 4) (r 5) lw (r 1) 0 (r 10) sub (r 6) (r 6) (r 7) add (r 1) (r 1) (r 6) sub (r 1) (r 1) (r 7) sw (r 8) 0 (r 1) compile small_3 > add $1,$2,$3 add $1,$4,$5 lw $1,0($10) sub $6,$6,$7 add $1,$1,$6 sub $1,$1,$7 sw $8,0($1)

Köszönöm a figyelmet! Markus Voelter: DSL Engeneering Martin Fowler: Introduction to Domain Specific Languages DSL Szoftvertechnológia labor (érdeklődni: Dévai Gergelynél) Németh Boldizsár