[#1263] Draft of the updated Ruby FAQ — Dave Thomas <Dave@...>

33 messages 2000/02/08

[#1376] Re: Scripting versus programming — Andrew Hunt <andy@...>

Conrad writes:

13 messages 2000/02/15

[#1508] Ruby/GTK and the mainloop — Ian Main <imain@...>

17 messages 2000/02/19
[#1544] Re: Ruby/GTK and the mainloop — Yasushi Shoji <yashi@...> 2000/02/23

Hello Ian,

[#1550] Re: Ruby/GTK and the mainloop — Ian Main <imain@...> 2000/02/23

On Wed, Feb 23, 2000 at 02:56:10AM -0500, Yasushi Shoji wrote:

[#1516] Ruby: PLEASE use comp.lang.misc for all Ruby programming/technical questions/discussions!!!! — "Conrad Schneiker" <schneiker@...>

((FYI: This was sent to the Ruby mail list.))

10 messages 2000/02/19

[#1569] Re: Ruby: constructors, new and initialise — Yukihiro Matsumoto <matz@...>

The following message is a courtesy copy of an article

12 messages 2000/02/25

[ruby-talk:01508] Ruby/GTK and the mainloop

From: Ian Main <imain@...>
Date: 2000-02-19 07:19:56 UTC
List: ruby-talk #1508
Hello Ruby folk! :)


I'm new to this list so I'm just going to take a second to introduce
myself.. My name is Ian Main, and I live in Canada! :)

I mostly have an interest in Ruby because I am working on something called
Entity, the homepage of which is at:

http://entity.evilplan.org

Essentially it's an engine that allows you to create XML objects, and use
those to build applications in XML.

Anyway, I really find Ruby very interesting.. and one feature (besides the
cool OO'ness of it), that would be extremely cool for me was the built in
threading. I took a look at the source code, and I really like the way it
will block and reschedule on IO etc.  I think this would integrate
beautifully into Entity.  (and I can't beleive no other languages do this..
I was actually toying with the idea of implementing something similar myself).

However, having looked at the GTK bindings, I saw something which I thought
could use improvement - namely:

...
gtk_idle_add((GtkFunction)idle, 0); 
...

from rbgtk.c., idle() of course being defined as:

static gint
idle() 
{ 
 struct timeval wait; 
 
 wait.tv_sec  = 0;  
 wait.tv_usec = 1000; /* 100ms */  
   
 CHECK_INTS;    
 if (!rb_thread_critical) rb_thread_wait_for(wait);    
 
 return Qtrue;        
}        
       

Now, this doesn't cause too huge of problems, but I did notice the
sluggish redraw gtk had when run from ruby (because it only gets control
to redraw every 100ms).  It also makes the applications consume a small
amount of CPU when idle.

If I were to embed ruby into entity, it would also cause IO handlers to be
called with a 100ms delay.  I realize this could be made into a smaller
amount (and indeed this is what I did with the Ruby/GTK to make it "feel"
faster), but this causes more idle CPU usage.. not a big deal on my machine,
but the actual amount will vary depending on the platform.

In Entity we've extrapolated all the mainloop functions, and have a
registration function which can be used to insert your own functions for the
mainloop (eg, select()), adding IO watchers (to the select () call)) etc.  We
then provide a default set of handlers (for which we just use the glib
functions), if no alternative is provided.  This allows you to use other
toolkits which assume control of the mainloop, such as Qt etc.

So the point of all this, is that I'm wondering if you would be interested
in implementing a similar thing in Ruby ?  I would be willing to help in any
way possible, including an attempt at supplying patches if this is what it
will take.

I'm really keen on getting Ruby support into Entity, but I think this is
something I'd like to have resolved before doing so.

Thanks,

	Ian

In This Thread

Prev Next