Tagless-final o la abstracción sin culpa (I/III)


Details
Este es el primero de una serie de eventos que dedicaremos a la aproximación tagless-final, y al diseño de DSLs, en general. Comenzamos dando respuesta a preguntas como: ¿es el tagless-final algo más que programar con type classes?, en particular, ¿es lo mismo que lo que llaman MTL? ¿Y qué gano en cualquier caso con tanta abstracción?, ¿no me estaré perdiendo algo ...? Por ejemplo, ¿puedes garantizarme que mi código va a ser igual de eficiente?, ¿que va a ser igualmente usable y mantenible? ¿que si se me ocurre utilizar esto, cuando me vaya de la empresa no dirán mis compañeros: "tanta paz lleve, como descanso deja"? ¿Es posible, en definitiva, conseguir la abstracción sin culpa?
Ilustraremos las respuestas a estas preguntas utilizando un ejemplo de Language-Integrated Query (LINQ), analizando distintas posibilidades de implementar la funcionalidad que en una sencilla query SQL no son más que un par de líneas de código ... Veremos cómo hacer esto mismo con DAOs, MTL-based repositories, Quoted DSLs (Quill) y, finalmente, QUEΛ (tagless final). Para cada aproximación enfatizaremos las virtudes de los distintos tipos de abstracciones utilizadas en ellas, pero, especialmente también, sus limitaciones, mostrando las razones por las que deberíamos sentirnos culpables de alejarnos del metal ... o, por el contrario, no arrepentirnos de ello :).
Esta primera sesión será impartida por Juan Manuel Serrano, profesor de la Universidad Rey Juan Carlos y responsable técnico en Habla Computing. El objetivo es que al final de la misma tengamos información suficiente para ubicar tagless-final en el universo de posibilidades de diseño a las que nos enfrentamos día a día, y decidir si nos adentramos o no en el proceloso y apasionante mundo del diseño de DSLs de la mano de esta poderosa técnica.
Y si te decides a profundizar más, ¡que esperamos que sí!, en sesiones posteriores, Juan José Vázquez, CTO de Tecsisa, ofrecerá una introducción a tagless-final a un mayor nivel de detalle, mostrando paso a paso cómo es posible crear DSLs embebidos en Scala sin recurrir a GADTs u otros tipos sofisticados. Sobre el mismo código, nos remangaremos para trabajar sobre los aspectos que se esperan de un buen DSL: que admita distintas interpretaciones, que sea extensible y retro-compatible, que podamos serializarlo y deserializarlo para pasarlo por la red e interpretarlo de forma distribuida, etc. Y ya que estamos, lo haremos todo con Scala 3!
Sesión 1 (9 de Junio): Tagless-final o la abstracción sin culpa
Sesión 2 (16 de Junio): Tagless-final en Scala 3: first-order DSLs
Sesión 3 (23 de Junio): Tagless-final en Scala 3: higher-order DSLs

Tagless-final o la abstracción sin culpa (I/III)