Los Lenguajes Específicos de Dominio (DSLs) han existido desde que estoy en la informática, pero es difícil encontrar mucha información sobre cómo trabajar con ellos. Los DSLs son pequeños lenguajes, centrados en un aspecto particular de un sistema de software. No se puede construir todo un programa con un DSL, pero a menudo se utilizan varios DSL en un sistema escrito principalmente en un lenguaje de propósito general.
Los DSLs vienen en dos formas principales: externos e internos. Un DSL externo es un lenguaje que se analiza independientemente del lenguaje de propósito general anfitrión: buenos ejemplos son las expresiones regulares y el CSS. Los DSL externos tienen una fuerte tradición en la comunidad Unix. Las DSL internas son una forma particular de API en un lenguaje de propósito general anfitrión, a menudo denominada interfaz fluida. La forma en que las bibliotecas de mocking, como JMock, definen las expectativas para las pruebas son buenos ejemplos de ello, al igual que muchos de los mecanismos utilizados por Ruby on Rails. Los DSL internos también tienen una larga tradición de uso, particularmente en la comunidad Lisp.
La gente encuentra los DSL valiosos porque un DSL bien diseñado puede ser mucho más fácil de programar que una biblioteca tradicional. Esto mejora la productividad del programador, lo que siempre es valioso. En particular, también puede mejorar la comunicación con los expertos del dominio, que es una herramienta importante para abordar uno de los problemas más difíciles en el desarrollo de software. El CSS es un excelente ejemplo de esto, la mayoría de las personas que programan CSS no se consideran programadores. Sin embargo, a pesar de esto, en general no creo que los usuarios finales suelan escribir en DSLs directamente – lo importante es la mejora de la comunicación.
Aunque los DSLs existen desde hace mucho tiempo, la falta de conocimiento de cómo programar con ellos es una barrera importante – que es exactamente la razón por la que he trabajado en este libro. El libro proporciona técnicas para desarrollar tanto DSLs internos como externos, dándote tanto la información para elegir entre ellos como un buen paquete de información para comenzar tu trabajo. También hago hincapié en la importancia de superponer un DSL a una biblioteca, de modo que normalmente se construyen ambos juntos. También hay material sobre la generación de código, que es una parte ocasionalmente esencial de trabajar con un DSL.
Al igual que P de EAA este libro es un libro dúplex, proporcionando tanto una narrativa para aprender sobre DSLs como un libro de referencia para los detalles, así que no te asustes por el alto número de páginas. Puedes tener una buena comprensión del tema leyendo la sección narrativa (142 páginas) y utilizar el resto como referencia para sumergirte en él cuando lo necesites.
Las copias electrónicas de este libro están disponibles. Amazon tiene una versión para kindle. InformIT tiene versiones en epub y pdf. Apple tiene una versión epub en la ibookstore.