Examples of DSLs include spreadsheet macros, YACC grammars for creating parsers, regular expressions, Generic Eclipse Modeling System for creating diagramming languages, Csound, a language used to create audio files, and GraphViz, a language used to define and create visual representations for directed graphs.Podstatné je, že vyšší jazyk (DSL) řeší jen jednu věc a ostatní funkcionalitu z nižšího jazyka ztrácí. Je to daň za lepší srozumitelnost a kratší zápis. Já bych DSL definoval jako jednoúčelový jazyk:
DSLs focus on doing one kind of task well. For instance, GraphViz is designed to create images of graphs in a variety of formats, but GraphViz lacks the capability to perform some basic tasks, e.g., accessing a network socket, receiving additional user input, or manipulating strings.Po pravdě řečeno, úvod na Wikipedii (do obsahu) mi přijde mnohem srozumitelnější než tento článek na Rootu.
Na druhou stranu DSL jsou jednoucelovy, na miru konkretnimu modelovanymu problemu. Semantika je timpadem implicitni a nemusi se dodatecne vysvetlovat. Na druhou stranu se oak clovek musi ucit miliardu ruznejch jazyku a hlavne musi resit, jak modely/kod v ruznejch jednoucelovejch jazycich vzajemne propojit, aby mu to vubec nejak pomohlo pri praci - to obvykle resi transformace pomoci QVT.Tak tak. XML je mozna ukecany (pak ale nechapu lidi, co nadavaji, ze je to clovekem spatne editovatelna vec), ale i kdyz jsou tuny ruznych XML dialektu, tak porad vim, ze je to XML a ze muzu pouzit XSLT, XPath a dalsi...
Napsání skromnějšího interního DSL přitom je práce na několik málo hodin. A co vy, zkoušeli jste si již také nějaký DSL napsat?Ano, zkouseli. Nekolik. Nekolik se dokonce stale pouziva :-) Ale neni to tak snadne, jak autor pise. Vytvorit interpret DSL pro nejaky jednoduchy jazyk, kde si uzivatele mohou psat jednoduche skriptiky je snadne - parser pomoci bisonu/javacc/antlr/smacc, pak interpreter pattern. Problem ale je: