Linguagem dedicada

Uma linguagem dedicada (em inglês, linguagem de domínio específico ou DSL ) é uma linguagem de programação cujas especificações são projetadas para atender às restrições de um campo específico de aplicação . É conceitualmente oposta às linguagens de programação clássicas (ou generalistas) como Java ou C , que tendem a lidar com um conjunto de domínios. No entanto, não há consenso que defina precisamente o que é uma linguagem dedicada. Essa falta de definição precisa da natureza de uma linguagem dedicada torna difícil a tarefa de estabelecer uma história clara da origem do conceito.

Na ciência da computação, as linguagens dedicadas lidam com vários campos da computação (pilotos de computador, computação científica, bancos de dados) ou lidam com vários outros campos em que a ciência da computação está envolvida ( medicina , aeronáutica ). O uso de uma linguagem dedicada não é específica para computadores, existem linguagens dedicadas aos campos da medicina, culinária,  etc. .

A construção de linguagens dedicadas é fundamentalmente diferente daquela de uma linguagem clássica. O processo de desenvolvimento pode ser muito complexo. Seu design requer habilidades duplas no campo a ser tratado e no desenvolvimento de TI. Quer seja uma linguagem interna ou externa dedicada, a implementação deste tipo de linguagem requer o uso de um modelo de design . Existem padrões de design que descrevem a implementação conforme descrito por Spinellis e, em vez disso, descrevem os estágios de desenvolvimento da linguagem. Essas duas abordagens, embora baseadas em ideias diferentes, se complementam.

O uso de linguagens dedicadas tem vantagens e desvantagens em comparação com o uso de linguagens gerais. A justificativa para o uso de idiomas dedicados pode ser baseada em considerações tecnológicas ou financeiras. Por outro lado, as vantagens e desvantagens não são as mesmas, quer se trate de uma linguagem dedicada interna ou externa.

Visão geral

Conceito multidisciplinar

Existem linguagens dedicadas em outras áreas além da ciência da computação. Os mais famosos são em particular:

Também podemos encontrar dicionários dedicados à linguagem da medicina, culinária, filosofia,  etc. .

Definições

