procurando evidências científicas dos benefícios de utilizar uma ligação DSL

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

  •  06-07-2019
  •  | 
  •  

Pergunta

A palestra de Greg Wilson "fragmentos de evidência" ( http: // www. slideshare.net/gvwilson/bits-of-evidence-2338367 ) discute a falta de evidências por trás das seguintes afirmações de que Martin Fowler tem avançado como benefícios de utilizar uma ligação DSL:

"[usando uma linguagem de domínio de sepcific] levam a duas vantagens principais. O primeiro e mais simples é a melhoria da produtividade do programador. A segunda ... é ... a comunicação com especialistas de domínio." - Martin Fowler em IEEE Software Julho / Agosto de 2009

Pergunta: Existem estudos empíricos fornecem evidência de qualquer produtividade do programador melhorada ou melhor comunicação com especialistas do domínio de utilizar uma ligação DSL

?

Muitas pessoas constroem DSLs são incapazes de fornecer uma resposta fundamentada ao "por que você está construindo uma DSL?" e "por que uma ajuda DSL mais do que um modelo de objeto bem consignado?"

Eu ouço um monte de "Eu estou fazendo isso porque é legal e todo mundo está fazendo isso." - que não é uma resposta racional

Eu acredito que DSLs são úteis, pelo menos por algum tempo, mas que eles não são susceptíveis de ser uma "bala de prata" que deve ser usado indiscriminadamente. Eu gostaria de ver algum trabalho científico que descreve quando DSLs deve e não deve ser utilizado -. Baseado em pesquisa empírica

Foi útil?

Outras dicas

Depende do que você considera uma DSL para ser.

Por exemplo, é css uma DSL? Eu acho que sim, então ele obviamente pode tornar mais fácil ao estilo de uma página, como, em HTML 3 foram utilizadas tabelas para arranjos, e não têm a flexibilidade que fazemos agora.

Se você tem uma DSL para que os alunos podem projetar moléculas usando apenas os símbolos atômicos (H20), então seria mais simples do que fazer o mesmo de codificação, como você pode rapidamente olhar para a configuração molecular se você der os símbolos e tipos de colagem, por exemplo.

Eu não sei de um artigo mostrando uma forma ou outra, mas, se o seu público-alvo não é programadores, em seguida, uma DSL faz sentido, para que possamos ter contadores de escrever sua aplicação, usando sua terminologia, ao invés de tê-los dar requisitos para os desenvolvedores.

DSLs foram em torno de um longo tempo, mas agora estão se tornando mais popular, assim que o tempo vai dizer quando há mais exemplos de bons e maus usos como para quando é melhor usá-lo e quando ele realmente é prejudicial. Eu não iria escrever software acompanhamento médico com qualquer DSL, por exemplo.

Toda a premissa de "científico", neste caso, é duvidoso. Não há simplesmente nenhuma maneira de garantir os critérios de "reprodutível", "controle (grupo)" necessário para um estudo empírico.

De um modo geral na programação de negócios não existem estudos empíricos graves sobre os benefícios de algo antes de ser usado. Se isso é SQL, linguagens orientadas a objeto, linguagens funcionais, coleta de lixo, etc.

Essas coisas tendem a ser decidido pelo mercado ao longo do tempo.

Por que este é o caso é provavelmente uma combinação de duas razões. Uma delas é que é muito caro para obter um bom estudo empírico e é muito mais barato a partir de um ponto de vista econômico para apenas experimentá-lo. A outra é que cada situação é diferente, então um estudo empírico teria que começar com a limitação do problema em estudo muito pouco para ter uma comparação adequada entre utilizar uma ligação DSL e não usar um, e o resultado final do estudo não seria muito útil além do tipo específico de problema que foi escolhido.

Eu acho que podemos dizer com segurança por experiência que nada é uma bala de prata, e insistindo em uma boa razão para uma abordagem fará qualquer solução melhor, porque mesmo que um DSL ajudaria a situação, se você não sabe por que você está fazendo isso, você não vai saber se você está fazendo certo e pode acabar perdendo todo o benifit.

Esta é uma questão sensível, e eu acho que existem problemas de definição, como "o que é um DSL"? Quando um buzword torna-se "quente" torna-se uma oportunidade de marketing e é divorciada do subjacente ciência, se houver alguma.

Alguns anos atrás, eu escrevi um livro (Applications Building Better, ISBN 0-442-01740-5, muito fora de catálogo), onde eu tentei olhar para o desempenho, não só de programas, mas de programadores. Eu tentei olhar para ele usando a teoria da informação.

Eu vim com uma medida bruta de manutenção, onde existe um problema como uma estrutura de conhecimento na cabeça de alguém (não há problema para um AI cara para dizer isso), e sua solução existe como uma estrutura textual processado por uma máquina. O que eu olhar é a relação entre essas duas estruturas. Por exemplo, se ocorrer uma alteração na descrição do problema mental, quantas fonte alterações de código são obrigados a transferir isso para o texto do programa corretamente? Uma maneira simples de medir isto é diff o código entre antes e depois. Agora, média essa medida no espaço de mudanças que provavelmente, e mais baixa a média, mais sustentável é o código-fonte.

A minha tese foi que o código mais sustentável é, por essa medida, mais ele vem para se assemelhar ao modelo mental do domínio, por isso é razoável para chamá-lo mais "específico domínio de" mais "orientada problema" ou . Uma I característica notado desse código é que ele tende a ser mais um declaração do problema, em vez de um Solução do problema. A solução não reside na língua, mas na implementação da linguagem, a sub-estrutura. Este é um eco, embora não um acordo directo, com o conceito de linguagem "declarativa" versus "imperativo".

Assim, na tentativa de responder à sua pergunta, eu diria que vamos chegar longe do que as pessoas podem querer "DSL" para significar e, em vez olhar para uma definição que é pelo menos moderadamente inequívoca.

Como parte do desenvolvimento dessa idéia, eu tinha tropeçado em uma série de técnicas, uma das quais é Execução Diferencial, que parece dar boa manutenção para codificação UIs, e também reduz o tamanho do código fonte em cerca de uma ordem de magnitude. Minha teoria é que isso é um exemplo bem sucedido do que uma DSL pode ser.

Eu não tenho a pretensão de que manutenção pode ser alcançada sem o mantenedor ter que subir uma curva de aprendizagem. Acho verdadeira manutenção tem um preço de programadores que têm de aprender coisas que podem não ser fáceis de entender, mas imediatamente captou tem o valor desejado.

De linguistas Saphir e Worf, podemos aprender, que características gramaticais de uma língua influenciar nosso pensamento = se você criar uma DSL, você estará pensando específico domínio de mais e provavelmente menos de uso geral. É tudo sobre a abstração, assim como linguagens de programação de propósito geral tendem a abstrair a máquina, de modo que são capazes de se concentrar mais em algoritmos, estruturas e design do que no conjunto de instruções, modos de endereçamento, cadastre tamanhos etc.

Não tão certo que alguém tenha feito nenhum estudo na medida em que você precisa. A minha experiência é que embora uma DSL pode ser caro para criar, em primeiro lugar (possivelmente 2X ou mais esforço do que um modelo de objeto simples de fazer a mesma coisa). No entanto, uma vez criados os desenvolvedores iria receber benefício imediato por ser capaz de fazer as coisas mais rápido com o DSL do que com o modelo.

O problema com a questão é que é tratar todas as DSLs como iguais. Alguns seria mais fácil de implementar, outros mais difícil -. Se se está fazendo Fluent Interfaces / DSLs interno ou DSLs externas levaria a diferentes tempos / custo para implementar

Um benefício principal que não pode ser objecto de tais estudos é a facilidade que uma DSL pode levar a expressar e implementação de código. Pode também ajudar os outros a entender a intenção do código, possivelmente mais fácil - e desde fase de manutenção do ciclo de vida de desenvolvimento de software é um grande componente tão do SDLC isso pode levar a benefícios muito maiores (no longo prazo) do que o inicialmente perdido na criação do DSL .

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