privat/nit — pull request #659 by xymus (2014-08-08 23:37:13+00:00)
Title: Finalizing Nit objects on garbage collection

Rules for finalizable objects:

* They must be a standard Nit class (not an extern, nor a universal).
* They must not have any cycles, or else they won't be finalized.
* In practice, they should be used on small Nit objects acting as a thin layer around a resource. In other words, it is to be used in the Nity layer.
* `finalize` may be invoked more than once, and the underlying resources may also be used by other instances. This must be considered when implementing `finalize`.
* The finalizer will be called on garbage collection. It can be forced with `sys.force_garbage_collection`.
* When attempting to aquire a limited resource (for example, a file description) if you hit the limit, it is a good practice to force the garbage collection and try again.

----

Ça ne passera pas le bootstrap... Une fonction de gc_chooser.c fait appel à `gc_finalize` que est généré par le compilateur. Quelqu'un à une idée comment contourner ça? Si je génère le tout je n'ai pas accès à la macro WITH_LIBGC.

Je songe remplacer le `is abstract` de Finalizable par un corps vide pour éviter les surprises d'appel à une méthode abstraite par le GC.

Je vais aussi regarder pour l'appliquer sur certaines classes communes.