* Chris Gray:
Lawrence D'Oliveiro <l...@geek-central.gen.new_zealand> writes:

In message <op.u8nfpex8y5e...@laptopwanja>, Wanja Gayk wrote:

Reference counting is about the worst technique for garbage collection.
It avoids the need for garbage collection. It means I can write things like

I'm by no means an expert, but how does reference counting deal with
arbitrary long cycles of references (btw I've *written* a simple
reference counter for a programming language)?

Generally it doesn't. Some solutions have however been proposed for std::shared_ptr in C++. None have made it to any noteworthy status, but they demonstrate that there are more or less practical solutions for the most common cases.

Currently the upshot is that if you need the kind of self-referential spaghetti structure (no offense) created by mathematical expressions that refer to each other, then you've passed beyond what can be handled practically by reference counting alone or even in combination with cycle handling techniques.

For that you're better off with some functional language, or Python... ;-)


When I asked someone whose knowlege of Java I trust, he said that modern
Java's do both reference counting and garbage collection. That was 2 or 3
years ago. I would have guessed that Python was the same.

Yes, Python adds general garbage collection to deal with cycles.

Essentially the reference counting deals efficiently and immediately with objects created by expression evaluation, while the general garbage collection deals with cyclic structures.

But there's no magic: in particular in Java, Python and like languages you must still remember to remove references installed in singletons and globals (e.g. for event notifications), otherwise objects will still be referenced and thus not garbage collected, causing a memory leak.


Cheers & hth.,

- Alf
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to