[#33161] Call/CC and Ruby iterators. — olczyk@... (Thaddeus L Olczyk)

Reading about call/cc in Scheme I get the impression that it is very

11 messages 2002/02/05

[#33242] favicon.ico — Dave Thomas <Dave@...>

19 messages 2002/02/06
[#33256] Re: favicon.ico — Leon Torres <leon@...> 2002/02/06

[#33435] Reg: tiny contest: who's faster? (add_a_gram) — grady@... (Steven Grady)

> My current solution works correctly with various inputs.

17 messages 2002/02/08

[#33500] Ruby Embedded Documentation — William Djaja Tjokroaminata <billtj@...>

Hi,

24 messages 2002/02/10
[#33502] Re: Ruby Embedded Documentation — "Lyle Johnson" <ljohnson@...> 2002/02/10

> Now, I am using Ruby on Linux, and I have downloaded Ruby version

[#33615] Name resolution in Ruby — stern@... (Alan Stern)

I've been struggling to understand how name resolution is supposed to

16 messages 2002/02/11

[#33617] choice of HTML templating system — Paul Brannan <paul@...>

I am not a web developer, nor do I pretend to be one.

23 messages 2002/02/11

[#33619] make first letter lowercase — sebi@... (sebi)

hello,

20 messages 2002/02/11
[#33620] Re: [newbie] make first letter lowercase — Tobias Reif <tobiasreif@...> 2002/02/11

sebi wrote:

[#33624] Re: [newbie] make first letter lowercase — "Jeff 'japhy' Pinyan" <jeffp@...> 2002/02/11

On Feb 11, Tobias Reif said:

[#33632] Re: [newbie] make first letter lowercase — Mathieu Bouchard <matju@...> 2002/02/12

[#33731] simple XML parsing (greedy / non-greedy — Ron Jeffries <ronjeffries@...>

Suppose I had this text

14 messages 2002/02/13

[#33743] qualms about respond_to? idiom — David Alan Black <dblack@...>

Hi --

28 messages 2002/02/13
[#33751] Re: qualms about respond_to? idiom — Dave Thomas <Dave@...> 2002/02/13

David Alan Black <dblack@candle.superlink.net> writes:

[#33754] Re: qualms about respond_to? idiom — David Alan Black <dblack@...> 2002/02/13

Hi --

[#33848] "Powered by Ruby" banner — Yuri Leikind <YuriLeikind@...>

Hello Ruby folks,

78 messages 2002/02/14
[#33909] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/14

On Thu, 14 Feb 2002, Yuri Leikind wrote:

[#33916] RE: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

A modest submission:

[#33929] Re: "Powered by Ruby" banner — yet another bill smith <bigbill.smith@...> 2002/02/15

Kent Dahl wrote:

[#33932] OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 5:54 AM, "yet another bill smith" <bigbill.smith@verizon.net>

[#33933] RE: OT Netscape 4.x? was Re: "Powered by Ruby" banner — "Jack Dempsey" <dempsejn@...> 2002/02/15

i just don't understand why it didn't show up! dhtml/javascript, ok, but a

[#33937] Re: OT Netscape 4.x? was Re: "Powered by Ruby" banner — Chris Gehlker <gehlker@...> 2002/02/15

On 2/15/02 7:16 AM, "Jack Dempsey" <dempsejn@georgetown.edu> wrote:

[#33989] Re: OT OmniWeb [was: Netscape 4.x?] — Sean Russell <ser@...> 2002/02/16

Chris Gehlker wrote:

[#33991] Re: OT OmniWeb [was: Netscape 4.x?] — Rob Partington <rjp@...> 2002/02/16

In message <3c6e5e01_1@spamkiller.newsgroups.com>,

[#33993] Re: OT OmniWeb [was: Netscape 4.x?] — Thomas Hurst <tom.hurst@...> 2002/02/16

* Rob Partington (rjp@browser.org) wrote:

[#33925] Re: "Powered by Ruby" banner — Martin Maciaszek <mmaciaszek@...> 2002/02/15

In article <3C6CFCCA.5AD5CA67@scnsoft.com>, Yuri Leikind wrote:

[#33956] Re: "Powered by Ruby" banner — Leon Torres <leon@...> 2002/02/15

On Fri, 15 Feb 2002, Martin Maciaszek wrote:

[#33851] Ruby and .NET — Patrik Sundberg <ps@...>

I have been reading a bit about .NET for the last couple of days and must say

53 messages 2002/02/14

[#34024] Compiled companion language for Ruby? — Erik Terpstra <erik@...>

Hmmm, seems that my previous post was in a different thread, I'll try

12 messages 2002/02/16

[#34036] The GUI Returns — "Horacio Lopez" <vruz@...>

Hello all,

33 messages 2002/02/17

[#34162] Epic4/Ruby — Thomas Hurst <tom.hurst@...>

Rejoice, for you no longer have to put up with that evil excuse for a

34 messages 2002/02/18

[#34185] Operator overloading and multiple arguments — ptkwt@...1.aracnet.com (Phil Tomson)

I'm trying to overload the '<=' operator in a class in order to use it for

10 messages 2002/02/18

[#34217] Ruby for web development — beripome@... (Billy)

Hi all,

21 messages 2002/02/19

[#34350] FAQ for comp.lang.ruby — "Hal E. Fulton" <hal9000@...>

RUBY NEWSGROUP FAQ -- Welcome to comp.lang.ruby! (Revised 2001-2-18)

15 messages 2002/02/20

[#34375] Setting the Ruby continued — <jostein.berntsen@...>

Hi,

24 messages 2002/02/20
[#34384] Re: Setting the Ruby continued — Paulo Schreiner <paulo@...> 2002/02/20

Also VERY important:

[#34467] recursive require — Ron Jeffries <ronjeffries@...>

I'm having a really odd thing happen with two files that mutually

18 messages 2002/02/21

[#34503] special characters — Tobias Reif <tobiasreif@...>

Hi all,

13 messages 2002/02/22

[#34517] Windows Installer Ruby 166-0 available — Andrew Hunt <andy@...>

16 messages 2002/02/22

[#34597] rdoc/xml questions — Dave Thomas <Dave@...>

24 messages 2002/02/23

[#34631] Object/Memory Management — "Sean O'Dell" <sean@...>

I'm new to Ruby and the community here (I've been learning Ruby for a grand

44 messages 2002/02/23

[#34682] duplicate method name — Ron Jeffries <ronjeffries@...>

I just found a case in a test file where i had two tests of the same

16 messages 2002/02/24
[#34687] Re: duplicate method name — s@... (Stefan Schmiedl) 2002/02/24

Hi Ron.

[#34791] Style Question — Ron Jeffries <ronjeffries@...>

So I'm building this set theory library. The "only" object is supposed

13 messages 2002/02/25

[#34912] RCR?: parallel to until: as_soon_as — Tobias Reif <tobiasreif@...>

Hi,

18 messages 2002/02/26

[#34972] OT A Question on work styles — Chris Gehlker <gehlker@...>

As a Mac baby I just had to step through ruby in GDB *from the command line*

20 messages 2002/02/28

[#35015] Time Comparison — "Sean O'Dell" <sean@...>

I am using the time object to compare times between two files and I'm

21 messages 2002/02/28

Re: Object/Memory Management

From: Jim Weirich <jweirich@...>
Date: 2002-02-23 22:46:25 UTC
List: ruby-talk #34656
>>>>> "Sean" == Sean O'Dell <sean@celsoft.com> writes:

Other responses addressed your explicit destruction question ... I'll
give a response to your second question.

    Sean> Also, a related issue...why isn't there a finalize call?  I
    Sean> don't mean the finalizer where you can set a method to get
    Sean> called after an object is gone, I mean, why isn't there a
    Sean> call to an object's "def finalize...end" right *before* an
    Sean> object goes away?  Is that in the works or is that just not
    Sean> the Ruby way?

Java does it the way you suggest, but it leaves a rather nasty
possibility open.  Suppose that the finalize method created a *new*
reference to your object that is in the processes of being destructed
(probably something you shouldn't do, but it *can* be done).  Since
there is now a reference to the object, the object is now "live" again
and it can no longer be garbaged collected.  What a situation, you
have a live object whose finalizer has already been run.  When the
object is garabage collected for real later, the finalizer will not be
run again.

Ruby avoids this weird situation by running the finalizer code *after*
the object is already collected.  You arrange for a closure to handle
the resources that need handling during finalization, but the closure
has no reference to the original object, therefore it can't create a
new reference to it.  In addition, Matz made the finalization code
just a little clunky on purpose, to discourage using it gratuitously.

    Sean> I don't fully understand why explicit object destruction
    Sean> doesn't exist and why there is no object finalize call.  Is
    Sean> it against Ruby philosophy and will never be there, or is it
    Sean> just that Ruby is still young and it hasn't been implemented
    Sean> yet?

There are several reasons for using explicit object destruction...

 1) To recover memory
 2) To release non-memory resources
 3) To use the "resource allocation is acquisition" idiom (RAIA)

With GC, (1) isn't much of a motivator.  A good GC collector will
generally outperform most manual allocation/destruction schemes.  With
the inherit dangers involved with explicit destruction (dangling
pointers, etc), it just doesn't seem worth it.

If (2) is your concern, there is nothing stopping you from doing an
explicit release of your non-memory resources.  For example, if you
want to make sure a file is closed when you are done with it, then
close it.  Don't depend on object destruction to close the file.

As for (3), a lot of people from the C++ world use explicit object
destruction combined with the stack based allocation available in C++
to manage resources.  For example, the following code will make sure
the ifstream "f" is closed when the function exits and "f" is
automatically destructed.

   void func () {
     ifstream s("data.txt");
     // Use input file stream f here
   } // f goes out of scope here     

Ruby has a different idiom that handles this case.  We wrap
open/close, allocate/deallocate, or any other paired operation in a
function and pass that function a code block to execute.  The Ruby
version of the abover file example would be ...

    def func
      open("data.txt") do |f|
        # Use file f here
      end  # automatically close f when the block is done
   end

This technique is used extensively in the Ruby DBI library.  One of my
favorites is the transaction { ... } method.

I've also done similar things with semaphores and locks.  For example
...

   def synchronize(lock)
     lock.acquire
     yield
   ensure
     lock.release
   end

   # usage ...
   synchronize(a_lock) do
     # do somethine while we have a lock
   end

... is a practical replacement for Java's synchronized block
statement.  The idiom is more flexible and actually easier to use than
the RAIA idiom in C++.

Perhaps you see a need for explicit destruction that I haven't
covered.  If so, I'd like to hear of it.

Sorry, I got a little more long winded than I intended.  I hope this
helps.

-- 
-- Jim Weirich     jweirich@one.net    http://w3.one.net/~jweirich
---------------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct, 
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)

In This Thread