Representaciones de datos acopladas
Dificulte la recuperación de la lógica de sus cálculos esenciales.
Varios valores, una representación#
Las codificaciones independientes dejan problemas de recuperación independientes. El estado acoplado representa conjuntamente escalares relacionados: una coordenada puede depender de varios valores originales. Las regiones int/long compatibles admiten representaciones afines y triangulares no lineales, con obligaciones explícitas de entrada y salida.
Lo esencial es dónde ocurre el cálculo útil. La región puede operar directamente en coordenadas acopladas, reduciendo la necesidad de reconstruir cada variable antes de cada operación. El análisis estructural debe recuperar tanto la representación como el cálculo expresado en ella.
Elija una familia de representación#
La implementación va más allá de la aritmética afín: acoplamiento polinómico sobre GF(2), circuitos booleanos bit-sliced, representaciones relacionadas con IEEE-754 y recurrencias de bucle codificadas. Cada familia tiene costes de conversión y obligaciones de prueba propios; no son opciones intercambiables para cualquier bytecode.
| Representación | Qué cambia | Efecto en el análisis |
|---|---|---|
| Coordenadas acopladas | Varios valores int/long comparten una representación. | Reconstruir las relaciones entre valores, además de sus codificaciones. |
| GF(2) / bit-slice | Los cálculos compatibles usan representaciones polinómicas o booleanas. | La expresión aritmética reconocible deja de ser la representación de trabajo. |
| Estado entre iteraciones | La representación puede mantenerse entre iteraciones compatibles. | Las expresiones locales deben entenderse junto con la evolución del estado. |
| Fusión con el consumidor | Ciertas operaciones se ejecutan directamente en coordenadas codificadas. | La región puede dejar de exponer un límite separado de decodificación y cálculo. |
Una constante puede integrarse en su consumidor#
Una frontera de recuperación convencional revela un valor y lo entrega a otra operación. Las transformaciones orientadas al consumidor pueden fusionar la constante con su uso. Las comparaciones y decisiones pueden representarse como un transductor; ciertos cálculos, mediante un DAG de combinadores MethodHandle con tipos primitivos enlazado por ConstantDynamic.
Cambia el objeto que debe reconstruirse: un literal reconocible o un cuerpo aritmético simple puede convertirse en una relación entre componentes de ejecución. El resultado esperado se conserva; cambian la representación y la ruta de recuperación.
Preserve el contrato del lenguaje#
Los cambios deben respetar los anchos exactos, la interpretación con signo, el desbordamiento y las excepciones de Java. Las pruebas cubren recorridos de ida y vuelta de 32/64 bits, evaluación acoplada, precondiciones, bucles con ramas y estado visible a los manejadores de excepciones. Verifican límites concretos, no compatibilidad universal.