Aller au contenu
EN FR

Contrat de module natif

Statut documentaire : reference — voir Maturité et preuves.

Frontière

Un module ABI natif est une bibliothèque dynamique qui expose une fonction connue retournant une table de fonctions versionnée. L'hôte ne découvre pas arbitrairement des méthodes d'implémentation exportées : il charge la table, la valide, initialise le module, puis effectue les appels via cette table.

bibliothèque dynamique
  -> GetModuleAPI
  -> table d'API versionnée
       init
       shutdown
       invoke
       release
       free
       get-last-error

Les noms ci-dessus décrivent les rôles publics des entrées ; les SDK applicatifs ne doivent pas exposer cette table bas niveau.

Validation avant utilisation

Le loader actuel vérifie : chargement de la bibliothèque, présence du point d'entrée, table non nulle, version ABI, taille minimale, fonctions obligatoires et succès de l'initialisation. Un échec empêche l'utilisation du module.

Initialisation et arrêt

L'initialisation reçoit un contexte hôte opaque. Le contrat ABI générique n'impose pas la structure interne de ce contexte.

Le shutdown appartient au cycle de vie du module. La bibliothèque dynamique n'est déchargée qu'après la tentative d'arrêt et l'abandon de la table d'API.

Invocation

La fonction native générique reçoit :

receiver handle
method id
argument-record pointer
result-storage pointer

Un constructeur ou appel statique n'a normalement pas de receiver. Un appel d'instance transporte le handle opaque obtenu précédemment. Le descripteur détermine si un receiver est obligatoire et l'hôte rejette les incohérences avant l'entrée dans le module.

Codes de résultat et dernière erreur

0 signifie succès dans le contrat actuel. En cas d'échec, le module peut fournir son dernier message UTF-8. Le buffer appartient au module : l'hôte copie le texte puis le libère avec la fonction free du même module.

Handles

Un handle est opaque. Le client ne doit pas le déréférencer, supposer un layout natif stable, comparer son adresse comme identité métier, ni le libérer avec l'allocateur hôte.

Lorsque l'ownership indique que l'appelant possède le handle, la libération passe par l'entrée release du module.

Note de portabilité actuelle

Le loader natif inspecté pour cette passe utilise actuellement le chemin de chargement dynamique Windows. La forme de la table ABI est portable, mais cette page ne prétend pas que chaque loader hôte soit déjà certifié sur tous les OS.