DOT DSL

DOT DSL

Intermedia

Instrucciones

Un lenguaje específico de dominio (DSL) es un lenguaje pequeño optimizado para un dominio específico. Como un DSL está enfocado, puede mejorar mucho la productividad y la comprensión, ya que permite a quien lo escribe declarar qué quiere en lugar de cómo.

Una de las áreas problemáticas donde se aplican son las personalizaciones y configuraciones complejas.

Por ejemplo, el lenguaje DOT te permite escribir una descripción textual de un grafo que luego se transforma en una imagen con alguna de las herramientas de Graphviz (como dot). Un grafo simple se ve así:

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

Si pones esto en un archivo example.dot y ejecutas dot example.dot -T png -o example.png, se crea una imagen example.png con un círculo rojo y uno azul conectados por una línea verde sobre un fondo amarillo.

Escribe un lenguaje específico de dominio similar al lenguaje dot de Graphviz.

Nuestro DSL se parece al lenguaje dot de Graphviz en que se usará para crear estructuras de datos de grafos. Sin embargo, a diferencia del lenguaje DOT, nuestro DSL será un DSL interno que se usará solo en nuestro lenguaje.

Aprende más sobre la diferencia entre los DSL internos y externos.

Crea tu propio DSL

En este ejercicio, eres completamente libre de diseñar el DSL de grafos de tus sueños.

Tal vez te gustaría crear un DSL basado en listas de etiquetas y registros, así:

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

O quizá preferirías un DSL basado en cadenas de llamadas a funciones, así:

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

¿O tal vez tengas un plan muy distinto? ¡Adelante! Las pruebas solo requieren que crees unos cuantos grafos específicos; la forma de construirlos depende totalmente de ti.

Dicho esto, un DSL suele ser mejor si es claro, conciso y no demasiado sorprendente (por ejemplo, la función minus está pensada para restar, no para construir una arista entre dos nodos, como en node("a") - node("b")).

Para duplicar la diversión, puedes intentar implementar, de forma opcional, una función to_dot que convierta tu grafo al formato DOT.


Fuente

WikipediaEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Roc Exercism

¿Todo listo para empezar DOT DSL?

Regístrate en Exercism para aprender y dominar Roc con 126 ejercicios y mentoría humana real, todo gratis.