Articulo de referencia

Transformación bidireccional

En programación informática , las transformaciones bidireccionales (bx) son programas en los que un único fragmento de código se puede ejecutar de varias maneras, de modo que lo...

En programación informática , las transformaciones bidireccionales (bx) son programas en los que un único fragmento de código se puede ejecutar de varias maneras, de modo que los mismos datos a veces se consideran como entrada y a veces como salida. Por ejemplo, una ejecución de bx en la dirección hacia delante podría transformar la entrada I en la salida O, mientras que la misma ejecución de bx en sentido inverso tomaría como entrada versiones de I y O y produciría una nueva versión de I como salida.

Las transformaciones de modelos bidireccionales son un caso especial importante en el que un modelo se introduce en un programa de este tipo.

Algunos lenguajes bidireccionales son biyectivos . La biyectividad de un lenguaje es una restricción severa de su poder, [1] porque un lenguaje biyectivo simplemente relaciona dos formas diferentes de presentar la misma información.

Más general es el lenguaje de lentes, en el que hay una dirección hacia adelante diferenciada ("get") que lleva una entrada concreta a una salida abstracta, descartando cierta información en el proceso: el estado concreto incluye toda la información que está en el estado abstracto, y usualmente algo más. La dirección hacia atrás ("put") toma un estado concreto y un estado abstracto y calcula un nuevo estado concreto. Las lentes deben obedecer ciertas condiciones para asegurar un comportamiento sensato.

El caso más general es el de las transformaciones bidireccionales simétricas, en las que los dos estados relacionados suelen compartir cierta información, pero cada uno incluye también información que no está incluida en el otro.

Uso

Las transformaciones bidireccionales se pueden utilizar para:

  • Mantener la consistencia de varias fuentes de información [2]
  • Proporcionar una "vista abstracta" para manipular fácilmente los datos y volver a escribirlos en su origen.

Definición

Las transformaciones bidireccionales se dividen en varias categorías bien estudiadas. [3]

Una lente es un par de funciones que relacionan una fuente y una vista . Si estas funciones obedecen a las tres leyes de las lentes: gramo mi a : S V {\displaystyle obtener:S\rightarrow V} pag a : S , V S {\displaystyle poner:S,V\rightarrow S} S {\estilo de visualización S} V {\estilo de visualización V}

  • PonerObtener : s , en . gramo mi a ( pag a ( s , en ) ) = en {\displaystyle \forall s,v.get(put(s,v))=v}
  • ObtenerPut : s . pag a ( s , gramo mi a ( s ) ) = s {\displaystyle \forall s.put(s,get(s))=s}
  • PonerPon : s , en , en " . pag a ( pag a ( s , en ) , en " ) = pag a ( s , en " ) {\displaystyle \forall s,v,v'.put(put(s,v),v')=put(s,v')}

Se llama lente de buen comportamiento . [4]

Una noción relacionada es la de prisma , en la que las firmas de las funciones son, en cambio , . A diferencia de una lente, un prisma no siempre puede dar una vista; también a diferencia de una lente, dado un prisma, una vista es suficiente para construir una fuente. Si las lentes permiten "enfocar" (ver, actualizar) una parte de un tipo de producto , los prismas permiten enfocar (posible visualización, construcción) una parte de un tipo de suma . gramo mi a : S V + 1 {\displaystyle obtener:S\rightarrow V+1} pag a : V S {\displaystyle poner:V\rightarrow S}

Tanto las lentes como los prismas, así como otras construcciones como los traversales , son una noción más general de transformaciones bidireccionales conocidas como óptica . [4]

Ejemplos de implementaciones

  • Boomerang es un lenguaje de programación que permite escribir lentes para procesar formatos de datos de texto de forma bidireccional.
  • Augeas es una biblioteca de gestión de configuración cuyo lenguaje de lentes está inspirado en el proyecto Boomerang
  • biXid es un lenguaje de programación para procesar datos XML de forma bidireccional [5]
  • XSugar permite la traducción de XML a formatos no XML [6]

Véase también

Referencias

  1. ^ Foster, Nate. «Semántica de lenguajes bidireccionales» (PDF) . Archivado desde el original (PDF) el 26 de julio de 2011. Consultado el 7 de febrero de 2011 .
  2. ^ Czarnecki, Krzysztof; Fomentar, J. Nathan; Hu, Zhenjiang; Lämmel, Ralf; Schürr, Andy; Terwilliger, James F. "Transformaciones bidireccionales: una perspectiva interdisciplinaria" (PDF) . Consultado el 19 de febrero de 2024 .
  3. ^ Foster, J. Nathan; Greenwald, Michael B.; Moore, Jonathan T.; Pierce, Benjamin C .; Schmitt, Alan (mayo de 2007). "Combinadores para transformaciones de árboles bidireccionales: un enfoque lingüístico para el problema de actualización de vistas". ACM Transactions on Programming Languages ​​and Systems . 29 . doi : 10.1145/1232420.1232424 . S2CID  53234629.
  4. ^ ab Riley, Mitchell (2018). "Categorías de la óptica". arXiv : 1809.00738 [math.CT].
  5. ^ KAWANAKA, Shinya; HOSOYA, Haruo (2006). "biXid: Un lenguaje de transformación bidireccional para XML" (PDF) . doi :10.1145/1160074.1159830. Archivado desde el original (PDF) el 2 de julio de 2007. Consultado el 7 de febrero de 2011 .
  6. ^ "XSugar - Sintaxis dual para lenguajes XML". brics.dk . Consultado el 19 de febrero de 2024 .
  • "Encuentro internacional GRACE sobre transformaciones bidireccionales". Archivado desde el original el 12 de octubre de 2014.
  • "Transformaciones bidireccionales". Wiki Bx . Consultado el 19 de febrero de 2024 .
  • Pacheco, Hugo; Cunha, Alcino (2012). Multifocal: Un lenguaje estratégico de transformación bidireccional para esquemas XML (PDF) . Conferencia Internacional sobre Teoría y Práctica de Transformaciones de Modelos. Springer, Berlín, Heidelberg. doi :10.1007/978-3-642-30476-7_6.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Transformación_bidireccional&oldid=1208997556"