Tableaux générés
Statut documentaire : architecture — voir Maturité et preuves.
Les générateurs de publication actuels comprennent déjà les tableaux comme une famille de types publics de premier ordre. Cela va plus loin que la simple présence de array dans un manifeste ABI : le générateur de wrapper natif émet des headers et du code de conversion, tandis que les générateurs C# et Python conservent le type des éléments.
Layout natif généré
Le wrapper natif généré utilise un header compact conceptuellement équivalent à :
ArrayHeader
Count : entier natif
Items : pointeur
Le générateur construit différents payloads selon le type d'élément :
- les tableaux numériques et caractères primitifs utilisent un stockage contigu copié ;
- les tableaux d'objets/interfaces/pointeurs utilisent des tableaux de handles/pointeurs opaques ;
- les tableaux de chaînes utilisent des pointeurs vers des chaînes UTF-8 allouées séparément ;
- les tableaux de records ABI-flat utilisent un stockage contigu ;
- les tableaux imbriqués sont représentés par des pointeurs vers des tableaux imbriqués.
Le générateur rejette les chaînes de tableaux contenant des records qui ne sont pas ABI-flat.
Projection dans les langages générés
Le modèle de publication C# conserve le type tableau ainsi que le type d'élément, et projette les tableaux fixes/dynamiques vers des tableaux managés typés de forme T[]. Le générateur Python possède lui aussi un traitement dédié des tableaux au lieu de les réduire à des pointeurs non typés.
Attention à l'ownership
L'ownership d'un résultat tableau est plus complexe qu'une allocation plate unique, en particulier pour les tableaux de chaînes et les tableaux imbriqués. La présence d'un free au premier niveau ne prouve pas automatiquement que toutes les allocations imbriquées sont correctement libérées par tous les bridges.
Cette page reste donc en architecture : la publication et la génération native des tableaux sont réelles, mais un contrat unique et normatif d'ownership/libération doit encore être certifié sur les chemins natif généré, .NET, Python et RPC.
Cible de certification
Avant de passer les tableaux en contrat cross-binding reference, il faut au minimum certifier :
- tableaux primitifs en entrée/sortie/retour ;
- tableaux vides et nuls ;
- tableaux de handles d'objets ;
- tableaux de chaînes UTF-8 et libération imbriquée ;
- tableaux de records ABI-flat ;
- tableaux imbriqués ;
- round trips .NET générés ;
- représentation RPC et parité avec les appels locaux.