O que é linguagem específica de domínio? Qualquer pessoa a usá-lo? E de que maneira?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu acho que eu estou procurando algum tipo de introdução e ver se alguém tê-lo usado. Existem quaisquer vantagens particulares de usá-lo?

Wikipedia:

linguagem específica de domínio (DSL) é uma linguagem de linguagem de programação ou especificação dedicado a um determinado domínio do problema, uma técnica de representação problema particular, e / ou uma técnica de solução particular.

Alguém pode dar alguns exemplos específicos de como você implementou ou como ele pode ser útil em um determinado cenário?

Foi útil?

Solução

A linguagem específica de domínio é uma linguagem que está escrito para lidar com um domínio específico ou conjunto de preocupações. Há um monte deles por aí, como marca, formiga, e ancinho para descrever software constrói, ou lexx e yacc para a construção da linguagem. Nos últimos anos, eles se tornaram populares como algumas coisas se combinaram para torná-los mais fáceis de construir. Big entre essas coisas tem sido a crescente popularidade do Ruby, que tem várias características que o tornam fácil de construir novas DSLs.

Martin Fowler é um grande defensor da idéia, como aqui .

Outras dicas

Você pode pensar em DSLs como argumentos excessivamente complexos para funções escritas em uma linguagem de programação mais geral. A linguagem de programação real, analisa o código DSL e faz algo com eles, normalmente, o código de DSL só incide sobre o o que você quer fazer, e os números do sistema maiores a como .

Exemplos de DSL incluem todas as linguagens de consulta (SQL, XPath, ...), todas as línguas modelo (Django, Smarty, ...), shell scripts, especialmente incluindo coisas como sarja, um conduzido comando navegador web (usado principalmente para o teste automatizado), armazenamento de dados e linguagens de câmbio (XML, YAML, ...), e idiomas do documento como o látex, HTML ou CSS.

Algumas linguagens com sintaxe muito flexível como TCL e Lisp construir a sua DSL diretamente para a língua ... quando possível. A maioria das linguagens usam cordas, geralmente carregados a partir de arquivos externos.

Existem quaisquer vantagens particulares de usá-los? Usá-los para os fins previstos é muito vantajoso para o ponto que vai recorrer a eles sem saber, assim como você tem usado (presumo) SQL ou HTML sem pensar neles como DSLs.

Eu ouso dizer que há DSLs suficientes lá para qualquer tipo de aplicação que você pode precisar para fora; você quase certamente não precisa aprender a escrever o seu próprio.

(abordando o cerne da questão)

Eu acho que a primeira vez que vi o tempo DSL em algum lugar e sua definição como "específica de domínio linguagem" Eu também pensei que era uma linguagem particular, concreto que eu não tinha ouvido falar -, mas, não, é um termo geral para idiomas que são adaptados para uma área de aplicação particular.

Ironicamente, se você tivesse acabado de ouvir sobre TCL como uma "linguagem de comando da ferramenta", você pode acho que, como DSLs, que haveria muita TCLS para várias ferramentas -. mas, não, seu nome específico de uma linguagem de script especial

Eu acho que é uma linguagem adequada para resolver os problemas para um domínio específico. Poderia ser algum idioma ou serviço linguagem de descrição de processamento de regra.

Um oposto a uma linguagem específica de domínio (DSL) é uma general-purpose idioma .

A DSL é uma boa maneira de desenvolver uma linguagem para ser usado por não-programadores. Por exemplo, se você tem uma DSL para as finanças pessoas em uma empresa, então ao invés de programar a sua especificação você pode simplesmente deixá-los escrever o programa que eles querem fazer. Então, se ele for muito lenta, então você pode tomar o que eles escreveram que funciona como eles querem, escrevê-lo em uma linguagem compilada para acelerá-lo.

Tudo é uma DSL ...

