Documentation

Documentation/Technologie

Représentations de données couplées

Rendre plus difficile la récupération du raisonnement derrière vos calculs essentiels.

Coupled stateGF(2)Bit-sliceConsumer fusion

Plusieurs valeurs, une représentation#

Des encodages indépendants laissent des problèmes de récupération indépendants. Un état couplé représente conjointement des valeurs scalaires liées : une coordonnée peut dépendre de plusieurs valeurs originales. Les régions int/long admissibles disposent de représentations affines et triangulaires non linéaires, avec des obligations explicites aux frontières.

Le point essentiel est le lieu du calcul utile. La région peut travailler directement dans les coordonnées couplées, sans reconstruire chaque variable avant chaque opération. L’analyse structurelle doit alors retrouver la représentation et le calcul qui s’y exprime.

Choisir une famille de représentation#

L’implémentation dépasse l’arithmétique affine : couplage polynomial sur GF(2), circuits booléens bit-sliced, représentations liées à IEEE-754 et récurrences de boucle encodées. Chaque famille possède ses coûts de conversion et ses obligations de preuve pour les régions admissibles ; elles ne sont pas interchangeables sur tout bytecode.

ReprésentationCe qui changeConséquence pour l’analyse
Coordonnées coupléesPlusieurs valeurs int/long partagent une représentation.Reconstituer les relations entre valeurs, au-delà des encodages individuels.
GF(2) / bit-sliceLes calculs admissibles utilisent des représentations polynomiales ou booléennes.L’expression arithmétique reconnaissable cesse d’être la représentation de travail.
État porté par la boucleLa représentation peut persister entre les itérations prises en charge.Les expressions locales se comprennent avec l’évolution de l’état.
Fusion avec le consommateurCertains calculs s’exécutent directement dans les coordonnées encodées.Une frontière distincte entre décodage et calcul peut disparaître de la région.

Une constante peut se fondre dans son consommateur#

Une frontière de récupération classique révèle une valeur puis la transmet à une opération. Les transformations orientées consommateur peuvent fusionner la constante avec son utilisation. Comparaisons et décisions peuvent devenir un transducteur ; certains calculs peuvent s’exprimer par un DAG de combinateurs MethodHandle à types primitifs, lié via ConstantDynamic.

L’objet à reconstruire change : un littéral reconnaissable ou un corps arithmétique simple peut devenir une relation entre composants d’exécution. Le résultat attendu reste identique ; sa représentation et son chemin de récupération changent.

Préserver le contrat du langage#

Les transformations doivent respecter largeurs exactes, interprétation signée, débordements et exceptions Java. Les tests ciblent les allers-retours 32/64 bits, le calcul en coordonnées couplées, les préconditions, les boucles à branches et l’état visible aux gestionnaires d’exception. Ces cas vérifient des frontières précises, sans établir une compatibilité universelle.

Contacter l’équipe