As most R developers maybe are already aware of, R version 1.2.0 introduced a new `generational' garbage collector which means that strings and vectors (and language objects) are handled differently from the numerical atomic types.>From ``Writing R Extensions'':Earlier code was written in a style like. VECTOR(dimnames)[0] = getAttrib(x, R_NamesSymbol); but that is no longer allowed. The functions `VECTOR_ELT' and `SET_VECTOR_ELT' must now be used to access and set elements of a generic vector. There are analogous functions `STRING_ELT' and `SET_STRING_ELT' for character vectors. To convert existing code, use the following replacements. original replacement `foo = VECTOR(bar)[i]' `foo = VECTOR_ELT(bar, i)' `VECTOR(foo)[j] = bar' `SET_VECTOR_ELT(foo, j, bar)' `foo = STRING(bar)[i]' `foo = STRING_ELT(bar, i)' `STRING(foo)[j] = bar' `SET_STRING_ELT(foo, j, bar)' The changes were committed to the r-devel true this Monday, and imply that add-on packages using the original coding style will no longer work with current versions of r-devel. One possible solution for having packages with sources which work for compilation under both 1.1 and 1.2 is to use conditionals of the form #if R_VERSION >= R_Version(1, 2, 0) new-style-code #else old-style-code #endif I would like to ask add-on package maintainers of packages which are affected by the change to produce updated versions of their packages which work under both 1.1 and 1.2. It seems that the following ones require action: Java Matrix RMySQL RODBC foreign hdf5 netCDF stataread (Note that [currently], there is binary incompatibility between 1.1 and 1.2.) -k -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Hi, I just completed a package for reading and writing dbf files, that I will post soon so i will definately be affected since I used mostly the c api. Would the option below mean that there would be macros defined in say R.internals to have old style behave as new style, or would it be prefered that maintainers write seperate routines for new and old versions. I am imagining quite a bit of code bloat. Nicholas> > #if R_VERSION >= R_Version(1, 2, 0) > new-style-code > #else > old-style-code > #endif > > I would like to ask add-on package maintainers of packages which are > affected by the change to produce updated versions of their packages > which work under both 1.1 and 1.2. It seems that the following ones > require action: > > Java > Matrix > RMySQL > RODBC > foreign > hdf5 > netCDF > stataread > > (Note that [currently], there is binary incompatibility between 1.1 and > 1.2.) > > -k > > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- > r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html > Send "info", "help", or "[un]subscribe" > (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ >-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
>>>>> Kurt Hornik writes:> As most R developers maybe are already aware of, R version 1.2.0 > introduced a new `generational' garbage collector which means that > strings and vectors (and language objects) are handled differently > from the numerical atomic types.>> From ``Writing R Extensions'':> Earlier code was written in a style like. > VECTOR(dimnames)[0] = getAttrib(x, R_NamesSymbol);> but that is no longer allowed. The functions `VECTOR_ELT' and > `SET_VECTOR_ELT' must now be used to access and set elements of a > generic vector. There are analogous functions `STRING_ELT' and > `SET_STRING_ELT' for character vectors.> To convert existing code, use the following replacements.> original replacement > `foo = VECTOR(bar)[i]' `foo = VECTOR_ELT(bar, i)' > `VECTOR(foo)[j] = bar' `SET_VECTOR_ELT(foo, j, bar)' > `foo = STRING(bar)[i]' `foo = STRING_ELT(bar, i)' > `STRING(foo)[j] = bar' `SET_STRING_ELT(foo, j, bar)'> The changes were committed to the r-devel true this Monday, and imply > that add-on packages using the original coding style will no longer > work with current versions of r-devel. One possible solution for > having packages with sources which work for compilation under both 1.1 > and 1.2 is to use conditionals of the form> #if R_VERSION >= R_Version(1, 2, 0) > new-style-code > #else > old-style-code > #endif> I would like to ask add-on package maintainers of packages which are > affected by the change to produce updated versions of their packages > which work under both 1.1 and 1.2. It seems that the following ones > require action:> Java > Matrix > RMySQL > RODBC > foreign > hdf5 > netCDF > stataread> (Note that [currently], there is binary incompatibility between 1.1 > and 1.2.)As indicated, the above is only one possible solution. Another, and maybe the preferred one in order to avoid unnecessarily duplicating code, is the use of a *PRIVATE* header file containing the following code: #if R_VERSION < R_Version(1, 2, 0) # define STRING_ELT(x,i) (STRING(x)[i]) # define VECTOR_ELT(x,i) (VECTOR(x)[i]) # define SET_STRING_ELT(x,i,v) (STRING(x)[i] = (v)) # define SET_VECTOR_ELT(x,i,v) (VECTOR(x)[i] = (v)) #endif (Note that in order to achieve maximal source compatibility in the 1.x series, it is preferable to have add-on packages modified, as we cannot easily control the `old' (pre-1.1.1) R versions included in various distributions.) -k -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._