RX0026

Domaine: Moteur

Message d'erreur

le DataHeap a reçu un genre qui n'est pas celui que dérive la réponse inerte : %s

Dans le message, %s marque une valeur que le moteur remplit au moment où il lève l'erreur.

L'histoire

Quelque chose qui agit a essayé d'entrer dans la maison des choses inertes, et la porte l'a arrêté. Voyons la règle. Dans rush, le genre d'un être décide de son domicile. Un nom, c'est une valeur : il vit dans le DataHeap. Un verbe, qui produit, et un flux, qui route, sont de l'exécution : ils vivent dans l'ExecHeap. La porte de placement du DataHeap n'accepte donc qu'un seul genre, celui que dérive la réponse inerte. Ici, on lui a présenté autre chose : une exécution qui cherchait un domicile qui n'est pas le sien. Pourquoi ce contrôle existe-t-il à l'exécution ? Parce que le genre est une valeur que le moteur lit au démarrage, donc aucun compilateur ne peut vérifier d'avance de quel genre est tel pointeur. Et la vérification se fait avant même que le contenu soit rangé. Sinon, un intrus aurait pu recevoir la coordonnée d'un locataire inerte déjà présent, aucune nouvelle cellule n'aurait été créée, et un contrôle des genres de la population serait resté serein alors qu'une exécution occupait une adresse du DataHeap. Le message nomme le genre présenté. Placez les valeurs dans le DataHeap, et les verbes dans l'ExecHeap.

Texte issu du catalogue d'erreurs du moteur Rush.