Partilhar via


Algumas palavrinhas sobre Domain-Specific Language (DSL)

Olá pessoal, tudo certo?

Semana passada voltei a falar com algumas empresas sobre DSLs e Fábricas de Software. Como muitos já sabem, o tema está bastante relacionado com a construção de frameworks de desenvolvimento, patterns, guias de automação e ainda com a abstração de um domínio para o desenvolvimento de software.

Uma DSL – Domain Specific Language – ou linguagem específica de domínio (alguns até preferecem linguagem de domínio específico), é uma ferramenta de geração de software e modelagem, que permite ao usuário a criação de soluções iniciais a partir de artefatos componentes da DSL. Uma DSL pode envolver linguagens de modelagem, templates, referências a frameworks de desenvolvimento, atividades, exemplos de código, etc.

Em resumo, uma DSL oferece ferramentas para a modelagem de soluções, com grande variabilidade de resultados. Um exemplo já clássico de DSL gráfica é o editor de modelos de dados do Entity Framework, sobre o Visual Studio 2008, veja:

image

Na figura acima você vê do lado esquerdo, os shapes disponíveis na DSL, como Entity, Association e Inheritance, que podem ser adicionados ao modelo desenhado a partir das tabelas do banco (no lado direito da figura). A DSL oferece assim, uma grande flexibilidade para a criação de novos modelos EDMX, em nosso exemplo.

Mas nem só de DSLs gráficas vive o mercado. Veja a figura abaixo:

image

Podemos classificar as DSLs em domínios horizontais e verticais, de acordo com o foco de cenário que deve atender. Também, sua especialização pode ser mais genérica (de propósito geral) ou mais específica (atendendo um cenário determinado). Ainda, uma DSL pode ser gráfica, textual, baseada em formulários ou um modelo híbrido.

Quando precisamos de uma DSL? Existem cenários de desenvolvimento que envolvem:

  • grande complexidade nas operações e métodos;
  • mudanças frequentes em requisitos e organização do software;
  • busca por maior agilidade entre a definição e a execução do projeto de software;
  • muitos pontos de manutenção do projeto, etc.

Em cenários como esses, a aplicação de uma DSL torna-se interessante. Segundo Martin Fowler, ainda podemos classificar uma DSL como interna (ou Embedded) e externa.

Uma DSL interna pode ser entendida como uma maneira de se projetar uma API ou uma interface no domínio da aplicação, usando uma linguagem mais natural para o desenvolvedor, com palavras dentro de um contexto ou domínio específico. Uma DSL interna aproveita os recursos de uma linguagem host maior, por exemplo, um parser de aplicação feito em C# (veja que não precisamos criar um compilador, regras rígidas de gramática ou descrições para C#, elas já existem).

Já uma DSL externa é mais ampla e exige um esforço de implementação maior, pois aplica restrições e considerações de gramáticas e linguagens de programação, como as linguagem Tipo-2 ou Livres de Contexto (pensando na Hierarquia de Chomsky, lembra dela?). ;) São exemplos de DSLs externas o T-SQL, transformadores XSLT, a linguagem SQL, etc. Sendo linguagens mais completas, oferecem um poder de modelagem para seus usuários muito maior.

Finalmente, podemos esperar para breve novidades no mundo das DSLs sobre a plataforma Microsoft. A plataforma OSLO promete um grande uso dessas ferramentas, para a criação e manipulação de modelos no chamado MDD – Model Driven Design. Mas esse é um assunto para outro post :)

DSL é um assunto bem interessante e tem muita coisa publicada na web. Se você ficou interessante em conhecer mais sobre DSL’s, alguns links que eu recomendo são esses:

DSLs: The Good, the Bad, and the Ugly
https://www.infoq.com/presentations/Truth-about-DSL

Como separar semântica e implementação da DSL
https://www.microsoft.com/brasil/msdn/arquitetura/Journal/SeparatingDSLSemanticsfromImplementation.mspx

Introducing Domain Specific Languages - Martin Fowler
https://msdn.microsoft.com/en-us/oslo/dd727707.aspx

Generating Code for DSLs
https://martinfowler.com/articles/codeGenDsl.html

FurtaSpace - www.afurtado.net (Blog do André Furtado, que tem diversos posts sobre DSLs)
https://afurtado1980.spaces.live.com/default.aspx

Frameworks de Desenvolvimento
https://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx

GAT/GAX
https://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx

Uma última pergunta: você tem usado DSLs em seu dia-a-dia como arquiteto? Quais DSLs têm sido mais importantes? Consegue reconhecê-las?

Por enquanto é só! Até o próximo post :)

Waldemir.

Comments

  • Anonymous
    August 17, 2009
    Waldemir, excelente post sobre DSL, acrescentou muito sobre a apresentação que você fez para nós no encontro do .Net Architects. Tanto esse assunto do post quanto o Oslo são temas de grande interesse da minha parte, achei o poder e as possibilidades da ferramenta (ainda embrionária) realmente fantásticos. Abraços!

  • Anonymous
    August 17, 2009
    Olá Leandro, Obrigado pelo comentário. Foi isso mesmo, depois da sessão sobre Oslo no .NET Architects, fiquei pensando em escrever algo mais sobre DSLs e relembrar alguns artigos que havia colecionado. Virou esse post! :) Em breve, devo escrever um pouco mais sobre Oslo e a linguagem "M", assuntos que serão muito importantes no futuro próximo. Um abraço! Waldemir.