[Rcpp-devel] reference counting, garbage collection, etc ....

Dirk Eddelbuettel edd at debian.org
Sat Jan 2 15:07:53 CET 2010


On 2 January 2010 at 13:37, Romain François wrote:
| Right, so looking at R_PreserveObject and R_ReleaseObject (still waiting 
| for some insight from R-devel) it seems that we can preserve and release 
| the same SEXP more than once. preserve adds the sexp to the list of 
| preserved SEXP (even if it is there already), and release release the 
| first one it finds.
| 
| This leads me to thinking that we should make the garbage collection 
| stuff automatic and hidden, i.e when setting the SEXP of an RObject, we 
| automatically preserve it, and we release it automatically when the 
| object goes out of scope.

That was always the idea with Rcpp objects.  The classes manage memory, the
user doesn't have to worry.

And the design was always like this -- release memory in the dtor.
 
| Currently we have to manage this business manually, which will leads to 
| problems.

"We" as in class implementers/authors, or "we" as users?   As authors, yes we
do have to manage this, but that is because R forces us to, no?

| So i propose that RObject::m_sexp becomes private (as opposed to 
| protected) and we had a protected setSEXP that :
| - release the current SEXP if there is one
| - preserve the new SEXP
| 
| and make preserve and release protected (maybe even private members of 
| RObject), and remove the preserved bool.

Sounds like a technically more sounds implementation, but nothing really
changes for the user, no?  Ie there never was a user-accessibly method to 
unprotect/unpreserve.

Am I missing something?   

Dirk

-- 
Three out of two people have difficulties with fractions.


More information about the Rcpp-devel mailing list