[#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: "Sean O'Dell" <sean@...>
Date: 2002-02-24 00:01:43 UTC
List: ruby-talk #34658
"Jim Weirich" <jweirich@one.net> wrote in message
news:m2wux3bys2.fsf@skaro.access.one.net...
> >>>>> "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?
>
> 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.

Well...I come mainly from C++, which doesn't do reference counting, so
perhaps reference counting isn't such a great idea.  I don't know...I just
know that being able to call a finalize method *before* the object is one of
the great things about OOP.  You can encapsulate activities inside an object
without the outside world knowing everything going on inside, and they can
use it safely.

>     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.

I don't know enough about garbage collection, but that's what everyone is
saying so I'm accepting that on faith right now.

> 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.

I mainly use destructors to perform object-destruction tasks.  Resource
allocations, etc. are only part of what might happen.  For example, suppose
I have a class that manages the configuration of an application.  On
construction, it opens a config file, reads it all in and then closes it.
During the life of the object, it provides information about how the
application is to perform its job.  During its life, the application itself
might change some of the settings based on user input.  On destruction, I
need the object to write out its current configuration information so all
the changes are saved to disk.

I considered using "yield" to wrap things up (using block_given? to enforce
using blocks, throwing an exception when a block wasn't provided) to ensure
this happens, but that got really messy fast in one of my apps.  I had about
6 objects to create, all of which required special destruction tasks, and
that meant I had 6-level-deep nested block, complete with 6 calls to yield.
The code looks horrible.  It's so much cleaner when you can create 6 objects
in succession, and they destruct in reverse order.  I could wrap all 6
objects inside a block with an ensure clause and then call their destructors
explicitly, but that requires that the outside world know about the
destructors, and that ruins the whole idea of encapsulation.

The problem becomes even worse when you have objects that depend on other
objects, and the order in which they destruct becomes an issue.  Even if the
garbage collection scheme were changed to allow reference counting, that
wouldn't provide for destruction order.

I do come from a primarily C++ background.  I'm not afraid of Ruby, but I
need my stuff to be tight and operate well with the other processes on the
system.  Garbage collection and the lack of object destructors are really
freaking me out.  I'm very much used to controlling very closely when memory
is used and freed, and I depend on OOP to automate a lot of that.

Under what circumstances is garbage collection invoked?  I think I can deal
with using yield to call blocks to make sure cleanup calls are made with my
objects, but the state of memory is still an issue.  How often is garbage
collection invoked?  What are all of its triggers?

    Sean


In This Thread