Linguagem específica de domínio (DSL)

Uma linguagem específica de domínio (DSL) é uma linguagem de programação que é desenvolvida para satisfazer uma necessidade específica.  Neste sentido, um domínio é uma área estreita de interesse.

Uma DSL pode ser desenvolvida para satisfazer as necessidades de uma plataforma, sistema, conjunto de ferramentas, problema de software, indústria ou desafio de negócios em particular que não pode ser eficazmente resolvido através do uso das linguagens principais. Exemplos de DSLs comumente usadas incluem folhas de estilo em cascata (CSS), Ant e SQL. O código legível por humanos que muitas DSLs empregam também pode ajudar a melhorar a colaboração entre programadores e outros interessados. 

Uma DSL pode ser contrastada com uma linguagem de uso geral, como C#, que é projetada para atender a uma ampla gama de necessidades em todo o cenário de desenvolvimento de software. Em muitos casos, um subconjunto de uma linguagem de uso geral pode ser desenvolvido e implementado como uma linguagem de domínio específico para resolver um problema em particular. Ruby (particularmente Ruby on Rails) e Scala são exemplos de linguagens que se prestam ao desenvolvimento destas DSLs internas. Por exemplo, o Scala pode ser usado para criar uma DSL para domínios altamente complexos como as trocas comerciais na indústria da energia. A maioria dos projetos de software irá incorporar uma linguagem geral e várias DSLs periféricas para adicionar funcionalidades necessárias para vários domínios dentro do sistema.