48
Linguagens de Domínio Específico: o que são e quando e como utilizar André Santos André Santos André Furtado CIn-UFPE

DSL CESAR.pdf

Embed Size (px)

Citation preview

  • Linguagens de Domnio Especfico: o que so e quando e como utilizar

    Andr Santos Andr Santos Andr Furtado

    CIn-UFPE

  • Problema para resolver: EmEm um um arquivoarquivo textotexto, , encontrarencontrar endereosendereos de de

    email (email (user@hostuser@host) e ) e substituirsubstituir o host o host porporcin.ufpe.br.cin.ufpe.br.

    QueQue linguagemlinguagem utilizarutilizar parapara resolver resolver esteesteproblemaproblema??

  • SoluoSoluo::usarusar expressesexpresses regularesregulares

    Ferramenta (linguagem) sed

    sed '/@[^ ]*/s//@cin.ufpe.br/g' < textfilesed '/@[^ ]*/s//@cin.ufpe.br/g' < textfile

    Usar linguagem de expresses regulares embutida em outras linguagens ou via API (C#, Java etc.)

  • Outros Exemplos: RealizarRealizar umauma consultaconsulta emem um um bancobanco de dadosde dados

    RenomearRenomear todostodos osos arquivosarquivos com com extensoextenso..htmhtm parapara a a extensoextenso .html.html..htmhtm parapara a a extensoextenso .html.html

    CalcularCalcular a a mdiamdia e e desviodesvio padropadro de de umauma sriesriede 100 de 100 nmerosnmeros

  • Quais as diferenas de cada abordagem?

  • Um pouco de histriaCobolCobol FortranFortran LispLisp

    businessbusiness symbolicsymbolic

    CC

    (Visual) Basic(Visual) Basic

    C#C#

    processingprocessing

    numericnumericcomputationcomputation

    symbolicsymbolicprocessingprocessing

    ??????

    JogosJogosMedicinaMedicina MsicaMsica

    Banco de dadosBanco de dados

    Device driversDevice drivers

    Manipulao deManipulao deimagensimagens Agentes mveisAgentes mveisProtocolos deProtocolos de

    comunicaocomunicao

    ?????? ??????

  • Endereando domniosespecficos

    ?????? ??????

    Frameworks orientados a objeto /Frameworks orientados a objeto /Frameworks de componentesFrameworks de componentes

    Domain SpecificDomain SpecificLanguagesLanguages

    Bibliotecas de subrotinas /Bibliotecas de subrotinas /APIs (Application Program Interface)APIs (Application Program Interface)

  • Domain Specific Languages

    Vrios problemas de desenvolvimento de software podem ser resolvidos mais facilmente atravs de uma linguagem com um propsito especfico.

  • Domain Specific Languages

    Linguagem que oferece, atravs denotaes e abstraes adequadas,notaes e abstraes adequadas,um poder de expresso focado em

    (e geralmente restrito a)um domnio particular

  • Geralmente so pequenas Micro-languages ou little languages

    Geralmente so declarativas Podem ser vistas no apenas como linguagens de

    Caractersticas de DSLs

    programao como tambm linguagens de especificao

    Muitas DSLs so traduzidas (compiladas) em chamadas a APIs

  • Exemplos de DSLs

    LEX YACC SQL BNF HTML JavaDoc TeX / LaTeX Linguagens para comandos na shell do sistema operacional

  • DSLs esto em todos os lugares A prpria linguagens de frmulas do Excel uma DSL!

    End-user programming

    Exemplos de DSLs

  • Construtores de GUI tambm podem ser vistos como DSLs?

    Sim, mas a Sim, mas a

    DSL Visuais

    Sim, mas a Sim, mas a experincia do experincia do

    usuriousurio, entretanto, , entretanto, diferente (pois a diferente (pois a

    DSL visual!)DSL visual!)

  • Utiliza DSLs visuais para modelar a soluo em um domnio Exemplo: linguagem para aplicaes de smart phones

    Modelagem visual

  • Outro Exemplo:VS Team System for Architects

  • Domain Specific Development

  • Feito vrias Feito vrias vezes, pelos vezes, pelos

    Feito apenas Feito apenas uma vez, pelo uma vez, pelo projetista da projetista da

    Modelagem Visual

    [Tolvanen 2003][Tolvanen 2003]

    vezes, pelos vezes, pelos desenvolvedoresdesenvolvedores

    + abstrao e + abstrao e poder de poder de

    expresso!expresso!

    projetista da projetista da linguagemlinguagem

  • Feito vrias Feito vrias vezes, pelos vezes, pelos

    Feito apenas Feito apenas uma vez, pelo uma vez, pelo projetista da projetista da

    Modelagem Visual

    [Tolvanen 2003][Tolvanen 2003]

    vezes, pelos vezes, pelos desenvolvedoresdesenvolvedores

    + abstrao e + abstrao e poder de poder de

    expresso!expresso!

    projetista da projetista da linguagemlinguagem

    Domain-Specific

    Interpeter

  • DSL textual - Exemplo

    Define AnnotationShape RectangleWidth=1.5Height=0.3FillColor=khakiOutlineColor=brownOutlineColor=brownDecorator Comment

    Position="Center"End Comment

    End AnnotationShape

  • DSL textual - Dificuldades

    Criao de um parser Verificao semntica Escrever gerador de cdigo ou interpretador Editor de texto, debugger,...

  • Embedded DSLs

    Criao de uma DSL dentro de outra linguagem

    Evita necessidade de criar parser e toda a infraestrutura de uma nova linguagem

    Algumas linguagens que facilitam este caminho: Groovy, Haskell, logix, ... XML. Mas tambm possvel em Java, C# etc.

  • Embedded DSLs XML

    Rectangle1.5KhakiKhakiBrown

    Center

  • Linguagens com maior suporte a Embedded DSLs Poucas regras sintticas Poucas palavras chave Pouca ou nenhuma distino sinttica entre

    linguagem, biblioteca e programa do usuriolinguagem, biblioteca e programa do usurio Sintaxe leve para funes annimas combinadores monads

  • Embedded DSLs C#

    Shape AnnotationShape = newShape(ShapeKind.Rectangle,

    1.5,0.3,Color.Khaki,Color.Khaki,Color.Brown);

    Decorator Comment = new Decorator(Position.Center);AnnotationShape.AddDecorator(Comment);

  • Projetando uma DSL

    Etapas sugeridas: Anlise Implementao Utilizao

  • Projetando uma DSL :: Anlise Objetivo: construir um entendimento do

    domnio Passos:

    1. Identificar o domnio do problema2. Obter o conhecimento relevante sobre esse 2. Obter o conhecimento relevante sobre esse

    domnio3. Juntar nesse conhecimento noes semnticas

    e operadores nessas noes - combinadores4. Projetar a DSL que descreve concisamente

    aplicaes no domnio

  • Projetando uma DSL :: Implementao

    1. Construir uma biblioteca (API) ou framework que implementa noes semnticas

    2. Projetar e implementar um compilador (ou interpretador) que traduz (ou interpreta) interpretador) que traduz (ou interpreta) programas na DSL em uma seqncia de chamadas a bibliotecas

  • Projetando uma DSL :: Utilizao

    1. Escrever programas na DSL para as aplicaes desejadas

    2. (Interpretar ou) compilar e executar os programas

    3. Validar a DSL

  • Exemplo receitas de salada

    On top of

    Whipped Mixture

    Chopped

    Combinadores combinamitens para formar uma salada

    Take

    1 pint Cream Take

    Chopped

    3 Apples

    Take

    6 Oranges

    Optional

    De Composing contracts: an adventure in financial engineering.Simon Peyton Jones, Jean-Marc Eber, Julian Seward, ICFP 2000

  • Embedded DSLs - exemplo

    salad = topping `onTopOf` main_parttopping = whipped (take pint cream)main_part = mixture apple_part orange_partapple_part = chopped (take 3 apple)orange_part = optional (take 6 oranges)

    On top of

    Take

    Whipped

    1 pint Cream

    Mixture

    Take

    Chopped

    3 Apples

    Take

    6 Oranges

    Optional

  • DSLs suporte a interpretao

    Solicitao: S(P), contedo de acar de uma salada P

    S (onTopOf p1 p2) = S(p1) + S(p2)S (whipped p) = S(p)S (take q i) = q * S(i)etcetc

    Ao definir uma receita, podemos calcular seu contedo de aucarsem trabalho extra.

    S se novos combinadores fores criados ou novos ingredientes preciso estender S

  • Exemplo - contratos

    c1 :: Contractc1 = zcb (date 1 Jan 2010) 100 Pounds

    Receive 100 on 1 Jan 2010

    zcb :: Date -> Float -> Currency -> Contract-- Zero coupon bond

  • Combinando contratosc1,c2,c3 :: Contractc1 = zcb (date 1 Jan 2010) 100 Poundsc2 = zcb (date 1 Jan 2011) 100 Pounds

    c3 = c1 `and` c2

    and :: Contract -> Contract -> Contract-- Both c1 and c2

    and

    zcb t1 100 Pounds zcb t2 100 Pounds

    c1 c2

    c3

  • Resultados da DSL de contratos

    Pequeno conjunto de combinadores Biblioteca extensvel pelo usurio Semntica composicional, facilita modelos de

    valoraovalorao Prmio Produto de Software do Ano da Risk

    Magazine Empresa LexiFi, comercializa esta idia

  • DSLs: riscos e oportunidades Vantagens:

    Solues no idioma e no nvel de abstrao do domnio do problema Experts no domnio podem entender, modificar, validar

    e at fazer programasProgramas concisos, auto-documentados Programas concisos, auto-documentados

    Validao / otimizao no nvel do domnio Conservam e reusam conhecimento do domnio

  • DSLs: riscos e oportunidades Desvantagens:

    Custo de projeto, implementao e manuteno da DSL

    Custo de treinamento de programadores da DSL Dificuldade na definio do escopo da DSL Dificuldade em balancear construtores de

    linguagens de programao com especificidades do domnio

    Possvel perda de performance

  • DSLs (principalmente as visuais) so poderosas e ao mesmo tempo custosas... como melhorar isso?

    Atravs de programas de Atravs de programas de

    Reflexo

    Atravs de programas de Atravs de programas de suporte criao de suporte criao de DSLsDSLs::languagelanguage workbenchesworkbenches

  • Plug in para a IDE Visual Studio .NET Suporte criao de DSLs visuais

    Captura dos conceitos do domnio Definio de um editor grfico Criao de transformadores (ex.: gerador de cdigo)

    VS Team System DSL Tools

  • Exemplo: DSL para Jogos SharpLudus

  • DSLs :: Conceitos Relacionados

    Language-Oriented Programming Estilo de desenvolvimento baseado na idia de

    construir software atravs de DSLs Proposto pelo fundador da JetBrainsLanguage Workbench Language Workbench Conjunto de ferramentas para viabilizar a

    language-oriented programming Martin Fowler

  • DSLs :: Conceitos Relacionados

    Software Factories Iniciativa da Microsoft para suporte a DSLs, da

    qual faz parte o DSL Tools para o Visual Studio. Eclipse Modeling Framework

    http://www.eclipse.org/modeling/emf/ Intentional Software

    www.intentionalsoftware.com Ambiente de desenvolvimento em que toda a

    programao de domnio especfico

  • E UML, MDA, MDD?

    [Tolvanen 2003][Tolvanen 2003]

  • Concluses

    DSLs podem aumentar significativamente a produtividade em projetos de um mesmo domnio (e.g. 5x, 10x)domnio (e.g. 5x, 10x)

    Mas preciso avaliar bem o retorno do investimento em criar uma DSL (N projetos em um mesmo domnio)

  • A Good Programmer does Language Design .[...] a good programmer in these times does not

    just write programs. [...] a good programmer does language design, though not from scratch, but building on the frame of a base language.but building on the frame of a base language. Guy Steele Jr., Growing a language. OOPSLA, 1998.

  • Perguntas?Andr Santos [email protected] Santos [email protected]

    Andr Furtado [email protected]

    CIn-UFPE

  • Referncias Domain-Specific Development with Visual

    Studio DSL Tools, by Steve Cook, Gareth Jones, Stuart Kent, Alan Cameron Wills, Addison-Wesley, 2007.Addison-Wesley, 2007.

    Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools, by Jack Greenfield and Keith Short, with Steve Cook and Stuart Kent, Wiley, 2004.

  • Referncias VS 2005 Team System Domain-Specific

    Language (DSL) Tools msdn.microsoft.com/vstudio/DSLTools/

    Projeto SharpLudus - Projeto SharpLudus -http://www.cin.ufpe.br/~sharpludus

  • Referncias Language-Oriented Programming: The Next

    Programming Paradigm, Sergey Dimitriev, co-founder and CEO of JetBrains, http://www.onboard.jetbrains.com/is1/articles/04/http://www.onboard.jetbrains.com/is1/articles/04/10/lop/

    Language Workbenches: The Killer-App for Domain Specific Languages? http://www.martinfowler.com/articles/languageWorkbench.html