¿Qué es el lenguaje específico de dominio? ¿Alguien lo usa? ¿Y de qué manera?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

Pregunta

Creo que estoy buscando algún tipo de introducción y ver si alguien lo ha usado. ¿Hay alguna ventaja particular de usarlo?

Wikipedia:

  

lenguaje específico de dominio (DSL) es un lenguaje de programación o lenguaje de especificación dedicado a un particular dominio del problema, una técnica de representación de problemas 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?

¿Fue útil?

Solución

Un idioma específico de dominio es un idioma 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 las compilaciones de software, o lexx y yacc para la construcción del lenguaje. En los últimos años, se han vuelto populares, ya que algunas cosas se han combinado para facilitar su construcción. Entre esas cosas ha sido grande la creciente popularidad de Ruby, que tiene varias características que facilitan la creación de nuevas DSL.

Martin Fowler es un gran defensor de la idea, como aquí .

Otros consejos

Puede pensar en las 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 enfoca en el qué 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 los que incluyen cosas como twill, un navegador web controlado por comandos (utilizado principalmente para pruebas automatizadas), almacenamiento de datos e idiomas de intercambio (XML, YAML, ...) e idiomas de documentos como LaTex, HTML o CSS.

Algunos lenguajes con una sintaxis muy flexible como TCL y Lisp construyen su DSL directamente en el idioma ... cuando es posible. La mayoría de los idiomas usan cadenas, generalmente cargadas desde archivos externos.

¿Hay alguna ventaja particular 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 decir que hay suficientes DSL para cualquier tipo de aplicación que pueda necesitar; es casi seguro que no necesita aprender a escribir el suyo propio.

(abordando el quid de la pregunta)

Creo que la primera vez que vi DSL en alguna parte y su definición como " dominio lenguaje específico " También pensé que era un lenguaje particular y concreto del que no había oído hablar, pero no, es un término general para los idiomas que se adaptan a un área de aplicación en particular.

Irónicamente, si acaba de escuchar sobre TCL como un " lenguaje de comando de herramienta " puede pensar, como DSL, que habría muchos TCL para varias herramientas, pero no, es el nombre específico de un lenguaje de scripting particular.

Creo que es un lenguaje adecuado para resolver problemas para un dominio específico. Podría ser algún lenguaje de procesamiento de reglas o lenguaje de descripción de servicio.

Un opuesto a un lenguaje específico de dominio (DSL) es un lenguaje de propósito general .

Un DSL es una buena manera de desarrollar un lenguaje para ser utilizado por no programadores. Por ejemplo, si tiene un DSL para las personas de finanzas de una empresa, en lugar de programar según sus especificaciones, puede dejar que escriban el programa que desean. Luego, si es demasiado lento, puede tomar lo que escribió que funciona como lo desea, escribirlo en un lenguaje compilado para acelerarlo.

Todo es un DSL ...

Ensamblador: MOV R1 a R2
Compiladores: declaraciones de asignación - A = A + 1, condicionales - IF (VERDADERO) ..., rama - RETORNO
HTML: ... describe una estructura anidada
TCP / IP: describir a / desde direcciones
PDF: describa la colocación de texto / imagen en papel
Fuentes: describir caracteres

Cualquier lenguaje que usemos para describir un proceso específico es un DSL. Desafortunadamente, faltan idiomas específicos de dominio para describir incluso nuestros procesos más básicos, por lo que utilizamos los pocos idiomas 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 el número mínimo 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 criterios de diseño principales. 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, "Pagar a los empleados al principio del mes", pero el dominio específico es solo eso, específico del dominio, usted determina la sintaxis que Se ajusta mejor al problema.

Me mantendría alejado del uso de otras soluciones que podrían ser convenientes pero que no se ajustan al problema, como el HTML que se usó para definir los Datos (XML). CSV es muy útil, se adapta a la mayoría de los problemas. JSON no se ajusta a la porción de facilidad de uso, es excesivo que agrega complicaciones innecesarias donde CSV funciona para la mayoría de los problemas. Usamos EXCEL mucho para DSL, funciona muy bien para describir pequeños problemas, en filas de 65K a 1M, 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 realmente no resolvió el problema del diseño de la página, así que me deshice de él y definí un DSL que se ajusta. Definí 6 regiones en la página, CABECERA, CUERPO, PIE, MARGENES IZQUIERDO / DERECHO y MARGENES COMPLETOS IZQUIERDO / DERECHO. 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 podría dividirse en filas y columnas a cualquier profundidad. El diseño de la página lleva segundos para cualquier estilo.

