[Rd] An argument promise containing bytecode?
@|mon@urb@nek @end|ng |rom R-project@org
Mon Mar 8 03:51:00 CET 2021
I don't think this has anything to do with promises, rather it is called Just-In-Time (JIT) compilation - see ?enablleJIT in R, it is enabled by default, so the function will be compiled on second use.
> On Mar 7, 2021, at 11:12 PM, Taras Zakharko <taras.zakharko using uzh.ch> wrote:
> Dear all,
> I was playing around with some C code that inspects argument promises and I noticed that forwarded arguments sometimes contain bytecode in the PRCODE component. E.g. if I have a nested call like this:
> f <- function(x) x
> g <- function(x) f(x)
> and inspect the value of “x” in g’s frame from within f’s frame (basically calling findVar(parent.frame(), x)), I would see a LANGSXP the first time g() is invoked, but BCODESXP on every subsequent time. Using PREXPR gets me the original LANGSXP in any case.
> Now, this is curious behavior and I had a quick glance into R source code related to closure evaluation and argument matching, but I could not see anything that would generate bytecode for promises. Could someone with in-depth knowledge of R’s machinery explain what is going on?
> R-devel using r-project.org mailing list
More information about the R-devel