conceptos-dsls-dsl---internos
Descripción
Un DSL interno es un lenguaje que depende de otro lenguaje GPL. Es decir que si bien “parece” un lenguaje propio, realmente es código GPL. Mediante diferentes técnicas y herramientas se ocultan detalles y complejidades propias del DSL, y se reifican conceptos propios del DSL.
Ejemplos preliminares
Para hacerse una idea de cómo es un DSL interno desde el punto de vista de quien lo usa.
- Rails
- Mockito
- …
Luego veremos desde el punto de vista de quien lo construye.
Herramientas o features del lenguaje anfitrión
La capacidad que vamos a tener para poder implementar la sintaxis de nuestro DSL interno va a depender muchísimo, obviamente de la flexibilidad que nos provea el lenguaje GPL anfitrión. Un lenguaje como java, por ejemplo, no resulta muy flexible ya que no tiene inferencia de tipos por ejemplo, con lo cual no puedo evitar la parte de declarar tipos en muchos lugares.
Acá vemos una lista de elementos de lenguajes que se pueden utilizar como técnicas combinadas para hacer un DSL interno:
**Inferencia / implicits. **Ej:
- Scala Implicits
- Import statics de Java
- Extension Methods
Patrones Creacionales:
Builder
Factory method
Syntax Sugar
- operador “with” => en Xtend
- Sobrecarga/redefinición de operadores
Extension methods
Bloques / Closures
Metaprogramación
- Programación dinámica (doesNotUnderstand / missing_method)
- Self-modification: para generar comportamiento (ej: métodos o atributos) dinámicamente, en base a una descripción del dominio.
- Proxy’s dinámicos y Mocks