[#1649] Re: New Ruby projects — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1672] Re: Ruby 1.4 stable manual bug? — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1673] Re: Possible problem with ext/socket in 1.5.2 — itojun@...
[#1694] Conventions for our Ruby book — Dave Thomas <Dave@...>
[#1715] Install postgresql support — Ikhlasul Amal <amal@...>
Hi all,
Hi,
[#1786] Is this a bug? — Clemens Hintze <clemens.hintze@...>
(mailed & posted)
[#1814] Objects nested sometimes. — Hugh Sasse Staff Elec Eng <hgs@...>
I am attemptiong to write a package which consists of a workspace
[#1816] Ruby 1.5.3 under Tru64 (Alpha)? — Clemens Hintze <clemens.hintze@...>
Hi all,
Hi,
Yukihiro Matsumoto writes:
Hi,
Hi,
[#1834] enum examples? — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examplse of using the Enumerable module? I've had a
[#1844] Minor irritation, can't figure out how to patch it though! — Hugh Sasse Staff Elec Eng <hgs@...>
I was considering how difficult it would be to patch Ruby to accept
[#1889] [ruby-1.5.3] require / SAFE — ts <decoux@...>
[#1896] Ruby Syntax similar to other languages? — "David Douthitt" <DDouthitt@...>
From: Yukihiro Matsumoto <matz@netlab.co.jp>
[#1900] Enumerations and all that. — Hugh Sasse Staff Elec Eng <hgs@...>
Thank you to the people who responded to my questions about Enumerated
Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
On 16 Mar 2000, Dave Thomas wrote:
[#1929] Re: Class Variables — "David Douthitt" <DDouthitt@...>
| "David Douthitt" <DDouthitt@cuna.com> writes:
[#1942] no Fixnum#new ? — Quinn Dunkan <quinn@...>
Ok, I can add methods to a built-in class well enough (yes I know about succ,
[#1989] English Ruby/Gtk Tutorial? — schneik@...
Hi,
[#2022] rb_global_entry — ts <decoux@...>
[#2036] Anonymous and Singleton Classes — B_DAVISON <Bob.Davison@...>
I am a Ruby newbie and having some problems getting my mind around certain
[#2069] Ruby/GTK+ question about imlib --> gdk-pixbug — schneik@...
[#2073] Re: eval.rb fails — "Dat Nguyen" <thucdat@...>
The doc is fine, this happens only if you try to execute 'until' block
On Wed, 22 Mar 2000, Dat Nguyen wrote:
[#2084] Scope violated by import via 'require'? — Clemens Hintze <c.hintze@...>
Hi,
[#2104] ARGF or $< — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examples of how to use ARGF or $< as I cannot find much
Hi.
[#2165] Ruby strict mode and stand-alone executables. — "Conrad Schneiker" <schneiker@...>
Some people want Ruby to have a strict compile mode.
[#2203] Re: parse bug in 1.5 — schneik@...
[#2212] Re: Ruby/Glade usage questions. — ts <decoux@...>
>>>>> "m" == mrilu <mrilu@ale.cx> writes:
[#2241] setter() for local variables — ts <decoux@...>
[#2256] Multiple assignment of pattern match results. — schneik@...
[#2267] Re: Ruby and Eiffel — h.fulton@...
[#2309] Question about attribute writers — Dave Thomas <Dave@...>
Clemens Hintze <c.hintze@gmx.net> writes:
[ruby-talk:01875] object creation
Andrew Hunt writes:
>
> Hi all,
>
> Just a quick question -- is the following sequence the correct
> way to create a Ruby object from C?
>
> NEWOBJ(obj, c-type) -- allocate memory for an object
> OBJSETUP(obj, class, T_class); -- set appropriate flags
> rb_obj_call_init(obj, argc, argv); -- call initialize
Depends on what you want to do...
AFAIK, this is the correct way to create an instance of a Ruby
built-in class. But many of them offer also a instance creation
function on C level, e.g. rb_float_new, rb_str_new2, rb_ary_new, ...
They will deliver a ready-to-use instance without additional taxes ;-)
But if you want to create an instance of an own class (e.g. a Ruby
extension written by yourself), you should going this way:
my_RFoo *foo;
VALUE obj;
obj = Data_Make_Struct(klass, my_RFoo, mark_foo, free, foo);
rb_obj_call_init(obj, argc, argv);
The function 'mark_foo' has to be written, if you store references to
Ruby class instances within your my_RFoo structure. This function
would be called during garbage collection by the GC to let you mark
all instances still alive yet! If your my_RFoo realizes a kind of
e.g. list, you would need such 'mark_foo' function. If you have no
reference to other Ruby instances stored within your my_RFoo
structure, you simply can pass a 0 (ZERO) instead.
The 'free' function would be called by the GC if it has decided that
the lifetime of your object has ended! Often a simple C 'free' is
enough! But if you wants to deallocate memory you have allocated
within the 'new' method, you have also provide an own deallocate
function, and pass it to Data_Make_Struct.
>
> There was some discussion a while back on whether *every* class called
> initialize or not, how did that end up? It would apper from the
> current code that most of the built-in classes *do not* call
> an initialize method.
I think, we was not coming to a conclusion yet! *I* think, that
rb_obj_call_init should be called every time during instance
creation. But there may be some exceptions for classes like Fixnum,
for example.
This would make it simplier to derive a new class coded in Ruby from a
parent class coded in C, IMHO.
To simulate inheritance in C also, I moved the C structure creation
into my initialize method. The class will be created in MyFoo::new,
but the memory of the underlaying C data structure will be allocated
in MyFoo.initialize.
That has the advantage, that a child class of MyFoo, derived on C
level, can allocate its own memory, and let MyFoo.initialize
initialize it with the concerning data.
>
> Many thanks!
>
> /\ndy
>
...
\cle
--
Clemens Hintze mailto: c.hintze@gmx.net