Upload
marcos-mussi
View
56
Download
3
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