18-07-2008 Luis Artola
Los DSL o Domain Specific Languages es uno de esos conceptos con los que me encuentro regularmente y me suele valer la pena reflexionar. Hace ya algún tiempo Raúl me pasaba éste artículo sobre los DSL´s en Java.
Existen dos tipos:
SQLQuery sql = new SQLQuery();
sql.Select("Id").Select("FirstName").Select("LastName").From("Person").Where("Id = 1").Where("FirstName = 'Chris'").OrderBy("LastName").OrderBy("FirstName");
string strSqlString = sql.ToString();
<action-mappings >
<action path="/listar" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="listar" path="lista.aplicaciones"/>
</action>
<action path="/formularioNuevaAplicacion" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="mostrar" path="nueva.aplicacion"/>
</action>
<action path="/nuevaAyuda" attribute="aplicacionForm" name="aplicacionForm" type="org.springframework.web.struts.DelegatingActionProxy" scope="request" input="nueva.aplicacion">
<forward name="nueva" path="/listar.do"/>
</action>
</action-mappings>
El artículo cuenta cómo la experiencia ha demostrado que los DSL que realmente funcionan son los Internal, que están escritos en el propio Java. Es inviable aprender cincuenta minilenguajes externos. Además compilan y se adaptan muy bien a las estructuras existentes.
Los external en XML tuvieron mucho éxito en Java porque se resolvían en tiempo de ejecución y permitían cambiar cosas sin recompilar. En el caso de lenguajes dinámicos como PHP, Ruby, etc… esto no tiene sentido. Además los XML´s habría que cargarlos en cada request, con la recarga de servidor que supondría eso…
Gracias a Raúl por pasarme el artículo y ayudarme con los ejemplos en Java, que no es mi fuerte.
1. Arian Fornaris | septiembre 23rd, 2008 at 7:09 am
Bueno, me resulta gracioso. A mi no me gustan muchos los XML, son un DSL externo falso. Los XML, por supuesto, son externos a Java, pero los DSL diseñados en XML son internos respecto a los XML. Es decir, XML es un lenguaje de propósito general me atrevo a decir.
Yo me inclino por los DSL externos reales, aquellos que tienen una sintaxis realmente apropiada, legible.
Es poco práctico diseñar un compilador, por ejemplo, sin utilizar una herramienta que procese una gramática -BNF es un DSL- y genere un alto porciento de las clases del compilador, o almenos, la parte más trabajosa.
Otro ejemplo son las plantillas de HTML, sin ellas generar páginas Web sería mucho más difícil.
Conclusión, yo abogo por el multi-lenguaje, cada cual con su propósito específico y bien justificado.
2. Inyección de dependencia&hellip | mayo 22nd, 2009 at 9:28 am
[...] uso de XML para la configuración. Precisamente los DSL (Domain Specific Languages) internos (aquellos que utilizan el propio lenguaje para escribirse, en éste caso PHP) han [...]
3. Tendencias en el desarrol&hellip | mayo 29th, 2009 at 4:50 pm
[...] Estandarización del patrón MVC como arquitectura básica de aplicaciones web, incluso en ASP.NET …. y la inyección de dependencias como forma básico de construir API´s (aunque ahora se usa más el nombre de DSL). [...]