stringtranslate.com

Transformación bidireccional

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:

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:

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 .

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

Ver también

Referencias

  1. ^ 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 .
  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. ^ 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.
  4. ^ ab Riley, Mitchell (2018). "Categorías de Óptica". arXiv : 1809.00738 [matemáticas.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 .

enlaces externos