Remarque : Cette question concerne la différence de terminologie entre les mots "destructeur" et "finalisateur" et leur utilisation correcte. J'ai simplement fourni des exemples de leur utilisation en C# et C++/CLI pour démontrer pourquoi je pose la question. Je suis parfaitement conscient de la manière dont ils sont mis en œuvre dans le C# et le CLR, mais je pose la question de l'utilisation correcte de la terminologie.
Dans le monde du C#, les termes "destructeur" et "finalisateur" semblent être utilisés de manière interchangeable, ce qui, je pense, est dû au fait que la spécification du C# décrit la fonctionnalité de nettoyage non déterministe en utilisant le mot "destructeur", alors que la documentation du CLR utilise toujours le mot "finalisateur", de sorte que dans le cadre du C#, ils ont la même signification.
Cependant, la spécification C++/CLI fait une distinction entre les deux. Elle autorise le nettoyage déterministe et non déterministe, et utilise le terme "destructeur" pour la fonctionnalité déterministe et "finalisateur" pour la fonctionnalité non déterministe :
Le finisseur fournit un nettoyage non déterministe. Un finaliseur est une fonction de la "dernière chance" qui est exécutée pendant la collecte des déchets, généralement sur un objet dont le destructeur n'a pas été exécuté.
En outre, les descriptions Wikipedia de destructeur y finaliseur indique que les destructeurs et les finaliseurs sont des concepts distincts, et soutient l'utilisation des termes par la spécification C++/CLI en ce qui concerne le déterminisme :
Contrairement aux destructeurs, les finaliseurs ne sont pas déterministes. Un destructeur est exécuté lorsque le programme libère explicitement un objet. Un finaliseur, en revanche, est exécuté lorsque le système interne de ramassage des ordures libère l'objet.
Les questions :
-
Existe-t-il, d'un point de vue informatique, une différence clairement définie entre un "destructeur" et un "finalisateur", ou la terminologie ne peut-elle être définie que de manière contextuelle ?
-
S'il existe une différence clairement définie, pourquoi la spécification C# utilise-t-elle la "mauvaise" terminologie ?