[#1816] Ruby 1.5.3 under Tru64 (Alpha)? — Clemens Hintze <clemens.hintze@...>

Hi all,

17 messages 2000/03/14

[#1989] English Ruby/Gtk Tutorial? — schneik@...

18 messages 2000/03/17

[#2241] setter() for local variables — ts <decoux@...>

18 messages 2000/03/29

[ruby-talk:01930] Re: object creation

From: Dave Thomas <Dave@...>
Date: 2000-03-16 22:05:08 UTC
List: ruby-talk #1930
Clemens Hintze <c.hintze@gmx.net> writes:

> Andrew Hunt writes:
> > 	>> Agreed, but here's my real question: suppose you have a
> > 	>> non-built- in class such as MD5, which does not expose a
> > 	>> C-level constructor (something like rb_str_new,
> > 	>> rb_time_new, etc).  What is the preferred way to create a
> > 	>> new MD5 object from C code?
> > 	>
> > 	>Hmmmm! I would say that this is impossible, at a first
> > 	>glance. This MD5 class has to implement a C function that
> > 	>would be connected to MD5::new at Ruby level. So you would
> > 	>have to search something like (example taken from
> > 	>ext/gdbm/gdbm.c):
> > 	>
> > 	>   rb_define_singleton_method(cGDBM, "new", fgdbm_s_open, -1);
> > 
> > If a class defines it's own new (or open, or whatever) wouldn't it
> > be easier just to call that method using the funcall mechanism?  
> 
> It would be easier, of course. But it would also be slower and would
> invoke the interpreter again. I would code an own local function, that
> call the fgdbm_s_open function directly. Then I would use this local
> function in my extension.

Now I'm probably missing something, but wouldn't calling the
constructor indirectly also allow the users of the extension override
the default initialization?

To me, it seems like the interpreter goes to a lot of trouble to use
rb_funcall to ensure that it correctly allows the user to override
methods. Shouldn't the extensions do likewise?

Regards


Dave

In This Thread