São Paulo 05 07 Dezembro DEV301 Entender o que são DSLs (linguagens de domínio específico) Compreensão do conceito de modelagem visual Assimilar o suporte ferramental do VS para a criação de DSLs Criar uma DSL do zero, englobando diferentes etapas Identificar quando (não) usar DSLs Não estourar a hora do almoço Em um arquivo texto, encontrar endereços de email (user@host) e substituir o host por microsoft.com. Criar um programa que manipula e substitui strings? Ferramenta (linguagem) sed do UNIX? sed '/@[^ ]*/s//@microsoft.com/g' < textfile Usar linguagem de expressões regulares embutida em outras linguagens ou via API (C#, Java etc.)? MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 1
Realizar uma consulta em um banco de dados? Renomear todos os arquivos com extensão.htm para a extensão.html? Calcular a média e desvio padrão de uma série de 100 números? Cobol Fortran Lisp C C# (Visual) Basic business processing Device drivers Manipulação de imagens numeric computation Jogos symbolic processing Banco de dados Medicina?????? Protocolos de comunicação Música??? Agentes móveis?????? Bibliotecas de subrotinas / APIs (Application Program Interface) Domain Specific Languages Frameworks orientados a objeto / Frameworks de componentes MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 2
Geralmente são pequenas Micro-languages ou little languages Geralmente são declarativas Não apenas linguagens de programação Mas também linguagens de especificação Muitas DSLs são traduzidas (compiladas) em chamadas a APIs LEX YACC SQL BNF HTML JavaDoc TeX / LaTeX Linguagens para comandos na shell do sistema operacional DSLs estão em todos os lugares! A própria linguagens de fórmulas do Excel é uma DSL! End-user programming XML é DSL? XML Schema DSL Arquivo XML instância ( programa ) feito na DSL <blog nome= FurtaBlog url= www.afurtado.net > <post data= 02/11/2007 >Hello World</post> <post data= 14/11/2007 categoria= jogos >Combinando DSLs e XNA</post> <post data= 30/11/2007 categoria= engenharia de software > Palestra sobre DSL no TechEd Brasil 2007</post> </blog> Construtores de GUI também podem ser vistos como DSLs? Baseada em convenções estruturais MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 3
12/7/2007 Utiliza DSLs visuais para modelar a solução em um domínio Exemplo: linguagem para aplicações de smart phones Qual a real utilidade da modelagem visual? #1 #2 Projetista da linguagem Consumidor da linguagem (DSL author) (desenvolvedor de uma aplicação, DSL user) #3 Usuário final (application user) [Tolvanen 2003] MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 4
using System; using System; using System.Collections; using System.Collections; using System.ComponentModel; using System.ComponentModel; using System.Data; using System.Data; using System.Diagnostics; using System.Diagnostics; using System.Web; using System.Web; using System.Web.Services; using System.Web.Services; using XYZ.GapOrdering; using XYZ.GapOrdering; using XYZ.GapOrdering.ClientLibrary; using XYZ.GapOrdering.ClientLibrary; namespace namespace GapWebService GapWebService { { /// /// <summary> <summary> /// /// Summary Summary description description for for Service1. Service1. /// /// </summary> </summary> public public class class GapService GapService : : System.Web.Services.WebService System.Web.Services.WebService...... 12/7/2007 Domain- Specific Interpeter [Tolvanen 2003] [Tolvanen 2003] Vantagens: Soluções no idioma e no nível de abstração do domínio do problema Experts no domínio podem entender, modificar, validar e até fazer programas Programas concisos, auto-documentados Validação / otimização no nível do domínio Produtividade Conservam e reusam conhecimento do domínio Geração (de código), validadores, domain-specific API comunicação abstração menos código rastreabilidade automação Desvantagens: Custo de projeto, implementação e manutenção da DSL Custo de treinamento de programadores da DSL Dificuldade na definição do escopo da DSL Dificuldade em balancear construtores de linguagens de programação com especificidades do domínio Possível perda de performance DSLs (principalmente as visuais) são poderosas e ao mesmo tempo custosas... como melhorar isso? Através de programas de suporte à criação de DSLs: language workbenches MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 5
12/7/2007 Plug in para a IDE Visual Studio.NET Suporte à criação de DSLs visuais Captura dos conceitos do domínio Definição de um editor gráfico Criação de transformadores (ex.: gerador de código) Supported Authoring Editions of Visual Studio 2005 Visual Studio 2005 Professional Edition Visual Studio 2005 Team Edition for Software Architects Visual Studio 2005 Team Edition for Software Developers Visual Studio 2005 Team Edition for Software Testers Visual Studio 2005 Team Suite Supported Deployment Editions of Visual Studio 2005 Visual Studio 2005 Standard Edition Visual Studio 2005 Professional Edition Visual Studio 2005 Team Edition for Software Architects Visual Studio 2005 Team Edition for Software Developers Visual Studio 2005 Team Edition for Software Testers Visual Studio 2005 Team Suite DSLs para modelagem de jogos de aventura Elaborado por alunos de Projeto de Compiladores, UFPE DSLs para especificar o interior de um apartamento Elaborado por alunos de Tópicos Avançados em Linguagens Computacionais, UFPE MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 6
12/7/2007 Casos de uso Diagrama de classes Componentes Fluxo de atividades Árvore Genealógica MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 7
Objetivo Criar uma DSL visual para a modelagem e construção automática de jogos de pergunta e resposta (quiz games) Conceitos do domínio podem ser arrastados da Toolbox Aos poucos, a DSL visual é construída... Propriedades são adicionadas a conceitos Relacionamentos entre conceitos são criados A janela DSL Explorer permite criar novos tipos de dados MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 8
Da Toolbox são adicionadas ao diagrama formas gráficas (imagens, compartimentos, etc.) Mapeamento da sintaxe para os conceitos também é realizado Decoradores textuais e gráficos podem ser associados às formas gráficas, através da janela DSL Details O gerador é feito em linguagem de script semelhante a C# Tags <#... #> delimitam lógica de processamento Tags <#=... #> jogam expressões no output Texto fora das tags é copiado diretamente MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 9
Código que consome o framework é gerado Código próprio do desenvolvedor é implementado em classes parciais Serialização Deployment Customização / extensão em vários níveis: do mais fácil ao mais poderoso Manutenção Construção Debugging Gestão DSL Teste Rastrear Defeitos Implantação Controle de Versão Simulação MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 10
DSLs podem aumentar significativamente a produtividade em projetos de um mesmo domínio (5x, 10x) Language workbenches como o VSTS DSL Tools facilitam e suportam o processo Mas é preciso avaliar bem o retorno do investimento em criar uma DSL (N projetos em um mesmo domínio) Fábricas de software, DSLs, etc., são um meio, jamais um fim. [...] 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. Guy Steele Jr., Growing a language OOPSLA, 1998 Sessões Técnicas e Mesas Redondas ARQ304 - Software Factories, 07/12/2007 17:00-18:15 Compareça ao Hands on Lab (HOL) Participe da sessão Ask the Experts (dia 06) e Community Lounge para falar com os palestrantes após as apresentações Furtablog software (engineering) + game (development) + other http://www.afurtado.net Projeto SharpLudus http://www.cin.ufpe.br/~sharpludus Microsoft DSL Tools http://msdn.microsoft.com/vstudio/dsltools/ Language Workbenches: The Killer-App for Domain Specific Languages? http://www.martinfowler.com/articles/languageworkbench.html Domain-Specific Languages: An Annotated Bibliography http://homepages.cwi.nl/~arie/papers/dslbib/ Microsoft Developer Network (MSDN) (Webcasts, Blogs, Chats, Eventos Presenciais) http://microsoft.com/brasil/msdn Microsoft Technet (Webcasts, Blogs, Chats, Eventos Presenciais) http://microsoft.com/brasil/technet Microsoft Learning e Certificação www.mostrequevocesabe.com Trial Software e Virtual Labs http://www.microsoft.com/technet/downloads/trials/default.mspx MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 11
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. 12