From: Eric Hodel Date: 2005-08-20T17:37:12+09:00 Subject: Re: Wandering in the Wilderness Project On 20 Aug 2005, at 00:13, Charles E. Thornton wrote: > 1) VALUE Interpretation - Is the following Correct? > > a) If the LSB = 1, it is a Small Integer. > b) If the VALUE is equal to 0,2,4, or 6 it is a special > constant: false, true, nil, or undef. > c) If the lower 8 bits are equal to'0xe', it is a Symbol. > > d) Otherwise, it is an Object Reference You're missing Fixnum representation. > 3) Question - Why not put 'iv_tbl' pointers in all Built-in Objects. > a) Can every Object have valid Instance Variables? Yes, see rb_obj_instance_variables in variable.c, or play with irb. > b) Ruby Hacking Guide seems to put forth the argument that > 'iv_tbl' entries in other Built-in Objects would waste to much memory. > aa) Why? -Four bytes per object does not seem to be a major > hit? Float, String, etc rarely use ivars, so it makes more sense to use generic_iv_tbl instead. > bb) Even if it is - Memory Usage should not be a problem for > the > scale of programs using Ruby - Or am I wrong? An extra 4 bytes per object would be pretty expensive in a 50+ MB process. (I run 20 of them on a webserver.) > dd) I would trade reasonable increases in memory usage for > greater processing efficiency EVERY TIME! I think the memory increase would be a bit unreasonable. Every Float, String, Array, Regexp, Hash, File and wrapped C object would get 4 bytes bigger for a feature that is so rarely used. The way things are currently done you get the flexibility you want at a minimal cost of both size and speed. (Unless, of course, you're doing something strange like adding ivars to objects of all the builtin classes. I can't think of a good reason to do that, though.) -- Eric Hodel - drbrain@segment7.net - http://segment7.net FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04