Supongo que estoy buscando algún tipo de introducción y ver si alguien la ha usado. ¿Existen ventajas particulares de usarlo?
Wikipedia:
El lenguaje específico de dominio (DSL) es un lenguaje de programación o lenguaje de especificación dedicado a un dominio de problema particular, una técnica de representación de problema particular y / o una técnica de solución particular.
¿Alguien puede dar ejemplos específicos de cómo lo ha implementado o cómo puede ser útil en un escenario dado?
terminology
dsl
Srikar Doddi
fuente
fuente
Respuestas:
Un lenguaje de dominio específico es un lenguaje que se escribe para tratar un dominio específico o un conjunto de preocupaciones. Hay muchos de ellos, como make, ant y rake para describir compilaciones de software, o lexx y yacc para la construcción de lenguajes. En los últimos años, se han vuelto populares debido a que algunas cosas se han combinado para facilitar su construcción. Entre esas cosas, destaca la creciente popularidad de Ruby, que tiene varias características que facilitan la creación de nuevos DSL.
Martin Fowler es un gran defensor de la idea, como aquí .
fuente
Puede pensar en los DSL como argumentos demasiado complejos para funciones escritas en un lenguaje de programación más general. El lenguaje de programación real analiza el código DSL y hace algo con él, por lo general, el código DSL solo se centra en lo que desea hacer y el sistema más grande descubre el cómo .
Los ejemplos de DSL incluyen todos los lenguajes de consulta (SQL, XPath, ...), todos los lenguajes de plantilla (Django, Smarty, ...), scripts de shell, especialmente incluyendo cosas como twill, un navegador web controlado por comandos (usado principalmente para pruebas automatizadas ), lenguajes de almacenamiento e intercambio de datos (XML, YAML, ...) y lenguajes de documentos como LaTex, HTML o CSS.
Algunos lenguajes con sintaxis muy flexible como TCL y Lisp construyen su DSL directamente en el lenguaje ... cuando es posible. La mayoría de los lenguajes utilizan cadenas, normalmente cargadas desde archivos externos.
¿Existen ventajas particulares de usarlos? Usarlos para los fines previstos es muy ventajoso hasta el punto de que recurrirá a ellos sin saberlo, al igual que ha estado usando (supongo) SQL o HTML sin pensar en ellos como DSL.
Me atrevería a decir que hay suficientes DSL para cualquier tipo de aplicación que pueda necesitar; es casi seguro que no es necesario que aprenda a escribir uno propio.
fuente
(abordando el quid de la pregunta)
Creo que la primera vez que vi DSL en algún lugar y su definición como "lenguaje específico de dominio" , también pensé que era un lenguaje concreto y particular del que no había oído hablar, pero no, es un término general para los lenguajes que son adaptado a un área de aplicación particular.
Irónicamente, si acaba de escuchar acerca de TCL como un "lenguaje de comandos de herramientas", podría pensar, como los DSL, que habría muchos TCL para varias herramientas, pero no, es el nombre específico de un lenguaje de scripting en particular.
fuente
Creo que es un lenguaje adecuado para resolver problemas en un dominio específico. Podría ser algún lenguaje de procesamiento de reglas o lenguaje de descripción de servicios.
Un opuesto a un lenguaje de dominio específico (DSL) es un lenguaje de propósito general .
fuente
Todo es un DSL ...
Ensamblador: MOV R1 a R2
Compiladores: Declaraciones de asignación - A = A + 1, Condicionales - IF (TRUE) ..., Branch - RETURN
HTML: ... describe una estructura anidada
TCP / IP: describe hacia / desde direcciones
PDF: describe la ubicación del texto / imagen en papel
Fuentes: describe los caracteres
Cualquier lenguaje que usemos para describir un proceso específico es un DSL. Desafortunadamente, hay una falta de lenguajes específicos de dominio para describir incluso nuestros procesos más básicos, por lo que usamos los pocos lenguajes que tenemos para describir todo lo que hacemos. "Comprimir todos los archivos html en mi sitio web" requiere 300 líneas de 3 o 4 idiomas diferentes para completar.
Para crear un DSL, determine la cantidad mínima de caracteres necesarios para describir un proceso que pueda recordar y que no requiera documentación. Recuerde que la velocidad y la facilidad de uso son los principales criterios de diseño. El análisis es tan rápido que cualquier sintaxis que use está bien, prefiero el lenguaje natural como mi sintaxis en la mayoría de los casos, "Pague a los empleados el primer día del mes", pero el dominio específico es solo eso, específico del dominio, usted determina la sintaxis que mejor encaja con el problema.
Me mantendría alejado de usar otras soluciones que podrían ser convenientes pero que no se ajustan al problema, como HTML que se usó para definir datos (XML). CSV es muy útil, se adapta a la mayoría de los problemas. JSON no se ajusta a la parte de facilidad de uso, es exagerado que agrega complicaciones innecesarias donde CSV funciona para la mayoría de los problemas. Usamos mucho EXCEL para DSL, funciona muy bien para describir pequeños problemas, menos de 65K a 1M filas, como estructuras de árbol o menús, la columna A es el nivel, otras columnas son iconos, colores, etiquetas y demás (EXCEL es un CSV editable).
Descubrí que HTML no solucionaba realmente el problema del diseño de página, así que me deshice de él y definí un DSL que encajaba. Definí 6 regiones en la página, ENCABEZADO, CUERPO, PIE DE PIE, MÁRGENES IZQUIERDA / DERECHA y MÁRGENES COMPLETOS IZQUIERDA / DERECHA. Entonces podría decirle al generador de páginas que agregue una BARRA DE TÍTULO, BARRA DE ESTADO, MENÚS, TABLA, FORMULARIOS, ..., a celdas específicas. Cada una de estas celdas se podría dividir en filas y columnas a cualquier profundidad. El diseño de la página toma unos segundos para cualquier estilo.
BODY contiene una tabla de mis empleados
HEADER contiene un título de la barra de título 'Hola mundo' con inicio de sesión en Collins Software
Un menú DSL no encaja en el diseño de página DSL, así que construí un DSL único para menús.
Recurso Mi menú principal
* define: menú, m, nivel, etiqueta, icono, acción;
m, 0, archivo;
m, 1, open, open.gif, Diálogo Abrir archivo;
Cada problema es único, la computadora puede usar cualquier formato, es el humano para el que están diseñados los DSL, así que hágalo comprensible para los humanos, algo que ellos puedan escribir, y haga el lenguaje de palabras reales; porque son personas, lugares y cosas reales lo que estamos describiendo.
fuente
Un DSL es una buena forma de desarrollar un lenguaje para que lo utilicen los no programadores. Por ejemplo, si tiene un DSL para el personal de finanzas de una empresa, entonces, en lugar de programar según sus especificaciones, puede dejar que escriban el programa que quieren que se haga. Luego, si es demasiado lento, puede tomar lo que escribieron que funciona como quieran, escribirlo en un lenguaje compilado para acelerarlo.
fuente
¡Bien! hay muchas cosas explicadas arriba. Intentaré explicar esto de una manera mucho más sencilla, ya que alguien como yo lo entenderá.
Como los lenguajes de propósito general se utilizan para una gran variedad de propósitos, el DSL solo se hace para un dominio específico. Como HTML o CSS.
Puede decir si escribió instrucciones en un papel que solo una persona o su único mejor amigo puede entender y nadie más. Entonces puede ser un DSL. Pero si escribió instrucciones en términos que muchas personas pudieran entender y seguir, entonces esto no es DSL.
I onces creó una placa de conmutación para el usuario que podría operarse a través del puerto serie de una computadora y el usuario quiere un programa para esa placa que pueda ejecutarse en esa placa y los interruptores de relé se encenderán y apagarán en consecuencia. Así que escribí algunas instrucciones y le dije al usuario que programara esa placa de acuerdo con estas instrucciones. Este es un ejemplo de DSL. No inventé un nuevo lenguaje, sino que simplemente creé un montón de cadenas que el microcontrolador podía leer desde EEPROM y podía analizar en consecuencia y podía realizar una tarea específica.
fuente
Escribí una breve publicación de blog sobre por qué me gusta usar DSL:
Ojalá usáramos idiomas específicos de dominio (DSL) Más
En él, defino un DSL como:
En términos de uso, si alguna vez ha utilizado Ant, Structured Query Language (SQL) o Cascading Style Sheets (CSS), ha utilizado un DSL.
Me gusta usar DSL porque se enfocan en facilitar la comunicación de soluciones a espacios de problemas específicos, y lo hacen de una manera que promueve la inclusión de expertos en el dominio.
fuente
Un ejemplo simple de lenguaje específico de dominio (DSL) es HTML, que se utiliza para el dominio particular llamado aplicaciones basadas en web.
fuente
Hace poco escuché DSL pero encontré un ejemplo realmente útil: LUNA (antes lunascript).
Es un lenguaje / marco de programación personalizado creado por el equipo de Asana para su propia plataforma.
Como descubrí además, muchas empresas crean sus propios marcos y lenguajes para crear una ventaja competitiva adecuada, algunos ejemplos son:
Apple con Objective-CEsos son específicos del dominio porque los usará casi exclusivamente para trabajar en estas plataformas.
Espero que esta respuesta te ayude a aclarar el concepto.
fuente
Un ejemplo de DSL utilizado en Machine Learning es patsy en python: https://patsy.readthedocs.io/en/latest/formulas.html#
que se basa en la fórmula DSL de R: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html
https://cran.r-project.org/web/packages/Formula/vignettes/Formula.pdf
y Hadley tiene una buena sección de su libro R avanzado que describe cómo construir un DSL w / R: http://adv-r.had.co.nz/dsl.html
Una vez que el campo de aprendizaje profundo se estabilice un poco (o incluso ahora), me encantaría ver surgir algo similar dentro del proyecto Apache MXnet. Sin embargo, todavía no he visto ninguna propuesta para eso en la página de propuestas .
fuente
Los lenguajes específicos del dominio expresan los procesos y conocimientos de su dominio en un lenguaje que utiliza directamente los conceptos y la lógica de su campo en particular.
Definitivamente, la comunidad está creciendo, pero aún no al nivel de otras tecnologías "convencionales".
La mayoría de las veces, los DSL están hechos para mejorar la productividad dentro de las empresas, por lo que lo mantienen privado y no comparten sus resultados / conocimientos.
Aquí hay una conferencia donde el ponente da algunos ejemplos de DSL utilizando JetBrains MPS , con la tecnología de edición proyectiva: https://vimeo.com/197381453
fuente
DSL: lenguaje específico del dominio. Comencemos con lo que es dominio: el dominio es un área definida, alcance. Este dominio puede tener el aspecto de un sitio web, y usted tiene CSS y el segundo dominio puede ser la estructura del sitio web, y aquí tiene HTML.
Pero, el dominio también puede ser la Aplicación Company X. Y en el ámbito de este dominio se puede crear algún lenguaje. El lenguaje no significa: cosa totalmente aromatizada con su propia grama, sintaxis, compilador o tiempo de ejecución. DSL puede ser solo una lista de herramientas que resuelven problemas de dominio.
Consideremos OOP y su modelo para representar objetos de dominio por clases y métodos como comportamientos de esos objetos. Si creamos tal estructura y les damos comportamientos a estos objetos, entonces podemos escribir un código usando esos conceptos. Considere este ejemplo de pseudocódigo:
Cuánto de arriba es GPL (lenguaje de propósito general) y cuánto es terminología y herramientas de dominio específico. Esta es una combinación de dos, pero todos los comandos son aquí específicos del dominio. Dicho esto, podemos decir que lo anterior está escrito en DSL donde el dominio es alguna aplicación x.
En el futuro con este ejemplo, puedo crear herramientas aún más abstractas y, principalmente, realizar el flujo de control con esas herramientas, considere (esto es más FP, pero espero que entienda lo que quiero decir):
Como puede ver, pude abstraer bastante y usar esta abstracción para realizar el flujo de control. Y todo está basado en GPL y funciona dentro del alcance de GPL.
Para revelar la verdad, todos escribimos DSL, cada abstracción específica de dominio que puede usar es amable. Pero la mayoría de esas abstracciones no son soluciones completas, por eso no solemos usar esta palabra con demasiada frecuencia. Pero si tiene un conjunto de herramientas, funciones que abstraen su dominio, forman una especie de DSL.
Lo que también es DSL, muchas cosas, por ejemplo, cualquier marco que proporcione un conjunto de reglas es DSL. Si ve que alguien dice que es un desarrollador de React, entonces sabrá que es un desarrollador específico de dominio, ya que React es exactamente DSL, que es una alternativa para usar la plataforma web nativa. Si puede componer funcionalidad a partir de herramientas específicas de dominio existentes, entonces está escribiendo usando DSL. Profundizando en React, lo siento, todas las personas que no son de este DSL: D, pueden crear un conjunto de componentes y componerlos como bloques de construcción, y ¡hurra !, ahora hicieron DSL sobre DSL.
Sí, repitió DSL demasiadas veces aquí, lo siento.
fuente