Tableaux, chaînes et callbacks dans les bindings .NET générés
Statut documentaire : architecture — voir Maturité et preuves.
Le binding généré doit présenter des valeurs managées ordinaires tout en respectant en dessous les contrats ABI d'ownership et de type d'élément.
Chaînes
Les chaînes publiées sont projetées sous forme de valeurs managées string. Le contrat ABI natif généré utilise UTF-8 à la frontière. Le stockage d'une chaîne d'entrée appartient à l'appelant pendant l'appel ; le stockage d'une chaîne retournée/out est copié côté client puis libéré via le mécanisme ABI de release/free du module.
Le code applicatif ne doit pas gérer directement les pointeurs UTF-8 natifs.
Tableaux
La publication d'un tableau conserve le type de son élément. Le wrapper natif généré utilise des métadonnées de tableau explicites et des chemins de conversion adaptés au type des éléments au lieu de traiter tous les tableaux comme des buffers d'octets opaques.
Le générateur rejette les chaînes de tableaux contenant des layouts de records qui ne sont pas ABI-flat. Cela évite qu'un binding cible reçoive un tableau dont la représentation des éléments ne pourrait pas être reconstruite de façon sûre.
Dans la couche managée, la projection visée est un tableau typé ou une autre collection typée générée adaptée au binding :
Concept[] candidates = service.FindCandidates(query);
Le comportement de libération pour les allocations imbriquées reste dépendant des capacités et doit être validé pour la release du binding/runtime utilisée.
Tableaux d'objets
Les tableaux d'objets publiés transportent une référence Runtime par élément. Le binding doit convertir ces références en wrappers managés tout en préservant la politique d'ownership de la collection retournée et de ses éléments.
Callbacks
Le modèle de publication peut décrire des signatures de callbacks/procédures lorsque leurs paramètres et résultats sont eux-mêmes publiables. Les formes de références de méthodes nécessitant une représentation objet/trampoline non supportée sont volontairement rejetées.
Un callback .NET généré nécessite donc une projection explicite en delegate managé et une règle de durée de vie qui maintient ce delegate atteignable tant que le code natif peut l'appeler.
La parité générale des callbacks à travers RPC n'est pas encore documentée comme garantie de référence. Le support des callbacks doit être considéré comme dépendant des capacités jusqu'à certification de l'adaptateur concret par la suite de tests du contrat généré.