[#389739] Ruby Challenge — teresa nuagen <unguyen90@...>

Here is a ruby challenge for all you computer science lovers out there,

22 messages 2011/11/05
[#389769] Re: Ruby Challenge — "Jonan S." <jonanscheffler@...> 2011/11/05

Totally unrelated to any husker computer science programs right? Like

[#389905] Re: Ruby Challenge — Stephen Ramsay <sramsay.unl@...> 2011/11/09

Jonan S. wrote in post #1030330:

[#389907] Re: Ruby Challenge — aseret nuagen <unguyen90@...> 2011/11/09

> You mean like the professor for the course? Because that would be me .

[#389915] Re: Ruby Challenge — Robert Klemme <shortcutter@...> 2011/11/09

On Wed, Nov 9, 2011 at 4:52 AM, aseret nuagen <unguyen90@aim.com> wrote:

[#389792] Tricky DSL, how to do it? — Intransition <transfire@...>

I'd want to write a DSL such that a surface method_missing catches

18 messages 2011/11/06

[#389858] Compiling Ruby Inline C code - resolving errors — Martin Hansen <mail@...>

I am trying to get this Ruby inline C code http://pastie.org/2825882 to

12 messages 2011/11/08

[#389928] Forming a Ruby meetup group... — "Darryl L. Pierce" <mcpierce@...>

Where I work we have a local Ruby group that used to meet up, until the

12 messages 2011/11/09

[#389950] The faster way to read files — "Noé Alejandro" <casanejo@...>

Does anybody know which is the fastest way to read a file? Lets say

18 messages 2011/11/09

[#390064] referring to version numbers in a gem — Chad Perrin <code@...>

How do I specify and access a gem's version number within the code of the

28 messages 2011/11/11

[#390238] RVM problem, plz help — Misha Ognev <b1368810@...>

Hi, I have this problem:

15 messages 2011/11/16

[#390308] any command line tools for querying yaml files — Rahul Kumar <sentinel1879@...>

(Sorry, this is not exactly a ruby question).

11 messages 2011/11/18

[#390338] Newbie - cmd question — Otto Dydakt <ottodydakt@...>

I've literally JUST downloaded ruby from rubyinstaller.org.

21 messages 2011/11/19
[#390342] Re: Newbie - cmd question — Otto Dydakt <ottodydakt@...> 2011/11/19

OK thank you, I uninstalled & reinstalled, checking the three boxes at

[#390343] Re: Newbie - cmd question — "Ian M. Asaff" <ian.asaff@...> 2011/11/19

did you type "irb" first to bring up the ruby command prompt?

[#391154] Re: Newbie - cmd question — "Hussain A." <hahmad@...> 2011/12/12

Hi all,

[#391165] Re: Newbie - cmd question — Luis Lavena <luislavena@...> 2011/12/12

Hussain A. wrote in post #1036281:

[#390374] Principle of Best Principles — Intransition <transfire@...>

I seem to run into a couple of design issue a lot and I never know what is

16 messages 2011/11/20

[#390396] how to call Function argument into another ruby script. — hari mahesh <harismahesh@...>

Consider I have a ruby file called library.rb.

10 messages 2011/11/21

[#390496] How to make 1.9.2 my default version using RVM — Fily Salas <fs_tigre@...>

Hi,

25 messages 2011/11/24

[#390535] Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...>

Well, first of all, I'm new to Ruby, and to this forum. So, hello. :)

39 messages 2011/11/25
[#390580] Re: Is high-speed sorting impossible with Ruby? — Joao Pedrosa <joaopedrosa@...> 2011/11/27

Hi,

[#390593] Re: Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...> 2011/11/27

Joao Pedrosa wrote in post #1033884:

[#390600] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

A big gain can be had by disabling the garbage collector. Here is my best

[#390601] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

I've thrown various solutions up on github here:

[#390650] Loading a faulty ruby file - forcing this — Marc Heiler <shevegen@...>

Hi.

10 messages 2011/11/29

[#390689] Stupid question — James Gallagher <lollyproductions@...>

Hi everyone.

22 messages 2011/11/30

Re: Garbage collection and define_finalizer

From: Garthy D <garthy_lmkltybr@...>
Date: 2011-11-30 03:11:08 UTC
List: ruby-talk #390682
Hi Robert,

Thankyou for the detailed reply. :)

On 30/11/11 00:07, Robert Klemme wrote:
> On Tue, Nov 29, 2011 at 1:43 PM, Garthy D
> <garthy_lmkltybr@entropicsoftware.com>  wrote:
>> I was wondering if running the (mark and sweep?) garbage collector manually
>> is supposed to collect (and call define_finalizer procs on) objects with no
>> remaining references. I would expect that the answer is yes, but it doesn't
>> seem to actually work that way.
>
> There are no guarantees whatsoever that *any* GC run will collect
> particular unreachable instances.  The only guarantee is that all
> finalizers are invoked eventually (unless of course in case of
> catastrophic crash) - even if it is at process termination time.

I suspected this might be the case- and it's certainly not an 
unreasonable assumption to make of a GC.

>> If you wrap the A.new in a loop instead, eventually it'll free up the other
>> instances of A en-masse (ie. calling the GC doesn't seem to do it, but
>> flooding memory until the GC triggers does).
>>
>> I have seen similar behavior in a large embedded Ruby program that I am
>> working on. In this case the Ruby objects in question have instance
>> variables that reference textures, and I really need the finalizer to be
>> called when all of the references to the textures are lost, so as to free up
>> the texture memory. At the moment they are being finalised at program exit,
>> when the available texture memory has long run out. This isn't good, and it
>> means I need to rewrite every potential bit of this code to use manual
>> reference counting.
>
> No, that's a bad solution.  What you observe might mean that you
> simply haven't created enough Ruby garbage for GC to think it needs to
> work.  I have no idea how you allocate texture memory but if it is in
> a C extension written by you I would check whether there is a way to
> go through MRI's allocation in order to correct MRI's idea of used
> memory.  Implementation of Ruby's String might be a good example for
> that.

Your assumption re the C extension for texture memory is pretty-much 
spot on. :)

Re texture memory, it's a little more complicated than a standard 
allocation. Some memory will be the standard allocated sort, but some 
will be on the video card, and they're effectively coming from different 
"pools" (or heaps), neither of which I'll have direct control over. 
Unless the Ruby GC directly understands this concept (I don't know if it 
does, but I'm guessing not), I'm not going to be able to use Ruby to 
manage that memory. Unfortunately, the problem goes a bit beyond just 
textures, as I'm wrapping a good chunk of a 3D engine in Ruby objects. 
That's my problem to worry about though.

And that's assuming I can redirect the allocation calls anyway- I'm not 
sure if I can. It'd be nice to be able to inform the Ruby GC of 
allocated memory (or an estimate, if it keeps changing) without actually 
leaving the GC to allocate it. Please correct me if I'm wrong, but I'm 
assuming this can't be done, and you must use the ALLOC/ALLOC_N-style 
functions?

> Another solution is to use transactions like File.open with a block
> does.  Then you know exactly when the texture is not used any more and
> can immediately release it (in "ensure").  Whether that is a viable
> option depends on the design of your application.  See here:
>
> http://blog.rubybestpractices.com/posts/rklemme/002_Writing_Block_Methods.html

Thankyou for the link. It does not appear to be suitable for say 
textures in my specific case (they are long-lived and freed at a later 
time), but may help with some of the other problems I need to solve.

>> So basically: If the garbage collector is called, are objects with no
>> remaining references supposed to be reaped during the call, and their
>> defined finalizers called? Whatever the answer- why is that? Is there an
>> official word on how this is supposed to work, and what can (and can't) be
>> relied upon?
>
> GC's prefer to decide themselves when and how they collect deadwood.
> There are usually only very few guarantees (see JVM spec for an
> example) in order to allow VM implementors maximum freedom and room
> for optimization.  The only hard guarantee is that an object won't be
> collected as long as it is strongly reachable.

This is completely reasonable of course.

Unfortunately it causes a lot of problems in my case, as I had assumed 
one thing from general reading on the topic, and observed another. 
That's my problem to deal with though, not anyone else's. Still, there 
seems to be lot of information online that talks about Ruby performing 
mark and sweep, either stating outright that unreferenced objects are 
freed on first GC, or heavily implying it at least. From your 
description, and my observations, this information appears to be 
incorrect. Basically, there seems to be a lot of misinformation about 
what the GC is doing. Apart from the source, is there some place where 
the correct behaviour is discussed, that could be referred to instead, 
particularly if someone is suggesting that the MRI GC implementation 
should immediately clean up these references on next GC (which, as we've 
established, isn't accurate)?

Garth

In This Thread