Assembler: MOV R1 para R2
Compiladores: Instruções de Atribuição - A = A + 1, Condicionais - IF (TRUE) ..., Branch - RETURN
HTML: ... descrever uma estrutura aninhada
TCP / IP: descrever para / de endereços
PDF: descrever colocação do texto / imagem no papel
Fontes: descrever personagens

Qualquer linguagem que usamos para descrever um processo específico é uma DSL. Infelizmente não há uma falta de linguagens específicas de domínio para descrever até mesmo os nossos processos mais básicos, por isso usamos poucas línguas nós temos para descrever tudo o que fazemos. "Feche todos os arquivos html no meu web site" exige 300 linhas de 3 ou 4 idiomas diferentes para completar.

Para construir uma DSL determinar o número mínimo de caracteres necessários para descrever um processo que você pode se lembrar e não precisa de documentação. Lembre-se que a velocidade e facilidade de uso são os critérios de projeto primários. Análise é tão rápido que qualquer sintaxe que você uso é bom, eu prefiro linguagem natural como o meu sintaxe na maioria dos casos, "pagar os funcionários no primeiro dia do mês", mas específica de domínio é apenas isso, de domínio específico, você determina a sintaxe que melhor se encaixa o problema.

Gostaria de ficar longe do uso de outras soluções que podem ser conveniente, mas não se encaixam no problema, como HTML que foi usado para definir dados (XML). CSV é muito útil, ele se encaixa a maioria dos problemas. O JSON não caber a facilidade de parcela uso, é um exagero que adiciona complicações desnecessárias foram CSV funciona para a maioria problema. Usamos EXCEL muito para DSL, ele funciona muito bem para descrever pequenos problemas, sob 65K para linhas 1 milhão, como uma estrutura de árvore ou menus, a coluna A é o nível, outras colunas são ícones, cores, etiquetas e tal (EXCEL é um editável CSV).

Descobri que HTML realmente não resolver o problema de layout de página, então eu me livrei dele e definiu um DSL que se encaixa. Defini 6 regiões sobre as margens da página de cabeçalho, CORPO, rodapé, esquerda / direita, e as margens esquerda / pleno direito. Eu poderia então dizer o gerador de página para adicionar uma barra de título, STATUS BAR, menus, TABLE, formulários, ..., a células específicas. Cada uma dessas células poderia, então, ser dividida em linhas e colunas para qualquer profundidade. layout de página leva alguns segundos para qualquer estilo.

CORPO contém uma tabela dos meus funcionários
Cabeçalho contém uma legenda barra de título 'Olá Mundo' com login para Collins Software

A DSL menu não se encaixam no DSL layout de página, então eu construí uma DSL única para menus.

Resource Meu Menu Principal
* Definir: Menu, m, Nível, Etiqueta, Ícone, Acção;
m, 0, arquivo;
m, 1, aberto, open.gif, de diálogo Abrir Arquivo;

Cada problema é único, o computador pode usar qualquer formato, é o ser humano que DSLs são projetados para, então torná-lo compreensível por seres humanos, algo que pode digitar, e tornar a linguagem sem palavras reais; pois é real, as pessoas, lugares e coisas que estamos descrevendo.

Bem! há muitas coisas explicado acima. Vou tentar explicar isso de maneira muito mais simples como alguém como me vêm vai entender.

Como linguagens de propósito geral são usados ??para fins vastas do DSL é feita apenas para o domínio específico. Como HTML ou CSS.

Você pode dizer se você escreveu instruções para um papel que só uma pessoa ou sua única melhor amigo pode entender e ninguém mais podia. Em seguida, ele pode ser um DSL. Mas se você escreveu instrução em tais termos que muitas pessoas poderiam entender e poderia seguir então este não é DSL.

Eu Onces criou uma placa de interruptor para o usuário que pode ser operado através da porta serial de um computador e usuário quer um programa para que o conselho que poderia ser executado em que o conselho e relé liga será ligada e desligada em conformidade. Então, eu escrevi algumas instruções e disse que o usuário programa que placa de acordo com estas instruções. Este é um exemplo de DSL. Eu não inventou um novo idioma em vez Acabei de criar grupo de cordas que o micro controlador pode ler a partir de EEPROM e pôde analisar em conformidade e pode executar uma tarefa específica.

