Programas informáticos capaces de producir entradas a partir de salidas.
En programación de computadoras , las transformaciones bidireccionales (bx) son programas en los que una sola pieza de código se puede ejecutar de varias maneras, de modo que los mismos datos a veces se consideran entrada y otras veces salida. Por ejemplo, una ejecución de bx en dirección hacia adelante podría transformar la entrada I en salida O, mientras que la misma ejecución de bx hacia atrás 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 se ingresa un modelo a dicho programa.
Algunos lenguajes bidireccionales son biyectivos . La biyectividad de un lenguaje es una severa restricción de su poder, [1] porque un lenguaje biyectivo simplemente relaciona dos formas diferentes de presentar la misma información.
Más general es un lenguaje de lentes, en el que hay una dirección directa distinguida ("obtener") 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 normalmente algo más. La dirección hacia atrás ("poner") toma un estado concreto y un estado abstracto y calcula un nuevo estado concreto. Se requiere que las lentes obedezcan ciertas condiciones para garantizar un comportamiento sensato.
El caso más general es el de transformaciones bidireccionales simétricas. Aquí los dos estados que están relacionados normalmente comparten alguna información, pero cada uno también incluye información que no está incluida en el otro.
Uso
Las transformaciones bidireccionales se pueden utilizar para:
- Mantener la coherencia de varias fuentes de información [2]
- Proporcione una "vista abstracta" para manipular fácilmente los datos y escribirlos en su fuente.
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 las tres leyes de la lente:![{\displaystyle get:S\rightarrow V}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle V}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- PonerObtener :
![{\displaystyle \forall s,v.get(put(s,v))=v}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ObtenerPoner :
![{\displaystyle \forall s.put(s,get(s))=s}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Put poner :
![{\displaystyle \forall s,v,v'.put(poner(s,v),v')=poner(s,v')}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Se llama lente de buen comportamiento . [4]
Una noción relacionada es la de prisma , en el que las firmas de las funciones son , en cambio ,. A diferencia de una lente, es posible que un prisma no siempre proporcione una vista; Además, a diferencia de una lente, dado un prisma, una vista es suficiente para construir una fuente. Si las lentes permiten "enfocar" (ver, actualizar) sobre una parte de un tipo de producto , los prismas permiten enfocar (posible ver, construir) sobre una parte de un tipo de suma .![{\displaystyle obtener:S\rightarrow V+1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle poner:V\rightarrow S}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Tanto las lentes como los prismas, así como otras construcciones como los transversales , son la noción más general de transformaciones bidireccionales conocidas como óptica . [4]
Ejemplos de implementaciones
- Boomerang es un lenguaje de programación que permite que lentes de escritura procesen 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 formatos XML a formatos no XML [6]
Ver también
Referencias
- ^ Fomentar, Nate. «Semántica de los lenguajes bidireccionales» (PDF) . Archivado desde el original (PDF) el 26 de julio de 2011 . Consultado el 7 de febrero de 2011 .
- ^ 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 .
- ^ Fomentar, J. Nathan; Greenwald, Michael B.; Moore, Jonathan T.; Pierce, Benjamín C .; Schmitt, Alan (mayo de 2007). "Combinadores para transformaciones de árboles bidireccionales: un enfoque lingüístico al problema de visualización y actualización". Transacciones ACM sobre lenguajes y sistemas de programación . 29 . doi : 10.1145/1232420.1232424 . S2CID 53234629.
- ^ ab Riley, Mitchell (2018). "Categorías de Óptica". arXiv : 1809.00738 [matemáticas.CT].
- ^ 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 .
- ^ "XSugar: sintaxis dual para lenguajes XML". brics.dk . Consultado el 19 de febrero de 2024 .
enlaces externos
- "Encuentro Internacional GRACE sobre Transformaciones Bidireccionales". Archivado desde el original el 12 de octubre de 2014.
- "Transformaciones bidireccionales". La Wiki de Bx . Consultado el 19 de febrero de 2024 .
- Pacheco, Hugo; Cunha, Alcino (2012). Multifocal: un lenguaje de transformación bidireccional estratégico para esquemas XML (PDF) . Congreso Internacional sobre Teoría y Práctica de Transformaciones de Modelos. Springer, Berlín, Heidelberg. doi :10.1007/978-3-642-30476-7_6.