From: matz@... (Yukihiro Matsumoto) Date: 2002-08-02T05:42:10+09:00 Subject: Re: Segmentation Fault - Ruby Garbage Collection Hi, In message "Re: Segmentation Fault - Ruby Garbage Collection" on 02/08/02, William Djaja Tjokroaminata writes: |Probably the most direct problem that I am currently facing is, I will |have many entities that will be created and destroyed so often (millions |of times) such as packets and events. If the user is not going to have |access to these entities, I can create efficient structures for them (even |probably manage the memory usage.) However, when a user is allowed to |interact with them, I am forced to make the packets and events as Ruby |objects (to be honest, I don't know how much overhead the Ruby objects |have as compared to straight C structs; I have not made comparison yet.) 5 words (20 bytes on int32 platforms) for each objects. |I am thinking whether it is possible to design some "lazy evaluation" type |of object. In other words, when the user does not interact with them, |they are straight C structs so that the code is highly efficient. Once a |user interact with an entity, however, the struct creates a Ruby object |for the user to interface. I now understand what you want. But I'm not sure if it's possible. Probably the solution is wrapping your set of C data as a "lazy evaluating" Ruby object which wraps your flyweight C data only when the user starts interact with them. |Another (simpler) example is when I want to reuse Ruby array in C, it |forces all the entities to be Ruby objects, because a Ruby array, I think, |cannot hold objects other than Ruby objects. So if I just want to have a |(dynamic) array of double's, I am forced to create objects of type |rb_cFloat instead of straight C double's. (Of course, in this case the |solution is to use other C libraries.) NumArray? See RAA. matz.