Eu escrevi um post breve blogue discutir por isso que eu gosto de usar DSLs:

Eu gostaria que usados ??Domain Specific Languages ??(DSLs) Mais

Nele, eu definir uma DSL como:

A linguagem de programação pequeno projetado especificamente para se comunicar soluções para um determinado domínio de problemas.

Em termos de utilização, se você já usou Ant, Structured Query Language (SQL), ou Cascading Style Sheets (CSS), você já usou uma DSL.

Eu gosto de usar DSLs porque eles se concentrar em facilitar a comunicação de soluções para espaços de problemas específicos, e fazem isso de uma forma que promove a inclusão de especialistas de domínio.

Um exemplo simples para Domain Specific Language (DSL) é HTML que é usado para o domínio particular chamada aplicações baseadas na web.

Eu apenas ouvi recentemente DSL, mas encontrar um exemplo realmente útil:. LUNA (ex-lunascript)

É um feito por linguagem de programação / framework feita pela equipe Asana para sua própria plataforma.

Como eu ainda encontrar, muitas empresas fazem seus próprios frameworks e linguagens, a fim de criar uma vantagem competitiva adequada, alguns exemplos são:

  • SAP com ABAP
  • PeopleSoft com PeopleCode
  • Apple com Objective-C
  • O Facebook tem coisas como FBML e FQL

Aqueles são específicas de domínio, porque você vai usá-los quase que exclusivamente para trabalhar nessas plataformas.

Espero que esta resposta ajude a esclarecer sobre o conceito.

Um exemplo de uma DSL usado em Machine Learning é bode expiatório em python: https://patsy.readthedocs.io/en/latest/formulas.html#

que é baseado fora a fórmula DSL de R: https://stat.ethz.ch/ R-manual / R-devel / biblioteca / estatísticas / html / formula.html

https://cran.r-project.org /web/packages/Formula/vignettes/Formula.pdf

e Hadley tem uma boa parte de seu avançado livro R que descreve como construir uma DSL w / R: http://adv-r.had.co.nz/dsl.html

Uma vez que o campo de aprendizagem profunda estabiliza um pouco (ou mesmo agora) eu adoraria ver algo semelhante surgem dentro do projeto Apache MXnet. No entanto, eu não vi qualquer proposta de que no página proposta ainda embora.

linguagens específicas de domínio expressar seus processos e conhecimento de domínio em uma linguagem que usa diretamente os conceitos e lógica de seu campo particular.

A comunidade está definitivamente crescendo, mas ainda não no nível de outras tecnologias "mainstream".

Na maioria das vezes, DSLs são feitos para melhorar a produtividade dentro das empresas, para que eles mantê-lo privado e não compartilhar seus resultados / insights.

Aqui está uma conferência onde o orador dá alguns exemplos de DSL usando JetBrains MPS , com o tecnologia de edição Projectional: https://vimeo.com/197381453

DSL - DomainSpecificLanguage

DSL é uma linguagem de computador que está direcionada a um determinado tipo de problema, em vez de uma linguagem de propósito geral que é destinada a qualquer tipo de problema de software.

Onde: configurações (TravisCI .yaml), scripts de construção ( Gradle ), dependências dos alvos (< a href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod ), programação de interface do usuário ( Anko ) etc.

DSL é uma programação declarativa - O para fazer em vez disso como fazer

DSLs Externa tem sua própria sintaxe de costume e você escrever um analisador completo para processá-los (por exemplo. XML, RegExp, SQL, HTML, CSS, UML).

DSLs Interno são formas particulares de usar uma linguagem hospedeira para dar a língua de acolhimento a sensação de uma língua particular (por exemplo. Lisp, Ruby, anotações Java, macros).

Leia mais aqui , aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top