[Python-3000] Delayed reference counting idea
Barry Warsaw
barry at python.org
Tue Sep 19 16:53:23 CEST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sep 19, 2006, at 10:42 AM, Marcin 'Qrczak' Kowalczyk wrote:
> Barry Warsaw <barry at python.org> writes:
>
>> What worries me is the unpredictability of gc vs. refcounting. For
>> some class of Python applications it's important that when an object
>> is dereferenced it really goes away right then. I /like/ reference
>> counting!
>
> This can be solved by explicit freeing of objects whose cleanup must
> be performed deterministically.
>
> Lisp has UNWIND-PROTECT and type-specific macros like WITH-OPEN-FILE.
> C# has 'using' keyword. Python has 'with' which can be used for that.
I don't see how that helps. I can remove all references to the
object but I still have to wait until gc runs to free it. Can you
explain your idea in more detail?
> Reference counting is inefficient, doesn't by itself handle cycles,
> and is impractical to combine with threads which run in parallel. The
> general consensus of modern language implementations is that a tracing
> GC is the future.
>
> I admit that implementing a good GC is hard. It's quite hard to make
> it incremental, and it's hard to avoid stopping all threads during GC
> (but it's easier to allow threads to run in parallel between GCs, with
> no need of forced synchronization each time a reference to an object
> is created).
I just think that it's important to remember that there are use cases
that reference counting solves. GC and refcounting both have their
pros and cons. I tend to think that Python's current refcounting +
cyclic gc is the devil we know, so unless there is a clear, proven
better way I'm not eager to change it.
- -Barry
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)
iQCVAwUBRRAEa3EjvBPtnXfVAQIpyAQArWHs0j+yJs5raS4EQgj/v1NXYOqzXLAn
eM5eWMMTDY6qZgWa2i7DFciO1MZnX6/HAUsRYSc7lHPEWKMbNoCgPQZP46XoX8/w
FYtvuRCdVUlPvTtfZk8ltl/ERXb+vtR4Jtb/dT7+0VxdbGLHvqgMaCrcDXMd2n4C
du4cjV+GZ1k=
=anX9
-----END PGP SIGNATURE-----
More information about the Python-3000
mailing list