Re: [Rd] PROTECT and OCaml GC.

From: Romain Francois <>
Date: Sat, 09 Jan 2010 20:27:08 +0100

On 01/09/2010 02:04 AM, Guillaume Yziquel wrote:
> Guillaume Yziquel a écrit :
>> Simon Urbanek a écrit :
>>> If you have suggestions for extending the API, feel free to post them
>>> with exact explanations how in general that extensions could be
>>> useful (general is the key word here - I think so far it was rather
>>> to hack around your way of implementing it). [And FWIW tryEval *is*
>>> part of the API].
>> Concerning tryEval, I had a look at context.c, and it says:
>>> /*
>>> R_tryEval is in Rinternals.h (so public), but not in the API.
>>> */
> And concerning tryEval, there's one feature I miss: there is error
> handling capabilities, but to my knowledge, it provides a boolean status
> back. True or false. Is it possible to get a full error message back, so
> that it can be analysed and translated to OCaml exceptions?

Not to my knowledge, what we do in Rcpp is to to bring the expression to the R side, evaluate it within a tryCatch and then grab either the result if successfull, or the error.

The R side of this is in :

and the C++ class is the Evaluator class:

It smells the "it works but ..." pattern.

tryEval is just a thin wrapper around R_ToplevelExec (in context.c), what you need (and we need also in Rcpp) is a somewhat improved version of R_ToplevelExec which would modify the context. This would remove the need for a round trip to the R side...

I once tried to factor R_ToplevelExec out of R into a package, but failed. When I get a better understanding of contexts, I might propose something.

>> Now, here's a feature I'd like to implement with the API:
>> In OCaml, there's a library called Lwt. It's a library implementing
>> lightweight, or green, threads.
>> What I want to do is to be able to launch some R code, and have it
>> multithread with other OCaml code, within one single real thread.
>> Therefore I have to implement the commutation context somewhere in the
>> evaluation mechanism of R itself.
>> The API doesn't support that, I guess.

Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
|- : External pointers with Rcpp
|- : R Journal, Volume 1/2, December 2009
`- : C++ exceptions at the R level

______________________________________________ mailing list
Received on Sat 09 Jan 2010 - 19:32:34 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 14 Jan 2010 - 11:50:13 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive