Uma língua específica de domínio (DSL) é uma língua destinada a ser utilizada no contexto de um domínio em particular. Um domínio pode ser um contexto empresarial (por exemplo, bancos, seguros, etc.) ou um contexto de aplicação (por exemplo, uma aplicação web, base de dados, etc.) Em contraste, uma linguagem de uso geral (GPL) pode ser utilizada para uma vasta gama de problemas e aplicações empresariais.
A DSL não tenta agradar a todos. Em vez disso, é criada para uma esfera limitada de aplicabilidade e utilização, mas é suficientemente poderosa para representar e abordar os problemas e soluções nessa esfera. Um bom exemplo de uma DSL é o HTML. É uma linguagem para o domínio de aplicação web. Não pode ser utilizada para, digamos, a compressão de números, mas é claro quão amplamente utilizada é a linguagem HTML na web.
Um criador de GPL não sabe onde a linguagem pode ser utilizada ou os problemas que o utilizador pretende resolver com ela. Assim, uma GPL é criada com construções genéricas que são potencialmente utilizáveis para qualquer problema, solução, negócio, ou necessidade. Java é uma GPL, uma vez que é utilizada em desktops e dispositivos móveis, incorporada na web através da banca, finanças, seguros, fabrico, etc., e mais.
Classificar DSLs
No mundo DSL, existem dois tipos de linguagens:
- Linguagem específica de domínio (DSL): A língua em que uma DSL é escrita ou apresentada
- Língua de acolhimento: A língua na qual uma DSL é executada ou processada
Uma DSL escrita numa língua distinta e processada por outra língua anfitriã é chamada DSL externa.
Esta é uma DSL em SQL que pode ser processada numa língua do anfitrião:
SELECT account
FROM accounts
WHERE account = '123' AND branch = 'abc' AND amount >= 1000
Por isso, uma DSL pode ser escrita em inglês com um vocabulário e uma forma definidos que podem ser processados noutra língua do anfitrião usando um gerador de parser como ANTLR:
if smokes then increase premium by 10%
Se a DSL e a língua anfitriã são a mesma, então o tipo de DSL é interno, onde a DSL é escrita na semântica da língua e processada por ela. Estas também são referidas como DSLs incorporadas. Aqui estão dois exemplos.
- Uma DSL Bash que pode ser executada num motor Bash:
if today_is_christmas; then apply_christmas_discount; fi
Esta é uma Bash válida que é escrita como o inglês.
- Uma DSL escrita numa GPL como Java:
orderValue = orderValue
.applyFestivalDiscount()
.applyCustomerLoyalityDiscount()
.applyCustomerAgeDiscount();Este usa um estilo fluente e é legível como inglês.
Sim, as fronteiras entre DSL e GPL por vezes desfocam-se.
Exemplos de DSL
algumas linguagens usadas para DSLs incluem:
- Web: HTML
- Li>Línguas de marcação: XML
- Gestão de dados: SQL e as suas variantes
- Regras de negócio: Drools
- Hardware: Verilog, VHD
- Ferramentas de construção: Maven, Gradle
- Computação e simulação numérica: MATLAB (comercial), GNU Octave, Scilab
- Vários tipos de parsers e geradores: Lex, YACC, GNU Bison, ANTLR
li>Shell: sh, Bash, CSH, e os gostos para *nix; MS-DOS, Windows Terminal, PowerShell para Windows
Li>Modelagem: UML
Porquê DSL?
O objectivo de uma DSL é capturar ou documentar os requisitos e comportamento de um domínio. A utilização de uma DSL pode ser ainda mais restrita para aspectos particulares dentro do domínio (por exemplo, comércio de mercadorias em finanças). As DSLs reúnem as equipas comerciais e técnicas. Isto não implica que uma DSL seja apenas para uso comercial. Por exemplo, designers e programadores podem usar uma DSL para representar ou conceber uma aplicação.
Uma DSL também pode ser usada para gerar código fonte para um domínio ou problema abordado. Contudo, a geração de código a partir de uma DSL não é considerada obrigatória, uma vez que o seu objectivo principal é o conhecimento do domínio. Contudo, quando é utilizada, a geração de código é uma vantagem séria na engenharia de domínio.
Prós e contras da DSL
No lado positivo, as DSLs são poderosas para capturar os atributos de um domínio. Além disso, como as DSLs são pequenas, são fáceis de aprender e usar. Finalmente, uma DSL oferece uma linguagem para peritos de domínio e entre peritos de domínio e programadores.
No lado negativo, uma DSL é estritamente utilizada dentro do domínio e finalidade pretendidos. Além disso, uma DSL tem uma curva de aprendizagem, embora possa não ser muito elevada. Além disso, embora possa haver vantagens na utilização de ferramentas de captura de DSL, estas não são essenciais, e o desenvolvimento ou configuração de tais ferramentas é um esforço adicional. Finalmente, os criadores de DSL precisam de conhecimentos de domínio, bem como de conhecimentos de desenvolvimento de linguagem, e os indivíduos raramente têm ambos.
Opções de software DSL
Opções de software DSL de fonte aberta incluem:
- Xtext: Xtext permite o desenvolvimento de DSLs e está integrado com Eclipse. Torna possível a geração de código e tem sido utilizado por vários produtos de código aberto e comerciais para fornecer funções específicas. MADS (Multipurpose Agricultural Data System) é uma ideia interessante baseada no Xtext para “modelação e análise de actividades agrícolas” (contudo, o projecto parece já não estar activo).
- JetBrains MPS: JetBrains MPS é um ambiente de desenvolvimento integrado (IDE) para criar DSLs. Chama-se a si próprio um editor projeccional que armazena um documento como a sua estrutura de árvore abstracta subjacente. (Este conceito é também utilizado por programas como o Microsoft Word.) JetBrains MPS também suporta a geração de código para Java, C, JavaScript, ou XML.
Belas práticasDSL
Quer utilizar uma DSL? Aqui estão algumas dicas:
- DSLs não são GPLs. Tente abordar gamas limitadas de problemas no domínio definitivo.
- Não precisa de definir a sua própria DSL. Isso seria enfadonho. Procure uma DSL existente que resolva a sua necessidade em sítios como DSLFIN, que lista DSLs para o domínio financeiro. Se não conseguir encontrar uma DSL adequada, poderá definir a sua própria.
- é melhor fazer DSLs “como o inglês” do que demasiado técnicas.
- Geração de códigos a partir de uma DSL não é obrigatória, mas oferece vantagens significativas e produtivas quando é feita.
- DSLs são chamadas línguas mas, ao contrário das GPLs, não precisam de ser executáveis. Ser executável não é a intenção de uma DSL.
- DSLs podem ser escritas com processadores de texto. No entanto, a utilização de um editor DSL facilita as verificações de sintaxe e semântica.