specific - que es dsl programacion
¿Qué es un lenguaje específico de dominio? ¿Alguien lo está usando? ¿Y de qué manera? (11)
Supongo que estoy buscando algún tipo de introducción y veo si alguien lo ha usado. ¿Hay alguna ventaja particular 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 determinado?
¡Bien! hay muchas cosas explicadas arriba. Trataré de explicar esto de una manera mucho más simple ya que alguien como yo vendrá a entender.
Como los lenguajes de uso general se usan para grandes propósitos, la DSL solo se crea para un dominio específico. Como HTML o CSS.
Puede decir si escribió instrucciones en un documento que solo una persona o su único mejor amigo puede entender y nadie más podría entender. Entonces puede ser un DSL. Pero si escribió las instrucciones en los términos que muchas personas podrían entender y podrían seguir, entonces esto no es DSL.
Creé una placa de Conmutación para el usuario que podría ser operada 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 conmutadores 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 idioma en vez 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.
(abordando el quid de la cuestión)
Creo que la primera vez que vi DSL alguna parte y su definición como "lenguaje específico de dominio" , también pensé que era un lenguaje particular y concreto del que simplemente no había oído hablar, pero, no, es un término general para los idiomas que son adaptado a un área de aplicación particular.
Irónicamente, si acabara de escuchar acerca de TCL como un "lenguaje de comando de herramientas", podría pensar, como las DSL, que habría muchas 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 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 específico de dominio (DSL) es un lenguaje de propósito general .
He escrito una breve publicación en el blog sobre por qué me gusta usar DSL:
Ojalá usáramos lenguajes específicos de dominio (DSL) Más
En él, defino una 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, Structured Query Language (SQL) o Cascading Style Sheets (CSS), ha utilizado una DSL.
Me gusta usar DSL porque se centran en facilitar la comunicación de soluciones a espacios con problemas específicos, y lo hacen de una manera que promueve la inclusión de expertos en el dominio.
Los lenguajes específicos del dominio expresan los procesos y el conocimiento de su dominio en un lenguaje que usa 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 otras tecnologías "convencionales".
La mayoría de las veces, las DSL están hechas para mejorar la productividad dentro de las empresas, por lo que la mantienen privada y no comparten sus resultados / ideas.
Aquí hay una conferencia donde el orador da algunos ejemplos de DSL utilizando JetBrains MPS , con la tecnología de edición Projectional: https://vimeo.com/197381453
Puede pensar en 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 lo que quiere hacer, y el sistema más grande averigua 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 (utilizado principalmente para pruebas automatizadas ), almacenamiento de datos e idiomas de intercambio (XML, YAML, ...) y documentos como LaTex, HTML o CSS.
Algunos lenguajes con sintaxis muy flexible como TCL y Lisp construyen su DSL directamente en el idioma ... cuando sea posible. La mayoría de los lenguajes utilizan cadenas, generalmente cargadas desde archivos externos.
¿Hay alguna ventaja particular de usarlos? Usarlos para los fines previstos es muy ventajoso hasta el punto en 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 disponibles para cualquier tipo de aplicación que pueda necesitar; es casi seguro que no necesita aprender cómo escribir el suyo propio.
Recientemente escuché DSL pero encuentro un ejemplo muy útil: LUNA (antiguo lunascript).
Es un lenguaje / marco de programación hecho a medida por el equipo de Asana para su propia plataforma.
Como descubrí más adelante, 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.
Todo es un DSL ...
Ensamblador: MOV R1 a R2
Compiladores: Declaraciones de asignación - A = A + 1, Condicionales - SI (VERDADERO) ..., Sucursal - DEVOLUCIÓN
HTML: ... describe una estructura anidada
TCP / IP: describe las direcciones a / desde
PDF: describe la colocación de texto / imagen en papel
Fuentes: describir personajes
Cualquier lenguaje que usemos para describir un proceso específico es un DSL. Lamentablemente, hay una falta de lenguajes específicos de dominio para describir incluso nuestros procesos más básicos, por lo que usamos 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 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 es buena, prefiero el lenguaje natural como mi sintaxis en la mayoría de los casos, "Pagar 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 mejor se adapta 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 utilizó 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 cuando el CSV funciona para la mayoría de los problemas. Utilizamos 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 CSV editable).
Descubrí que HTML realmente no resolvía el problema del diseño de la página, así que me deshice de él y definí una DSL que encaja. Definí 6 regiones en la página, HEADER, BODY, FOOTER, LEFT / RIGHT MARGINS, y LEFT / RIGHT FULL MARGINS. Entonces podría decirle al generador de páginas que agregue una BARRA DE TÍTULOS, BARRA DE ESTADO, MENÚS, TABLA, FORMULARIOS, ..., a celdas específicas. Cada una de estas Células podría dividirse en Filas y Columnas a cualquier profundidad. El diseño de 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 para el software Collins
Un DSL de menú no se ajusta al DSL de diseño de página, así que construí una DSL única para menús.
Recurso Mi menú principal
* define: menú, m, nivel, etiqueta, icono, acción;
m, 0, archivo;
m, 1, abrir, abrir.gif, Abrir archivo de diálogo;
Cada problema es único, la computadora puede usar cualquier formato, es el humano para el que están diseñadas las DSL, así que hazlo comprensible para los humanos, algo en lo que puedan escribir, y crea el lenguaje a partir de palabras reales; porque son personas reales, lugares y cosas que estamos describiendo.
Un DSL es una buena manera de desarrollar un lenguaje para ser utilizado por los no programadores. Por ejemplo, si tiene una DSL para las personas de finanzas en una empresa, entonces, en lugar de programar según sus especificaciones, puede dejar que escriban el programa que desean que se haga. Entonces, si es demasiado lento, entonces puede tomar lo que escribieron que funcione como lo deseen, escríbalo en un lenguaje compilado para acelerarlo.
Un ejemplo simple para el lenguaje específico del dominio (DSL) es el HTML que se utiliza para el dominio particular llamado aplicaciones basadas en web.
Un lenguaje específico de dominio es un idioma que se escribe para tratar un dominio específico o conjunto de inquietudes. Hay muchos de ellos, como make, ant y rake para describir construcciones de software, o lexx y yacc para la construcción del lenguaje. En los últimos años, se han hecho populares debido a que algunas cosas se han combinado para hacerlas más fáciles de construir. Entre las cosas más importantes ha sido 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 here .