[#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:01922] Re: object creation

From: Andrew Hunt <andy@...>
Date: 2000-03-16 19:27:12 UTC
List: ruby-talk #1922
	>> 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?
Of course, the preferred route would be to define a C-level
constructor (as the built-in classes have).  But if that 
didn't exist, as is the case with MD5, wouldn't it be
better to call the "new" method through a funcall rather than
poking around directly in its implementation?

	>I admit, it looks a little bit complicate. That is the reason,
	>extensions should have a method like rb_str_new2 (that I would call an
	>C constructor) too, if they are intended to be used on C level.

I agree completely; I think all extensions should define a
C constructor - I shall make that recomendation in our book...

/\ndy

--
Andrew Hunt, The Pragmatic Programmers, LLC.
Innovative Object-Oriented Software Development
web:   http://www.pragmaticprogrammer.com   email: andy@pragmaticprogrammer.com
--
Our New Book: "The Pragmatic Programmer" Published by Addison-Wesley Oct 1999
              (see www.pragmaticprogrammer.com/ppbook)
--

In This Thread

Prev Next