DOT DSL

DOT DSL

Médio

Instruções

Uma Linguagem Específica de Domínio (DSL) é uma pequena linguagem otimizada para um domínio específico. Como uma DSL é direcionada, pode ter um grande impacto na produtividade e na compreensão, ao permitir que quem a escreve declare o quê em vez de como.

Uma das áreas onde são aplicadas é a das personalizações e configurações complexas.

Por exemplo, a linguagem DOT permite-te escrever uma descrição textual de um grafo que é depois transformada numa imagem por uma das ferramentas Graphviz (como o dot). Um grafo simples tem este aspeto:

graph {
    graph [bgcolor="yellow"]
    a [color="red"]
    b [color="blue"]
    a -- b [color="green"]
}

Ao colocar isto num ficheiro example.dot e executar dot example.dot -T png -o example.png, crias uma imagem example.png com um círculo vermelho e outro azul, ligados por uma linha verde, sobre um fundo amarelo.

Escreve uma Linguagem Específica de Domínio semelhante à linguagem dot do Graphviz.

A nossa DSL é semelhante à linguagem dot do Graphviz, na medida em que será usada para criar estruturas de dados de grafos. No entanto, ao contrário da linguagem DOT, a nossa DSL será uma DSL interna, para uso exclusivo na nossa linguagem.

Sabe mais sobre a diferença entre DSLs internas e externas.

Cria a tua própria DSL

Neste exercício, tens total liberdade para desenhar a DSL de grafos dos teus sonhos.

Talvez queiras criar uma DSL baseada em listas de etiquetas e registos, como esta:

my_graph =
    Graph.create([
        Title("My Graph"),
        Node("a", { color: Green }),
        Node("b", { color: Blue }),
        Edge("a", "b", { style: Dotted }),
    ])

Ou talvez prefiras uma DSL baseada em cadeias de chamadas de funções, como esta:

my_graph =
    Graph.create()
        .with_title("My Graph")
        .add_node("a", Attr.create().with_color(Green))
        ...

Ou talvez tenhas um plano completamente diferente? Avança! Os testes só te pedem que cries alguns grafos específicos; a forma como os construis depende inteiramente de ti.

Dito isto, uma DSL costuma ser melhor se for clara, concisa e não demasiado surpreendente (por exemplo, a função minus serve para subtrair, não para criar uma aresta entre dois nós, como em node("a") - node("b")).

Para tornar isto ainda mais divertido, podes, se quiseres, tentar implementar uma função to_dot que converte o teu grafo para o formato DOT!


Fonte

WikipediaO link abre numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Roc Exercism

Estás pronto para começar DOT DSL?

Inscreve-te no Exercism para aprenderes e dominares Roc com 126 exercícios, e mentoria humana real, tudo grátis.