Creación de DSL en Java, Parte 1: ¿Qué es un lenguaje específico de dominio?

Si alguna vez ha escrito un archivo MAKE o diseñado una página web con CSS, ya se ha encontrado con un DSL o lenguaje específico de dominio. Los DSL son lenguajes de programación pequeños y expresivos diseñados a medida para tareas específicas. En esta serie de cuatro partes, Venkat Subramaniam presenta el concepto de DSL y, finalmente, le muestra cómo construirlos usando Java. En este primer artículo, Venkat explica qué es un DSL y define la diferencia entre un DSL externo y uno interno. Luego señala algunos DSL que probablemente haya estado usando durante años, quizás sin siquiera darse cuenta.

Si ha estado involucrado escribiendo o simplemente usando aplicaciones, es probable que ya haya encontrado lenguajes específicos de dominio o DSL, incluso si no se dio cuenta en ese momento. Un archivo de entrada de palabras clave para una aplicación que recibe datos de entrada es un DSL. Un archivo de configuración es un DSL. Un archivo MAKE es un DSL que se usa para especificar reglas y dependencias para construir una aplicación. Si ha escrito alguno de estos, ya ha dado los primeros pasos para crear lenguajes específicos de dominio.

La palabra idioma en la frase puede llevarlo a esperar que un DSL use sintaxis para expresar cierta semántica. A diferencia de un lenguaje de propósito general como Java, un DSL tiene un alcance y capacidades bastante limitados; como sugiere su nombre, los DSL se centran en un determinado tipo de problema o dominio, y en expresar un conjunto reducido de soluciones dentro del contexto de ese alcance limitado. Y eso es bueno: los DSL son simples y concisos.

Bien, eso es L; ¿qué pasa con D y S?

La palabra dominio en DSL se refiere a "un área o esfera de conocimiento, influencia o actividad". (Para obtener más información, consulte Diseño basado en dominios de Eric Evans.) Centrarse en un dominio le brinda un contexto : un marco lógico dentro del cual puede desarrollar modelos para una aplicación.

La palabra específica en DSL le da un contexto limitado. Te ayuda a mantener las cosas relevantes, enfocadas, concisas y expresivas.

La simplicidad es fundamental para el éxito de un DSL. Una persona familiarizada con el dominio del idioma debe comprenderlo fácilmente. Por ejemplo, si está creando un DSL que los actuarios usarán para expresar reglas comerciales en el ámbito de los seguros, no querrá que dediquen mucho tiempo a aprender un lenguaje difícil y complicado. Desea que se centren en expresar los detalles asociados con los riesgos de seguros de una manera que puedan comprender, discutir, evolucionar y mantener fácilmente. El DSL que cree para ellos debe basarse en su vocabulario, los términos que usan todos los días para comunicarse con sus compañeros. Desea que utilicen la sintaxis que usted proporciona, pero les debería parecer que simplemente están especificando algunas reglas discretas.Y deberían poder hacerlo sin tener la impresión de que realmente están programando o incluso usando algún tipo de lenguaje.

Crear un buen DSL es como cocinar una comida nutritiva; al igual que quiere que los niños coman verduras sin darse cuenta y sin preocuparse por ellas, quiere que los clientes usen su DSL sin preocuparse por su sintaxis.

La concisión es otra parte de la escritura de un buen DSL, lo que significa elegir una sintaxis que sea a la vez concisa y expresiva. La concisión dentro de lo razonable hace que su código sea más fácil de leer y mantener. La expresividad ayuda a promover la comunicación, la comprensión y la velocidad. Por ejemplo, para alguien que entiende la multiplicación de matrices, matrixA.multiply(matrixB);es menos expresivo y conciso que matrixA * matrixB. El primero implica llamar a funciones y usar paréntesis, e incluye un punto y coma intimidante. Esta última ya es una expresión que nos resultará bastante familiar.