DOT DSL

DOT DSL

Media

Instrucciones

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

Un área problemática 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 después se transforma en una imagen con alguna de las herramientas de Graphviz (como dot). Un grafo sencillo tiene este aspecto:

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

Si guardas esto en un fichero example.dot y ejecutas dot example.dot -T png -o example.png, se crea una imagen example.png con un círculo rojo y otro azul unidos 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 tipo grafo. Sin embargo, a diferencia del lenguaje DOT, nuestro DSL será un DSL interno que solo se podrá usar en nuestro lenguaje.

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

Crea tu propio DSL

En este ejercicio, tienes total libertad para diseñar el DSL de grafos de tus sueños.

Quizá 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 quizá tienes un plan muy diferente? ¡Adelante! Las pruebas solo requieren que crees unos cuantos grafos concretos: la forma en que los construyas 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 crear una arista entre dos nodos, como en node("a") - node("b")).

Para que sea aún más divertido, opcionalmente puedes intentar implementar una función to_dot que convierta tu grafo al formato DOT.


Fuente

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

¿Listo para empezar DOT DSL?

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