Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Domain-specifikus nyelvek Németh Boldizsár Németh Boldizsár - 2013. 04. 06."— Előadás másolata:

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

2 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

3 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"

4 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

5 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,

6 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

7 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

8 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

9 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

10 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

11 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)); }}

12 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

13 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) }

14 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

15 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

16 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)

17 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


Letölteni ppt "Domain-specifikus nyelvek Németh Boldizsár Németh Boldizsár - 2013. 04. 06."

Hasonló előadás


Google Hirdetések