149Fermer151
BrunniLe 14/04/2010 à 16:23
./145> De plus en plus en fait. Depuis ces dernières années il ne reste quasiment plus que le C(++) et des vieux langages plus mis à jour qui n'ont pas de GC.

Sinon pour les langages particuliers on peut citer l'Objective-C puisque je suis dedans actuellement. Il n'a un GC que sur Mac (desktop).
Pour les autres plate-formes il a un système de comptage de références qui reste complexe à manipuler, mais beaucoup moins qu'en C pur. Par exemple:
Objet *o = [[Objet alloc] init];    // On a créé l'objet, refcount=1
[o release];    // Nous on a fini avec - le libère si le refcount passe à 0

Quelqu'un qui reçoit un objet et veut le garder peut faire un retain pour incrémenter le refcount.
Une addition qui rend le truc vraiment cool, c'est "l'autorelease pool", une liste d'objets à libérer "plus tard" (mais pas au hasard, comme en Java, à un moment soit déterminé par l'utilisateur, soit par le système lorsque le traitement est fini). Comme la règle est qu'on release tout objet qu'on a alloué soi-même (et seulement!), si on retourne un objet on peut l'inscrire dans l'autorelease comme ça il vivra encore un moment jusqu'à ce que l'appelant décide qu'en faire (soit retain - incrémente le refcount de sorte à ce que l'autorelease ne le libère pas, mais seulement lui quand il aura décidé de faire son release).