This is the mail archive of the guile@cygnus.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: New smob interface


Mikael Djurfeldt <mdj@nada.kth.se> writes:

> So, the question is how to handle situations when the user application
> wants to allocate memory.
> 
> I guess there are two options:
> 
> 1. Specify size 0 in this case, so that the GC never is aware of this
>    memory.
> 
> 2. Tell the GC about foreignly allocated memory.  This could either be
>    made through a dedicated call/macro or implicitly in a sibling
>    function to scm_make_smob which takes two args, the second being a
>    pointer to the data allocated.

I think I know how I'd like things to be (again with some emphasis on
simplicity of implementation and efficiency; a more user-friendly
interface to creating new data types can be supplied on the gh level):

The user has two decisions to make

1. Do I want to allocate and free mallocated memory myself?
   Yes => specify size 0 as second arg to scm_make_smob_type
   No  => specify size of smob data struct

2. Do I have SCM objects in my struct which are handled by the GC?
   Yes => use SCM_NEWSMOB
   No  => use scm_make_smob

In the docs for scm_make_smob_type one could say something like:

"SIZE is the amount of memory allocated/freed by Guile, either through
 scm_make_smob/the implicit free function or through
 scm_must_malloc/scm_must_free.  If the user chooses to allocate and
 free malloced memory himself, he should specify 0."

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]