BODY contiene una tabla de mis empleados
HEADER contiene un título de la barra de título 'Hello World' con inicio de sesión en Collins Software

Un menú DSL no se ajusta al diseño de página DSL, así que creé 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, Dialog Open File;

Cada problema es único, la computadora puede usar cualquier formato, es el humano para el que están diseñadas las DSL, así que haga que los humanos lo entiendan, algo que puedan escribir y que el lenguaje se convierta en palabras reales; porque estamos describiendo personas, lugares y cosas reales.

Bueno! Hay muchas cosas explicadas anteriormente. Trataré de explicar esto de una manera mucho más simple como alguien como yo lo entenderá.

Como los lenguajes de propósito general se usan para propósitos extensos, el DSL solo se hace para un dominio específico. Como HTML o CSS.

Puede decir si escribió instrucciones en un documento que solo una persona o su mejor amigo pueden entender y nadie más podría entender. Entonces puede ser un DSL. Pero si escribiste instrucciones en términos que muchas personas podrían entender y podrían seguir, entonces esto no es DSL.

I onces creó una placa de conmutación para el usuario que podría funcionar a través del puerto serie de una computadora y el usuario desea un programa para esa placa que podría ejecutarse en esa placa y los interruptores de relé se activarán y desactivarán en consecuencia. Entonces 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 en lugar de crear 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.

He escrito una breve publicación en el blog sobre por qué me gusta usar DSL:

I Wish We Lenguajes específicos de dominio (DSL) usados ??Más

En él, defino un DSL como:

  

Un pequeño lenguaje de programación diseñado específicamente para comunicar soluciones para un dominio particular de problemas.

En términos de uso, si alguna vez ha usado Ant, Lenguaje de consulta estructurado (SQL) u Hojas de estilo en cascada (CSS), ha usado un DSL.

Me gusta usar DSL porque se centran en facilitar la comunicación de soluciones a espacios problemáticos específicos, y lo hacen de una manera que promueve la inclusión de expertos en dominios.

Un ejemplo simple para el lenguaje específico de dominio (DSL) es HTML que se utiliza para el dominio particular llamado aplicaciones basadas en la web.

Recientemente escuché DSL pero encuentro un ejemplo realmente útil: LUNA (antiguo lunascript).

Es un lenguaje / marco de programación personalizado hecho por el equipo de Asana para su propia plataforma.

Como descubro, muchas compañías crean sus propios marcos e idiomas para crear una ventaja competitiva adecuada, algunos ejemplos son:

  • SAP con AbAp
  • PeopleSoft con PeopleCode
  • Apple con Objective-C
  • Facebook tiene cosas como FBML y FQL

Esos 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.

Un ejemplo de un 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 con 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, no he visto ninguna propuesta para eso en la página de propuesta todavía aunque.

Los lenguajes específicos de dominio expresan sus procesos y conocimientos de dominio en un lenguaje que utiliza directamente los conceptos y la lógica de su campo particular.

La comunidad definitivamente está creciendo, pero aún no está en el nivel de otra "corriente principal" tecnologías

La mayoría de las veces, los DSL se hacen para mejorar la productividad dentro de las empresas, por lo que lo mantienen privado y no comparten sus resultados / ideas.

Aquí hay una conferencia donde el orador da algunos ejemplos de DSL usando JetBrains MPS , con el Tecnología de edición por proyección: https://vimeo.com/197381453

DSL - DomainSpecificLanguage

  

DSL es un lenguaje de computadora dirigido a un tipo particular de problema, en lugar de un lenguaje de propósito general dirigido a cualquier tipo de problema de software.

Donde: configuraciones (TravisCI .yaml), scripts de compilación ( gradle ), dependencias de los objetivos (< a href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod ), programación de IU ( Anko ) etc.

DSL es una programación declarativa: Qué hacer en lugar de cómo hacer

DSL externos tienen su propia sintaxis personalizada y usted escribe un analizador completo para procesarlos (por ejemplo, XML, RegExp, SQL, HTML, CSS, UML).

Los

DSL internos son formas particulares de utilizar un idioma del host para darle al idioma del host la sensación de un idioma en particular (por ejemplo, anotaciones de Lisp, Ruby, Java, macros).

Leer más aquí , aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top