Taras,

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.

Cheers,
Simon



> On Mar 7, 2021, at 11:12 PM, Taras Zakharko <taras.zakha...@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)
> 
> g(1+1)
> 
> 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? 
> 
> Thanks, 
> 
> Taras
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to