Um idioma dedicado a um domínio (em inglês  : idioma específico do domínio "ou DSL) fornece uma notação orientada para este domínio de aplicação. Baseia-se nos conceitos e na funcionalidade do domínio em questão. Como tal, uma linguagem dedicada é uma forma eficiente de descrever e gerar programas em uma área específica.

De acordo com Gilles Muller, uma linguagem dedicada é uma linguagem de programação específica para uma família de problemas denominada "domínio". Ele permite ao programador garantir que ele construa uma linguagem apropriada e que essa linguagem atenda aos requisitos específicos do domínio de destino.

Outra definição é dada por Deursen, Klint e Visser. Uma linguagem dedicada é uma linguagem de programação ou uma linguagem de especificação executável que oferece, por meio de notações e abstrações apropriadas , poder expressivo focado e geralmente limitado a um domínio específico.

Linguagens dedicadas internas e externas

Existem dois tipos de linguagens dedicadas: linguagens dedicadas internas, também chamadas de linguagens incorporadas, ou linguagens incorporadas (em inglês  : linguagem incorporada de domínio específico ou DSEL) e linguagens dedicadas externas.

Os primeiros devem ser usados ​​no código-fonte de um programa, expresso em outro idioma conhecido como idioma do host. As linguagens que se prestam bem à recepção de uma linguagem embarcada são por exemplo: Lisp, Haskell, Tcl ...

Os últimos não se destinam a expressões adicionais em outro idioma. Os códigos-fonte dos programas que permitem implementar são autônomos e independentes de qualquer outra linguagem de programação.

De acordo com Watt, o idioma dedicado deve ter certos critérios:

Uma linguagem dedicada pode evoluir de acordo com a própria evolução do campo de aplicação. Acontece também que uma linguagem dedicada evolui para se tornar uma linguagem de programação generalista.

Exemplos de linguagens dedicadas a domínios específicos

Os campos de aplicação de linguagens dedicadas são muito variados. No entanto, essas linguagens são criadas para realizar uma tarefa específica. Os exemplos de uso abaixo são apenas uma pequena parte dos campos de aplicação de linguagens dedicadas.

Piloto de computador

Bossa A linguagem Bossa é uma linguagem dedicada à implementação de escalonadores de sistema. Bossa facilita a integração de novos escalonadores em sistemas gerais ( Windows , Linux ) e no kernel do sistema operacional . diabo Devil ( DEVice Interface Language ) é uma linguagem dedicada à definição de interfaces de hardware. Essa abordagem melhora a robustez dos drivers de dispositivo. Ao contrário de uma linguagem de uso geral, Devil tem um compilador que verifica automaticamente uma especificação para consistência e produz stubs que incluem verificações de tempo de execução.

Rede

Html HTML (HyperText Markup Language) é uma linguagem de marcação dedicada a escrever documentos que contenham hiperlinks . Foi criado no início dos anos 1990 por Tim Berners-Lee, que o anunciou na Usenet em Qualificadores em links de hipertexto em2 de agosto de 1991. O HTML é apoiado por várias organizações que, em 2011 , o tornaram a linguagem de referência para a criação de páginas web. PHP A linguagem de scripting PHP ( Hypertext Preprocessor ) é dedicada à produção de páginas web e à gestão de bases de dados , inicialmente MySQL . Foi criado em 1994 por Rasmus Lerdorf . A principal contribuição do PHP, em comparação com o HTML, é permitir a criação de páginas web dinâmicas .

Exemplo de geração de página da web com HTML e PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <title><?php echo 'Hello World'; ?></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- entre les balises <?php ?>, du code PHP inclus dans du code HTML --> <p><?php echo 'Hello World'; ?></p> </body> </html>


Rubi Ruby é uma linguagem interna dedicada para aplicativos da web. De acordo com Martin Fowler , Ruby é implementado como uma linguagem interna dedicada porque foi desenvolvido em Emacs, que por sua vez é baseado na linguagem Emacs Lisp . A linguagem Emacs Lisp é, portanto, considerada a linguagem hospedeira de Ruby. O interesse recente de Ruby é tecnicamente assumir metaprogramação em linguagens dedicadas internas.

Base de dados

SQL A linguagem SQL ( linguagem de consulta estruturada ), ou seja, “ linguagem de consulta estruturada ”, era originalmente uma linguagem externa dedicada com SQL embutido . Destina-se a consultar ou manipular um banco de dados relacional . Foi desenvolvido pela IBM no ano de 1970 por Donald D. Chamberlin e Raymond F. Boyce  (em) . Este idioma foi inicialmente denominado SEQUEL.

Exemplo de consulta SQL em PHP.

<?php // Requete SQL à l'intérieur d'une variable PHP $query = "SELECT id, name FROM products ORDER BY name ;"; // PostgreSQL $result = pg_query($conn, $query); // MySQL $result = mysql_query($query); ?>

Cálculo científico

Fortran O Fortran inicialmente se dedicou à linguagem de computação científica criada em 1956 por uma equipe liderada por John Backus . É a primeira linguagem de programação e ainda continua evoluindo. Em 2003, com a versão Fortran 2003 (ISO / IEC 1539-1: 2004), a linguagem oferece suporte à programação orientada a objetos . Além disso, com esta versão, a interface com a linguagem C é fornecida pelo módulo interno ISO_C_BINDING, que permite acessar as bibliotecas da linguagem C. O Fortran, uma linguagem dedicada, portanto, evolui e tende a se tornar uma linguagem geral.

História e evolução

Não há história real sobre idiomas dedicados porque não há consenso real sobre uma definição exata.

As primeiras linguagens de programação ( Cobol , Lisp , Fortran ) são consideradas linguagens dedicadas, embora não sejam nomeadas como tal. Essas primeiras linguagens de programação eram, de fato, dedicadas a um domínio de aplicação. Com o desenvolvimento das possibilidades de aplicação, as linguagens tenderam a se espalhar. Ao mesmo tempo, continuou a sentir-se a necessidade de linguagens especializadas para resolver necessidades específicas. Várias soluções foram encontradas:

  • Bibliotecas específicas (livrarias) fornecem sub-rotinas especializadas para um determinado domínio de aplicação.
  • Nos frameworks orientados a objetos, o objetivo é o mesmo que as bibliotecas específicas são adequadas para a programação orientada a objetos .
  • Idiomas dedicados a um domínio, que oferecem a possibilidade de permitir a expressão no domínio de aplicação pretendido.

O termo "linguagem dedicada" teria aparecido pela primeira vez em Setembro de 1984, em uma publicação da JM Neighbours. Encontramos então a ideia de linguagem dedicada com nomes diferentes, em particular “petit langue” ( pequena linguagem ) ou mesmo “micro linguagem” em 1986. Em 1996, uma conceituação da linguagem dedicada foi implementada. Os autores discutem em particular a visão de adotar a abordagem entre "domínio como um mundo real" ( domínio como um mundo real ) ou a abordagem de "domínio como um conjunto de sistemas" ( domínio como um conjunto de sistemas ) para modelar um sistema dedicado língua.

Construções de uma linguagem dedicada

A realização de linguagens dedicadas é fundamentalmente diferente daquela das linguagens de programação tradicionais. O processo de desenvolvimento pode ser muito complexo. Requer experiência na área em questão, mas também conhecimento na área de design de linguagem de programação.

Construção

Na prática, o desenvolvimento de uma linguagem dedicada não é um processo sequencial simples, mas um processo iterativo. Para que a linguagem esteja o mais próximo possível do domínio visado, a construção requer uma dupla habilidade (do domínio da aplicação e da programação da linguagem), ou uma estreita colaboração entre a equipe de programadores e os especialistas do tratado domínio.

Diomidis Spinellis  (en) e Anthony M Sloane oferecem padrões de design de linguagem dedicados.

  • Característica de construção de uma linguagem dedicada

O método de caracterização de um idioma dedicado especifica que ele deve ser descrito de acordo com duas sintaxes:

  • A sintaxe abstrata (Sintaxe abstrata).
  • Sintaxe concreta.

Ele deve ser construído usando essas duas partes, começando com a árvore da sintaxe abstrata e complementando com uma ou mais ramificações da sintaxe concreta.

Padrões

Padrões Spinellis

Os padrões Spinellis estão principalmente ligados à implementação de linguagens dedicadas, ao contrário dos padrões Sloane que classificam as fases de desenvolvimento e construção de uma linguagem dedicada. Spinellis oferece oito padrões de design para idiomas dedicados, classificados em três tipos:

Padrões estruturais ( linguagens incorporadas ( piggyback ) ) Esses padrões estão interessados ​​nas interações entre a linguagem dedicada e as outras linguagens. Ele oferece uma linguagem de programação como um host de linguagem dedicado. Padrões comportamentais ( pipeline ) Esses padrões visam resolver os problemas de composição de linguagens dedicadas. Um sistema pode ser descrito usando uma família de linguagens dedicadas em camadas, o pipeline é mais precisamente o elemento no qual a execução e a execução das instruções desta família de linguagens dedicadas são divididas. Padrões criativos Linguagens dedicadas são, portanto, linguagens de programação reais caracterizadas por sua própria sintaxe e semântica. A descrição da sintaxe, design e implementação dessas linguagens correspondem aos seis padrões criativos de Spinellis: Processamento lexical ( processamento lexical ) Este modelo de processamento léxico criativo oferece uma maneira eficiente de projetar e implementar a sintaxe de linguagens dedicadas; Extensão de idioma ( extensão de idioma ) Este padrão é usado para adicionar nova funcionalidade a uma linguagem dedicada existente. Freqüentemente, uma linguagem existente pode efetivamente atender a uma nova necessidade com a adição de algumas novas funcionalidades ao seu kernel que a tornam uma linguagem base; Língua de especialização ( especialização linguística ) Este padrão elimina ou modifica características de uma linguagem básica (ou generalista) para formar uma linguagem dedicada; Transformação de fonte para fonte (transformação de fonte para fonte ) O programa de linguagem dedicado é traduzido para um programa equivalente em uma linguagem geral, permitindo assim reutilizar todas as ferramentas vinculadas a esta linguagem sem ter que modificá-las; Representação das estruturas de dados ( estrutura de representação de dados ) Estruturas complexas às vezes são difíceis de expressar, o design de uma linguagem dedicada é uma solução interessante para representar dados e estruturas complexas; Sistema frontal ( front-end do sistema ) Este padrão gerencia a configuração e adaptação das funcionalidades do sistema de linguagens dedicadas de forma a se limitar ao necessário para a criação de uma determinada aplicação. Padrões de Sloane

Projetar uma linguagem dedicada é uma tarefa difícil, existem muitas abordagens relacionadas principalmente a restrições de domínio. Diversas classificações têm sido propostas para melhor compreender as motivações e os limites de cada uma dessas concepções, como os padrões de Sloane que são classificados de acordo com as fases do desenvolvimento da linguagem. As diferentes fases do desenvolvimento do Sloane são as seguintes:

  • Decisão  : Definir o “porquê” da implementação de uma linguagem dedicada para esta área é relevante;
  • Análise  : Analisar o domínio e as necessidades específicas desta linguagem, bem como as escolhas tecnológicas;
  • Design  : Definir a abordagem técnica para a implementação da linguagem;
  • Implementação  : Programação da própria linguagem;
  • Implantação  : Forneça o idioma dedicado assim projetado.

Vantagens e desvantagens

Além das especificidades das diferentes línguas, o uso de uma linguagem dedicada em comparação com o uso de linguagens generalistas tem vantagens e desvantagens.

Veja Questões Econômicas para mais informações sobre as implicações econômicas.

Benefícios

  • As linguagens dedicadas apresentam um potencial interessante, e não desprezível, em termos de produtividade, reutilização e confiabilidade.
  • Eles são concisos e autodocumentados em grande parte e podem ser reutilizados para diferentes fins.
  • Os especialistas no domínio do aplicativo podem modificar mais facilmente um programa sem conhecimento de programação em linguagens gerais.

Benefícios de idiomas dedicados internos

  • O uso de linguagens dedicadas internas oferece uma grande vantagem: esta abordagem torna possível tirar proveito da infraestrutura e das ferramentas de desenvolvimento da linguagem hospedeira.
  • Ao criar o idioma dedicado, o desenvolvedor não precisa definir uma gramática completa, nem criar as ferramentas de suporte para seu idioma dedicado.

Vantagem de idiomas externos dedicados

  • Em uma linguagem externa dedicada, a sintaxe da linguagem pode representar qualquer conceito que seja desejável usar com o domínio de destino, tornando possível expressar totalmente este último usando os termos e símbolos que são específicos para ele.
  • Como a linguagem não está vinculada a uma linguagem hospedeira, ela não deve sofrer viés de implementação ou comprometimentos relacionados ao ambiente no qual será integrada, em particular ao nível da sintaxe ou da plataforma de destino.

Desvantagens

  • Sendo uma linguagem dedicada, por definição, destinada a ser usada em um domínio definido, pode ser menos fácil encontrar exemplos de códigos-fonte suplementando a documentação do que no caso do uso de linguagens gerais.
  • O custo relacionado à produção do idioma dedicado, sua manutenção e treinamento do usuário.
  • A dificuldade gerada pela escolha da razão na construção entre linguagens dedicadas e linguagens generalistas.
  • Pessoas que não são especialistas no campo de aplicação podem achar difícil ler ou modificar um programa escrito em uma linguagem dedicada.
  • O uso de linguagens dedicadas pode levar à proliferação de linguagens redundantes e não padronizadas, o que apresenta problemas de compatibilidade e portabilidade.
  • Em termos de desempenho, os programas desenvolvidos em linguagens dedicadas geralmente usam o tempo do processador com menos eficiência em comparação com as linguagens de uso geral, que geralmente possuem compiladores que otimizam a execução ou máquinas virtuais de alto desempenho.

Questões econômicas

O uso de linguagens dedicadas a um domínio envolve várias questões econômicas, como seu custo de aprendizado e seu custo de manutenção.

Uma das questões econômicas diz respeito ao tempo gasto no aprendizado do idioma. De fato, o custo de aprender uma língua geral pode ser mais facilmente amortizado pela multiplicação dos campos de aplicação tratados. No caso de um idioma dedicado, o campo de amortecimento é menor dependendo do campo de aplicação. É preciso poder medir o ganho de produtividade gerado pelo seu uso e determinar em que medida esse ganho compensa o tempo de aprendizagem.

Por outro lado, o uso de línguas dedicadas na educação também é discutido. É possível oferecer o aprendizado de uma língua dedicada, que os alunos podem usar para aprender outras línguas gerais. Também é possível oferecer a aprendizagem de várias línguas generalistas para, então, poder utilizar línguas dedicadas de acordo com o campo de aplicação.

O uso de uma linguagem dedicada implica sua implementação. O custo inicial do desenvolvimento da linguagem também deve ser levado em consideração ao medir o impacto econômico. Paul Hudak  (en) propõe uma abordagem para limitar esse custo inicial. Essa abordagem é baseada em linguagens dedicadas incorporadas (internas). O princípio é aproveitar a infraestrutura e as ferramentas do ambiente de desenvolvimento de uma linguagem geral.

Um dos desafios econômicos é a sustentabilidade dos programas produzidos, bem como a possibilidade de desenvolvimento da linguagem. Na verdade, o custo de manter um idioma dedicado é menor do que o de um idioma geral.

Veja também

Notas

  1. lista não exaustiva.
  2. A diversidade de idiomas dedicados corresponde à de seus campos de aplicação.
  3. Em inglês:  "
  4. Uma linguagem de domínio específico (DSL) é uma linguagem de programação ou linguagem de especificação executável que oferece, por meio de notações e abstrações apropriadas, poder expressivo focado e geralmente restrito a um domínio de problema específico.

Referências

  1. Site do Governo de Quebec , 2002 , p.  1
  2. De Broglie 2004 , p.  1
  3. jogos 2000 , p.  1
  4. Mernik 2005 , p.  317
  5. Muller 2004 , p.  437.
  6. Deursen 2000 , p.  26
  7. Hudak 1996 , p.  1
  8. Strembeck 2009 , p.  1.267.
  9. Fowler 2009 , p.  13
  10. Watt 1990 , p.  9
  11. Deursen 2000 , p.  27
  12. Muller , 2009 , p.  1
  13. Reveillere 2000 , p.  4
  14. w3c 2004 , p.  1
  15. Lerdorf 2002 , p.  11
  16. Jon Bentley 1986 , p.  711
  17. Martin Flower 2005
  18. Zachary Smith 2011 , p.  358
  19. Chamberlin 1970 , p.  249-250
  20. Backus 1965 , p.  2-3
  21. Standard Fortran 2003
  22. Neighbours 1984 , p.  564-565.
  23. Bentley 1986 , p.  712.
  24. Simos 2000 , p.  28
  25. Deursen 2000 , p.  29
  26. Spinellis 2001 , p.  91
  27. Heering 2005 , p.  316.
  28. Mernik 2005 , p.  316-319.
  29. Langlois , 2008 , p.  2-3.
  30. Spinellis 2001 , p.  93
  31. Mernik 2005 , p.  320-335.
  32. Tolvanen 2008 , p.  448.
  33. Ladd 1994 , p.  169-178.
  34. VARDANEGA 2009 , p.  1
  35. Freudenthal 2010 , p.  65
  36. Hill 2004 , p.  224-225.

Bibliografia

Livros

(en) Modelagem de domínio da organização: Relatório Técnico STARS-VC-A025 / 001/00, Synquiry Technologies,1996, 509  p. ( leia online )

Artigos científicos

  • (en) Donald D. Chamberlin e Raymond F. Boyce , "  SEQUEL: A STRUCTURED ENGLISH QUERY LANGUAGE  " , Documento ,1974, p.  249-264 ( ler online )
  • (en) Eric Tullio Vardanega e Eric Miotto , “  Sobre a integração de corpos de conhecimento específicos de domínio e científicos em Engenharia Orientada a Modelos  ” , projeto Adams , vol.  1, n o  1,Junho de 2000, p.  1-7 ( ler online )
  • (pt) Arie van Deursen , Paul Klint e Joost Visser , “  Domain-specific languages: an annotated bibliography  ” , SIGPLAN Not. , vol.  35, n o  6,Junho de 2000, p.  26-36 ( DOI  10.1145 / 352029.352035 , leia online )
  • (pt) Rasmus Lerdorf e Kevin Tatroe , “  Programming PHP  ” , livro ,2002, p.  11 ( ler online )
  • (en) Laurent Réveillère , Fabrice Merillon , Charles Consel , Renaud Marlet e Gilles Muller , “  The Devil Idioma  ” , Documento ,2000, p.  1-14 ( ler online )
  • (pt) JM Neighbours , “  The Draco approach to building software from reusable components  ” , Software Engineering, IEEE Transactions on. , vol.  10, n o  5,Setembro de 1984, p.  564-574 ( DOI  10.1109 / TSE.1984.5010280 )
  • (in) Julia L. Lawall , Anne-Françoise Le Meur e Gilles Muller , "  É a concepção de um DSL-alvo Independente para o Processo Safe-OS Programação Componentes  " , . ,2004, p.  436-455 ( DOI  10.1007 / b101929 , leia online )
  • (pt) Martin Fowler , “  A pedagogical framework for domain-specific languages  ” , International Journal of Software Engineering and Knowledge Engineering , vol.  26,2009, p.  13–14 ( ISSN  0740-7459 , leia online )
  • (pt) David Bruce , “  O que torna uma boa linguagem de domínio específico? APOSTLE, e sua abordagem para simulação de eventos discretos paralelos  ” , Journal of Systems and Software , vol.  56, n o  1,1997, p.  91-99 ( DOI  10.1.1.56.4176 )
  • (pt) Mark Strembeck e Uwe Zdun , “  Uma abordagem para o desenvolvimento sistemático de linguagens específicas de domínio  ” , Software: Practice and Experience , vol.  39,agosto de 2009, p.  1235–1311 ( ISSN  2153-2192 , DOI  10.1002 / spe.v39: 15 , leia online )
  • (pt) Martin Fowler , “  Language Workbenches: The Killer-App for Domain Specific Languages?  » , SIGPLAN. ,Junho de 2005( leia online )
  • (pt) John MD Hill e Kenneth L. Alford , "  A Distributed Task Environment for Teaching Artificial Intelligence with Agents  " , SIGCSE Journal ,2004, p.  224-228 ( ler online )
  • (en) Marjan Mernik , Jan Heering e Anthony: M. Sloane , “  Quando e como desenvolver linguagens de domínio específico  ” , SIGPLAN Not. , vol.  37,dezembro de 2005, p.  316-344 ( DOI  10.1145 / 1118890.1118892 , leia online )
  • (pt) Margus Freudenthal , “  Domain-Specific Languages ​​in a Customs Information System  ” , IEEE Software , vol.  27, n o  22010, p.  65-71 ( ISSN  0740-7459 , DOI  10.1109 / MS.2010.41 )
  • (en) DA Ladd e JC Ramming , “  Duas linguagens de aplicação na produção de software  ” , USENIX Very HighLevel Languages ​​Symposium Symposium Proceedings ,1994, p.  169-178 ( ler online )
  • (pt) David A. Watt , conceitos e paradigmas de linguagem de programação ,1990, 9  p. ( apresentação online )

Sites de referência

links externos