[Rd] inline C/C++ in R: question and suggestion
Duncan Murdoch
murdoch at stats.uwo.ca
Tue May 22 21:52:42 CEST 2007
On 5/22/2007 1:59 PM, Oleg Sklyar wrote:
> This is a question and maybe an announcement.
>
> We've been discussing in the group that it would be nice to have a
> mechanism for something like "inline" C/C++ function calls in R. I do
> not want to reinvent the wheel, therefore, if something like that
> already exists, please give me a hint -- I could not find anything. If
> not, here is a working solution, please criticise so I could improve it.
This would be nice.
One suggestion that probably doesn't affect your package: It would be
even nicer if R incorporated something that Duncan Temple Lang suggested
last year, namely a new kind of quoting that didn't need escapes in the
string. He suggested borrowing triple quotes from Python; I suggested
something more like heredocs as in shells or Perl, or like \verb in TeX,
in case you wanted triple quotes in your C function. It would be nice
to settle on something, so that instead of
> code[1] <- " SEXP res;"
> code[2] <- " int nprotect = 0, nx, ny, nz, x, y;"
> code[3] <- " PROTECT(res = Rf_duplicate(a)); nprotect++;"
> code[4] <- " nx = INTEGER(GET_DIM(a))[0];"
> code[5] <- " ny = INTEGER(GET_DIM(a))[1];"
one could use (for example):
code <- '''
SEXP res;
int nprotect = 0, nx, ny, nz, x, y;
PROTECT(res = Rf_duplicate(a)); nprotect++;
nx = INTEGER(GET_DIM(a))[0];
ny = INTEGER(GET_DIM(a))[1];
'''
I think the only way this would affect your package is that you need to
be able to handle embedded newlines in strings, but I can't see why you
wouldn't be able to do that automatically.
Another suggestion:
You might want to allow a list of signatures and code chunks to be
passed to the compiler, producing a list of functions to evaluate them,
all compiled into one DLL.
Duncan Murdoch
More information about the R-devel
mailing list