Ruby implementation Q's


(Berger, Daniel) #1

Well, how do other languages implement GC? Which language, in your opinion,
has the best form of garbage collection? I only know a little bit about
GC, and then only with regards to Perl and Ruby. I have no idea how C, C++,
Java, Smalltalk, OCaml, Lisp, etc handle GC behind the scenes.

Regards,

Dan

···

-----Original Message-----
From: Justin Johnson [mailto:justinj@mobiusent.com]
Sent: Wednesday, July 03, 2002 12:54 PM
To: ruby-talk@ruby-lang.org
Subject: Re: Ruby implementation Q’s

I agree it is interesting. But you will not see it in (my) Ruby in
the near future. I have to consider it more deeply, since I have
some concerns about implementation / language impact of the idea.

I’m not suggesting it as a request for the current Ruby. I
mention the idea
because it is an interesting thought and because I’m
developing another
implementation of the language.
I think that introducing manual deletion into a language like Ruby may
create an inbalance and have an adverse effect on code design.

If I could just come up with a way of (quickly) detecting the
moment an
object isn’t referenced anymore…


(Justin Johnson) #2

Well, how do other languages implement GC? Which language, in your
opinion,
has the best form of garbage collection? I only know a little bit about
GC, and then only with regards to Perl and Ruby. I have no idea how C,
C++,
Java, Smalltalk, OCaml, Lisp, etc handle GC behind the scenes.

Perl and Python use reference counting in combination with a mark-and-sweep
to reclaim cyclic reference garbage. C and C++ have only manual
allocation/destruction by default but libraries are available to provide
various flavours of garbage collection.

Not sure about Java GC, but it runs on a seperate thread as an incremental
(mark-and-sweep?) process. Generational garbage collectors are popular with
Smalltalk and Lisp, although historically both have used reference counting.
BETA uses the train algorithm, a twist on generational collecting.

There are many, many variations and mixtures. It’s quite a diverse field.

Which ones are actually better largely depends on the implementation details
and tuning.

···


Justin Johnson
justinj@mobiusent.com
Technical Director
Mobius


(Dan Sugalski) #3

This isn’t true for perl. Perl uses a pure refcount scheme, with a
walk of the arenas at the end of a program for forced destruction. No
mark and sweep. (Python’s got a more complex scheme which is
generating some interesting discussion on the python-dev list at the
moment, but I’m unfamiliar enough with it to say anything definitive)

···

At 3:54 AM +0900 7/4/02, Justin Johnson wrote:

Well, how do other languages implement GC? Which language, in your
opinion,
has the best form of garbage collection? I only know a little bit about
GC, and then only with regards to Perl and Ruby. I have no idea how C,
C++,
Java, Smalltalk, OCaml, Lisp, etc handle GC behind the scenes.

Perl and Python use reference counting in combination with a mark-and-sweep
to reclaim cyclic reference garbage. C and C++ have only manual
allocation/destruction by default but libraries are available to provide
various flavours of garbage collection.


Dan

--------------------------------------“it’s like this”-------------------
Dan Sugalski even samurai
dan@sidhe.org have teddy bears and even
teddy bears get drunk